mno-enterprise-api 3.3.0 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/mno_enterprise/jpi/v1/admin/app_feedbacks_controller.rb +14 -0
  3. data/app/controllers/mno_enterprise/jpi/v1/admin/app_questions_controller.rb +14 -0
  4. data/app/views/mno_enterprise/jpi/v1/admin/app_feedbacks/_comment.json.jbuilder +10 -0
  5. data/app/views/mno_enterprise/jpi/v1/admin/app_feedbacks/_resource.json.jbuilder +7 -0
  6. data/app/views/mno_enterprise/jpi/v1/admin/app_feedbacks/index.json.jbuilder +5 -0
  7. data/app/views/mno_enterprise/jpi/v1/admin/app_questions/_answer.json.jbuilder +3 -0
  8. data/app/views/mno_enterprise/jpi/v1/admin/app_questions/_resource.json.jbuilder +8 -0
  9. data/app/views/mno_enterprise/jpi/v1/admin/app_questions/index.json.jbuilder +5 -0
  10. data/app/views/mno_enterprise/jpi/v1/admin/base_resource/_app_review.json.jbuilder +17 -0
  11. data/app/views/mno_enterprise/jpi/v1/marketplace/_app.json.jbuilder +1 -1
  12. data/app/views/mno_enterprise/jpi/v1/marketplace/index.json.jbuilder +4 -2
  13. data/config/routes.rb +2 -0
  14. data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/kpis_controller.rb +2 -0
  15. data/lib/mno_enterprise/concerns/controllers/jpi/v1/marketplace_controller.rb +9 -5
  16. data/lib/mno_enterprise/concerns/controllers/jpi/v1/teams_controller.rb +2 -1
  17. data/spec/controllers/mno_enterprise/jpi/v1/admin/app_feedbacks_controller_spec.rb +54 -0
  18. data/spec/controllers/mno_enterprise/jpi/v1/admin/app_questions_controller_spec.rb +54 -0
  19. data/spec/controllers/mno_enterprise/jpi/v1/impac/kpis_controller_spec.rb +34 -15
  20. data/spec/controllers/mno_enterprise/jpi/v1/marketplace_controller_spec.rb +2 -1
  21. data/spec/routing/mno_enterprise/jpi/v1/admin/app_feedbacks_controller_routing_spec.rb +11 -0
  22. data/spec/routing/mno_enterprise/jpi/v1/admin/app_questions_controller_routing_spec.rb +11 -0
  23. metadata +21 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0d1fc05e6d511ddaa9c90ac0eadcfa98f34164be
4
- data.tar.gz: 7cd5ece7aef6ec8bedadb102135c9e1aae7de800
3
+ metadata.gz: 59481a633a5a28ae2dd38005cdb551b228c5b5bf
4
+ data.tar.gz: 76d54cd45bca2dffce920a50202d31688509389e
5
5
  SHA512:
6
- metadata.gz: e50da83dcdacab9f7e2a4c51a538a00e885a4360c5bb4c40335f635e357c8e67474638c7b4fffaea4f8b13be69ef7a577173d22a3722f305ac39f5290f7aa386
7
- data.tar.gz: 04d2713f52f2bdb25d6605b8a9243e3b313e661aebf457cf4af81976ab9d3d74ba30f7952cd054eb6181d94d261dbb9da29713d24369fc6302975e795691c72f
6
+ metadata.gz: dc8fe919ad098561ade8eed41579e5395d89d88bc84187f5d1b582b333bd2142d8f8f1995032a356caa5017b0f63b2c652698a4d687ba2411961c212936a5461
7
+ data.tar.gz: bf5fc80d57d306d94a89444444af57687f8e7ff870817c8a530e27fd3388032efc253be7c3a7c15f021ee9eb2e621b7f401d248ce730164c8dc14a97640da2c6
@@ -0,0 +1,14 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Admin::AppFeedbacksController < Jpi::V1::Admin::BaseResourceController
3
+ # GET /mnoe/jpi/v1/admin/app_feedbacks
4
+ def index
5
+ @app_reviews = MnoEnterprise::AppFeedback
6
+ @app_reviews = @app_reviews.limit(params[:limit]) if params[:limit]
7
+ @app_reviews = @app_reviews.skip(params[:offset]) if params[:offset]
8
+ @app_reviews = @app_reviews.order_by(params[:order_by]) if params[:order_by]
9
+ @app_reviews = @app_reviews.where(params[:where]) if params[:where]
10
+ @app_reviews = @app_reviews.all.fetch
11
+ response.headers['X-Total-Count'] = @app_reviews.metadata[:pagination][:count]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module MnoEnterprise
2
+ class Jpi::V1::Admin::AppQuestionsController < Jpi::V1::Admin::BaseResourceController
3
+ # GET /mnoe/jpi/v1/admin/app_questions
4
+ def index
5
+ @app_reviews = MnoEnterprise::AppQuestion
6
+ @app_reviews = @app_reviews.limit(params[:limit]) if params[:limit]
7
+ @app_reviews = @app_reviews.skip(params[:offset]) if params[:offset]
8
+ @app_reviews = @app_reviews.order_by(params[:order_by]) if params[:order_by]
9
+ @app_reviews = @app_reviews.where(params[:where]) if params[:where]
10
+ @app_reviews = @app_reviews.all.fetch
11
+ response.headers['X-Total-Count'] = @app_reviews.metadata[:pagination][:count]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ json.partial! 'app_review', app_review: app_comment, show_rating: false
2
+
3
+ json.feedback_id app_comment[:feedback_id]
4
+ if app_comment[:versions]
5
+ json.versions do
6
+ json.array! app_comment[:versions] do |version|
7
+ json.extract! version, :id, :event, :description
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ json.partial! 'app_review', app_review: app_feedback
2
+
3
+ json.comments do
4
+ json.array! app_feedback[:comments] do |app_comment|
5
+ json.partial! 'comment', app_comment: app_comment
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ json.app_feedbacks do
2
+ json.array! @app_reviews do |app_feedback|
3
+ json.partial! 'resource', app_feedback: app_feedback
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ json.partial! 'app_review', app_review: app_answer, show_rating: false
2
+
3
+ json.question_id app_answer[:question_id]
@@ -0,0 +1,8 @@
1
+ json.partial! 'app_review', app_review: app_question, show_rating: false
2
+
3
+ json.answers do
4
+ json.array! app_question[:answers] do |app_answer|
5
+ json.partial! 'answer', app_answer: app_answer
6
+ end
7
+ end
8
+
@@ -0,0 +1,5 @@
1
+ json.app_questions do
2
+ json.array! @app_reviews do |app_question|
3
+ json.partial! 'resource', app_question: app_question
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ json.extract! app_review, :id, :description, :status,
2
+ :user_id, :user_name, :organization_id, :organization_name,
3
+ :app_id, :app_name, :user_admin_role, :created_at, :updated_at,
4
+ :edited, :edited_by_name, :edited_by_admin_role, :edited_by_id
5
+
6
+ show_rating = local_assigns.fetch(:show_rating, true)
7
+ if app_review.respond_to?(:rating) && show_rating
8
+ json.rating app_review.rating
9
+ end
10
+
11
+ if app_review[:versions]
12
+ json.versions do
13
+ json.array! app_review[:versions] do |version|
14
+ json.extract! version, :id, :event, :description, :created_at, :author
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  json.extract! app, :id, :nid, :name, :stack, :key_benefits, :categories, :tags, :tiny_description,
2
- :testimonials, :pictures, :pricing_plans, :rank, :support_url, :key_workflows, :key_features
2
+ :testimonials, :pictures, :pricing_plans, :rank, :support_url, :key_workflows, :key_features, :pricing_text
3
3
 
4
4
  json.description markdown(app.sanitized_description)
5
5
  json.known_limitations markdown(app.known_limitations)
@@ -1,2 +1,4 @@
1
- json.categories @categories
2
- json.apps @apps, partial: 'app', as: :app
1
+ json.cache! ['marketplace', @last_modified] do
2
+ json.categories @categories
3
+ json.apps @apps, partial: 'app', as: :app
4
+ end
data/config/routes.rb CHANGED
@@ -166,6 +166,8 @@ MnoEnterprise::Engine.routes.draw do
166
166
  #============================================================
167
167
  namespace :admin, defaults: {format: 'json'} do
168
168
  resources :audit_events, only: [:index]
169
+ resources :app_feedbacks, only: [:index]
170
+ resources :app_questions, only: [:index]
169
171
  resources :app_instances, only: [:destroy], shallow: true
170
172
  resources :app_reviews, only: [:index, :show, :update]
171
173
  resources :app_comments, only: [:create]
@@ -61,6 +61,8 @@ module MnoEnterprise::Concerns::Controllers::Jpi::V1::Impac::KpisController
61
61
  # Creates a default alert for kpis created with targets defined.
62
62
  if kpi.targets.present?
63
63
  current_user.alerts.create({service: 'inapp', impac_kpi_id: kpi.id})
64
+ # TODO: should widget KPIs create an email alert automatically?
65
+ current_user.alerts.create({service: 'email', impac_kpi_id: kpi.id}) if widget.present?
64
66
  # TODO: reload is adding the recipients to the kpi alerts (making another request).
65
67
  kpi.reload
66
68
  end
@@ -13,14 +13,18 @@ module MnoEnterprise::Concerns::Controllers::Jpi::V1::MarketplaceController
13
13
  #==================================================================
14
14
  # Instance methods
15
15
  #==================================================================
16
- # GET /mnoe/mnoe/jpi/v1/marketplace
16
+ # GET /mnoe/jpi/v1/marketplace
17
17
  def index
18
18
  expires_in 0, public: true, must_revalidate: true
19
- last_modified = app_relation.order_by('updated_at.desc').limit(1).first.updated_at
19
+ @last_modified = app_relation.order_by('updated_at.desc').limit(1).first.updated_at
20
+
21
+ if stale?(last_modified: @last_modified)
22
+ @apps = Rails.cache.fetch("marketplace/index-apps-#{@last_modified}") do
23
+ apps = app_relation.to_a
24
+ apps.sort_by! { |app| [app.rank ? 0 : 1 , app.rank] } # the nil ranks will appear at the end
25
+ apps
26
+ end
20
27
 
21
- if stale?(last_modified: last_modified)
22
- @apps = app_relation.to_a
23
- @apps.sort_by! { |app| [app.rank ? 0 : 1 , app.rank] } # the nil ranks will appear at the end
24
28
  @categories = MnoEnterprise::App.categories(@apps)
25
29
  @categories.delete('Most Popular')
26
30
  respond_to do |format|
@@ -16,7 +16,7 @@ module MnoEnterprise::Concerns::Controllers::Jpi::V1::TeamsController
16
16
  # GET /mnoe/jpi/v1/organizations/:organization_id/teams
17
17
  def index
18
18
  authorize! :read, parent_organization
19
- @teams = parent_organization.teams
19
+ @teams = MnoEnterprise::Team.where(organization_id: params[:organization_id])
20
20
  end
21
21
 
22
22
  # GET /mnoe/jpi/v1/teams/:id
@@ -95,6 +95,7 @@ module MnoEnterprise::Concerns::Controllers::Jpi::V1::TeamsController
95
95
  MnoEnterprise::EventLogger.info('team_update', current_user.id, 'Team composition updated', @team,
96
96
  {action: action.to_s, users: users.map(&:email)})
97
97
  end
98
+ @team.reload
98
99
 
99
100
  render 'show'
100
101
  end
@@ -0,0 +1,54 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise
4
+ include MnoEnterprise::TestingSupport::SharedExamples::JpiV1Admin
5
+
6
+ describe Jpi::V1::Admin::AppFeedbacksController, type: :controller do
7
+ render_views
8
+ routes { MnoEnterprise::Engine.routes }
9
+ before { request.env['HTTP_ACCEPT'] = 'application/json' }
10
+ let(:user) { build(:user, :admin, :with_organizations) }
11
+ let(:feedback_comment_1) { build(:app_comment) }
12
+ let(:feedback_comment_2) { build(:app_comment) }
13
+ let(:app_feedback) { build(:app_feedback, comments: [feedback_comment_1, feedback_comment_2]) }
14
+ let(:expected_hash_for_comment_1) do
15
+ attrs = %w(id description status user_id user_name organization_id organization_name app_id feedback_id app_name user_admin_role edited edited_by_name edited_by_admin_role edited_by_id)
16
+ feedback_comment_1.attributes.slice(*attrs).merge({'created_at' => feedback_comment_1.created_at.as_json, 'updated_at' => feedback_comment_1.updated_at.as_json})
17
+ end
18
+ let(:expected_hash_for_comment_2) do
19
+ attrs = %w(id description status user_id user_name organization_id organization_name app_id feedback_id app_name user_admin_role edited edited_by_name edited_by_admin_role edited_by_id)
20
+ feedback_comment_2.attributes.slice(*attrs).merge({'created_at' => feedback_comment_2.created_at.as_json, 'updated_at' => feedback_comment_2.updated_at.as_json})
21
+ end
22
+ let(:expected_array_for_comments) { [expected_hash_for_comment_1, expected_hash_for_comment_2] }
23
+ let(:expected_hash_for_feedback) do
24
+ attrs = %w(id rating description status user_id user_name organization_id organization_name app_id app_name user_admin_role comments edited edited_by_name edited_by_admin_role edited_by_id)
25
+ app_feedback.attributes.slice(*attrs).merge({'created_at' => app_feedback.created_at.as_json, 'updated_at' => app_feedback.updated_at.as_json, 'comments' => expected_array_for_comments})
26
+ end
27
+ let(:expected_hash_for_feedbacks) do
28
+ {
29
+ 'app_feedbacks' => [expected_hash_for_feedback],
30
+ }
31
+ end
32
+ before do
33
+ api_stub_for(get: '/app_feedbacks', response: from_api([app_feedback]))
34
+ api_stub_for(get: "/users/#{user.id}", response: from_api(user))
35
+ sign_in user
36
+ end
37
+
38
+ describe '#index' do
39
+ subject { get :index }
40
+
41
+ it_behaves_like "a jpi v1 admin action"
42
+
43
+ context 'success' do
44
+ before { subject }
45
+
46
+ it 'returns a list of app_feedbacks' do
47
+ expect(response).to be_success
48
+ expect(JSON.parse(response.body)).to eq(expected_hash_for_feedbacks)
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise
4
+ include MnoEnterprise::TestingSupport::SharedExamples::JpiV1Admin
5
+
6
+ describe Jpi::V1::Admin::AppQuestionsController, type: :controller do
7
+ render_views
8
+ routes { MnoEnterprise::Engine.routes }
9
+ before { request.env['HTTP_ACCEPT'] = 'application/json' }
10
+ let(:user) { build(:user, :admin, :with_organizations) }
11
+ let(:question_answer_1) { build(:app_answer) }
12
+ let(:question_answer_2) { build(:app_answer) }
13
+ let(:app_question) { build(:app_question, answers: [question_answer_1, question_answer_2]) }
14
+ let(:expected_hash_for_answer_1) do
15
+ attrs = %w(id description status user_id user_name organization_id organization_name app_id question_id app_name user_admin_role edited edited_by_name edited_by_admin_role edited_by_id)
16
+ question_answer_1.attributes.slice(*attrs).merge({'created_at' => question_answer_1.created_at.as_json, 'updated_at' => question_answer_1.updated_at.as_json})
17
+ end
18
+ let(:expected_hash_for_answer_2) do
19
+ attrs = %w(id description status user_id user_name organization_id organization_name app_id question_id app_name user_admin_role edited edited_by_name edited_by_admin_role edited_by_id)
20
+ question_answer_2.attributes.slice(*attrs).merge({'created_at' => question_answer_2.created_at.as_json, 'updated_at' => question_answer_2.updated_at.as_json})
21
+ end
22
+ let(:expected_array_for_answers) { [expected_hash_for_answer_1, expected_hash_for_answer_2] }
23
+ let(:expected_hash_for_question) do
24
+ attrs = %w(id description status user_id user_name organization_id organization_name app_id app_name user_admin_role answers edited edited_by_name edited_by_admin_role edited_by_id)
25
+ app_question.attributes.slice(*attrs).merge({'created_at' => app_question.created_at.as_json, 'updated_at' => app_question.updated_at.as_json, 'answers' => expected_array_for_answers})
26
+ end
27
+ let(:expected_hash_for_questions) do
28
+ {
29
+ 'app_questions' => [expected_hash_for_question],
30
+ }
31
+ end
32
+ before do
33
+ api_stub_for(get: '/app_questions', response: from_api([app_question]))
34
+ api_stub_for(get: "/users/#{user.id}", response: from_api(user))
35
+ sign_in user
36
+ end
37
+
38
+ describe '#index' do
39
+ subject { get :index }
40
+
41
+ it_behaves_like "a jpi v1 admin action"
42
+
43
+ context 'success' do
44
+ before { subject }
45
+
46
+ it 'returns a list of app_feedbacks' do
47
+ expect(response).to be_success
48
+ expect(JSON.parse(response.body)).to eq(expected_hash_for_questions)
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -84,21 +84,6 @@ module MnoEnterprise
84
84
  expect(assigns(:kpi)).to eq(kpi)
85
85
  end
86
86
 
87
- context "when there are kpi targets" do
88
- let(:kpi_targets) { { evolution: [{max: "20"}] } }
89
-
90
- before do
91
- api_stub_for(post: "/users/#{user.id}/alerts", response: from_api(alert))
92
- api_stub_for(get: "/users/#{user.id}/alerts", response: from_api({}))
93
- end
94
-
95
- it "creates kpi alerts" do
96
- subject
97
- expect(assigns(:kpi).alerts).to eq([alert])
98
- expect(response).to have_http_status(:ok)
99
- end
100
- end
101
-
102
87
  it { subject; expect(response).to have_http_status(:ok) }
103
88
  end
104
89
 
@@ -124,6 +109,21 @@ module MnoEnterprise
124
109
  subject
125
110
  expect(assigns(:dashboard)).to eq(dashboard)
126
111
  end
112
+
113
+ context "when there are kpi targets" do
114
+ let(:kpi_targets) { { evolution: [{max: "20"}] } }
115
+
116
+ before do
117
+ api_stub_for(post: "/users/#{user.id}/alerts", response: from_api(alert))
118
+ api_stub_for(get: "/users/#{user.id}/alerts", response: from_api({}))
119
+ end
120
+
121
+ it "creates a kpi inapp alert" do
122
+ subject
123
+ expect(assigns(:kpi).alerts).to eq([alert])
124
+ expect(response).to have_http_status(:ok)
125
+ end
126
+ end
127
127
  end
128
128
 
129
129
  context "a widget KPI" do
@@ -147,6 +147,25 @@ module MnoEnterprise
147
147
  subject
148
148
  expect(assigns(:widget)).to eq(widget)
149
149
  end
150
+
151
+ context "when there are kpi targets" do
152
+ let(:kpi_targets) { { evolution: [{max: "20"}] } }
153
+
154
+ let(:email_alert) { build(:impac_alert, kpi: kpi, service: 'email') }
155
+ let(:alerts_hashes) { [from_api(alert)[:data], from_api(email_alert)[:data]] }
156
+
157
+ before do
158
+ api_stub_for(post: "/users/#{user.id}/alerts", response: from_api(alert), body: {service: 'inapp', impac_kpi_id: kpi.id})
159
+ api_stub_for(post: "/users/#{user.id}/alerts", response: from_api(email_alert), body: {service: 'email', impac_kpi_id: kpi.id})
160
+ api_stub_for(get: "/users/#{user.id}/alerts", response: from_api({}))
161
+ end
162
+
163
+ it "creates kpi alerts" do
164
+ subject
165
+ expect(assigns(:kpi).alerts).to eq([alert, email_alert])
166
+ expect(response).to have_http_status(:ok)
167
+ end
168
+ end
150
169
  end
151
170
  end
152
171
 
@@ -44,7 +44,8 @@ module MnoEnterprise
44
44
  'subcategories' => app.subcategories,
45
45
  'average_rating' => app.average_rating,
46
46
  'add_on' => app.add_on?,
47
- 'running_instances_count' => app.running_instances_count
47
+ 'running_instances_count' => app.running_instances_count,
48
+ 'pricing_text' => app.pricing_text
48
49
  }
49
50
  end
50
51
 
@@ -0,0 +1,11 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise
4
+ RSpec.describe Jpi::V1::Admin::AppFeedbacksController, type: :routing do
5
+ routes { MnoEnterprise::Engine.routes }
6
+
7
+ it 'routes to #index' do
8
+ expect(get('/jpi/v1/admin/app_feedbacks')).to route_to("mno_enterprise/jpi/v1/admin/app_feedbacks#index", format: "json")
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise
4
+ RSpec.describe Jpi::V1::Admin::AppQuestionsController, type: :routing do
5
+ routes { MnoEnterprise::Engine.routes }
6
+
7
+ it 'routes to #index' do
8
+ expect(get('/jpi/v1/admin/app_questions')).to route_to("mno_enterprise/jpi/v1/admin/app_questions#index", format: "json")
9
+ end
10
+ end
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mno-enterprise-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-20 00:00:00.000000000 Z
12
+ date: 2017-07-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mno-enterprise-core
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 3.3.0
20
+ version: 3.3.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 3.3.0
27
+ version: 3.3.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: jbuilder
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -217,7 +217,9 @@ files:
217
217
  - app/controllers/mno_enterprise/impersonate_controller.rb
218
218
  - app/controllers/mno_enterprise/jpi/v1/admin/app_answers_controller.rb
219
219
  - app/controllers/mno_enterprise/jpi/v1/admin/app_comments_controller.rb
220
+ - app/controllers/mno_enterprise/jpi/v1/admin/app_feedbacks_controller.rb
220
221
  - app/controllers/mno_enterprise/jpi/v1/admin/app_instances_controller.rb
222
+ - app/controllers/mno_enterprise/jpi/v1/admin/app_questions_controller.rb
221
223
  - app/controllers/mno_enterprise/jpi/v1/admin/app_reviews_controller.rb
222
224
  - app/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller.rb
223
225
  - app/controllers/mno_enterprise/jpi/v1/admin/base_resource_controller.rb
@@ -276,12 +278,19 @@ files:
276
278
  - app/views/mno_enterprise/deletion_requests/show.html.haml
277
279
  - app/views/mno_enterprise/jpi/v1/admin/app_answers/show.json.jbuilder
278
280
  - app/views/mno_enterprise/jpi/v1/admin/app_comments/show.json.jbuilder
281
+ - app/views/mno_enterprise/jpi/v1/admin/app_feedbacks/_comment.json.jbuilder
282
+ - app/views/mno_enterprise/jpi/v1/admin/app_feedbacks/_resource.json.jbuilder
283
+ - app/views/mno_enterprise/jpi/v1/admin/app_feedbacks/index.json.jbuilder
284
+ - app/views/mno_enterprise/jpi/v1/admin/app_questions/_answer.json.jbuilder
285
+ - app/views/mno_enterprise/jpi/v1/admin/app_questions/_resource.json.jbuilder
286
+ - app/views/mno_enterprise/jpi/v1/admin/app_questions/index.json.jbuilder
279
287
  - app/views/mno_enterprise/jpi/v1/admin/app_reviews/_app_review.json.jbuilder
280
288
  - app/views/mno_enterprise/jpi/v1/admin/app_reviews/index.json.jbuilder
281
289
  - app/views/mno_enterprise/jpi/v1/admin/app_reviews/show.json.jbuilder
282
290
  - app/views/mno_enterprise/jpi/v1/admin/audit_events/_audit_event.json.jbuilder
283
291
  - app/views/mno_enterprise/jpi/v1/admin/audit_events/index.csv.erb
284
292
  - app/views/mno_enterprise/jpi/v1/admin/audit_events/index.json.jbuilder
293
+ - app/views/mno_enterprise/jpi/v1/admin/base_resource/_app_review.json.jbuilder
285
294
  - app/views/mno_enterprise/jpi/v1/admin/base_resource/_member.json.jbuilder
286
295
  - app/views/mno_enterprise/jpi/v1/admin/cloud_apps/_cloud_app.json.jbuilder
287
296
  - app/views/mno_enterprise/jpi/v1/admin/cloud_apps/index.json.jbuilder
@@ -410,7 +419,9 @@ files:
410
419
  - spec/controllers/mno_enterprise/impersonate_controller_spec.rb
411
420
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_answers_controller_spec.rb
412
421
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_comments_controller_spec.rb
422
+ - spec/controllers/mno_enterprise/jpi/v1/admin/app_feedbacks_controller_spec.rb
413
423
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_instances_controller_spec.rb
424
+ - spec/controllers/mno_enterprise/jpi/v1/admin/app_questions_controller_spec.rb
414
425
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_reviews_controller_spec.rb
415
426
  - spec/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller_spec.rb
416
427
  - spec/controllers/mno_enterprise/jpi/v1/admin/cloud_apps_controller_spec.rb
@@ -454,7 +465,9 @@ files:
454
465
  - spec/routing/mno_enterprise/admin/invoices_controller_routing_spec.rb
455
466
  - spec/routing/mno_enterprise/deletion_requests_controller_routing_spec.rb
456
467
  - spec/routing/mno_enterprise/impersonate_controller_routing_spec.rb
468
+ - spec/routing/mno_enterprise/jpi/v1/admin/app_feedbacks_controller_routing_spec.rb
457
469
  - spec/routing/mno_enterprise/jpi/v1/admin/app_instances_controller_routing_spec.rb
470
+ - spec/routing/mno_enterprise/jpi/v1/admin/app_questions_controller_routing_spec.rb
458
471
  - spec/routing/mno_enterprise/jpi/v1/admin/app_reviews_controller_routing_spec.rb
459
472
  - spec/routing/mno_enterprise/jpi/v1/admin/audit_events_controller_routing_spec.rb
460
473
  - spec/routing/mno_enterprise/jpi/v1/admin/cloud_apps_controller_routing_spec.rb
@@ -516,10 +529,12 @@ test_files:
516
529
  - spec/routing/mno_enterprise/webhook/o_auth_controller_routing_spec.rb
517
530
  - spec/routing/mno_enterprise/pages_controller_routing_spec.rb
518
531
  - spec/routing/mno_enterprise/org_invites_controller_routing_spec.rb
532
+ - spec/routing/mno_enterprise/jpi/v1/admin/app_feedbacks_controller_routing_spec.rb
519
533
  - spec/routing/mno_enterprise/jpi/v1/admin/organizations_controller_routing_spec.rb
520
534
  - spec/routing/mno_enterprise/jpi/v1/admin/tenant_invoices_controller_routing_spec.rb
521
535
  - spec/routing/mno_enterprise/jpi/v1/admin/app_instances_controller_routing_spec.rb
522
536
  - spec/routing/mno_enterprise/jpi/v1/admin/audit_events_controller_routing_spec.rb
537
+ - spec/routing/mno_enterprise/jpi/v1/admin/app_questions_controller_routing_spec.rb
523
538
  - spec/routing/mno_enterprise/jpi/v1/admin/theme_controller_routing_spec.rb
524
539
  - spec/routing/mno_enterprise/jpi/v1/admin/invoices_controller_routing_spec.rb
525
540
  - spec/routing/mno_enterprise/jpi/v1/admin/invites_controller_routing_spec.rb
@@ -559,10 +574,12 @@ test_files:
559
574
  - spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb
560
575
  - spec/controllers/mno_enterprise/auth/omniauth_callback_controller_spec.rb
561
576
  - spec/controllers/mno_enterprise/auth/confirmation_controller_spec.rb
577
+ - spec/controllers/mno_enterprise/jpi/v1/admin/app_questions_controller_spec.rb
562
578
  - spec/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller_spec.rb
563
579
  - spec/controllers/mno_enterprise/jpi/v1/admin/cloud_apps_controller_spec.rb
564
580
  - spec/controllers/mno_enterprise/jpi/v1/admin/organizations_controller_spec.rb
565
581
  - spec/controllers/mno_enterprise/jpi/v1/admin/invites_controller_spec.rb
582
+ - spec/controllers/mno_enterprise/jpi/v1/admin/app_feedbacks_controller_spec.rb
566
583
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_instances_controller_spec.rb
567
584
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_answers_controller_spec.rb
568
585
  - spec/controllers/mno_enterprise/jpi/v1/admin/invoices_controller_spec.rb