mno-enterprise-api 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mno_enterprise/config.js.coffee.erb +8 -0
  3. data/app/controllers/mno_enterprise/admin/invoices_controller.rb +18 -0
  4. data/app/controllers/mno_enterprise/impersonate_controller.rb +5 -1
  5. data/app/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller.rb +9 -0
  6. data/app/controllers/mno_enterprise/jpi/v1/admin/users_controller.rb +10 -4
  7. data/app/controllers/mno_enterprise/jpi/v1/audit_events_controller.rb +28 -0
  8. data/app/controllers/mno_enterprise/jpi/v1/base_resource_controller.rb +1 -1
  9. data/app/controllers/mno_enterprise/webhook/events_controller.rb +7 -0
  10. data/app/views/mno_enterprise/auth/confirmations/lounge.html.haml +26 -25
  11. data/app/views/mno_enterprise/jpi/v1/admin/audit_events/_audit_event.json.jbuilder +1 -1
  12. data/app/views/mno_enterprise/jpi/v1/admin/audit_events/index.csv.erb +14 -0
  13. data/app/views/mno_enterprise/jpi/v1/admin/organizations/_invoices.json.jbuilder +1 -0
  14. data/app/views/mno_enterprise/jpi/v1/admin/organizations/_organization.json.jbuilder +1 -1
  15. data/app/views/mno_enterprise/jpi/v1/admin/users/show.json.jbuilder +1 -0
  16. data/app/views/mno_enterprise/jpi/v1/audit_events/_audit_event.json.jbuilder +5 -0
  17. data/app/views/mno_enterprise/jpi/v1/audit_events/index.csv.erb +12 -0
  18. data/app/views/mno_enterprise/jpi/v1/audit_events/index.json.jbuilder +4 -0
  19. data/app/views/mno_enterprise/jpi/v1/current_users/show.json.jbuilder +1 -1
  20. data/app/views/mno_enterprise/jpi/v1/impac/kpis/_kpi.json.jbuilder +1 -1
  21. data/app/views/mno_enterprise/jpi/v1/impac/widgets/_widget.json.jbuilder +3 -1
  22. data/app/views/mno_enterprise/jpi/v1/marketplace/_app.json.jbuilder +10 -1
  23. data/app/views/mno_enterprise/jpi/v1/organizations/_organization.json.jbuilder +1 -1
  24. data/app/views/mno_enterprise/webhook/o_auth/authorize.html.haml +1 -1
  25. data/config/routes.rb +16 -5
  26. data/lib/mno_enterprise/audit_events_listener.rb +11 -6
  27. data/lib/mno_enterprise/concerns/controllers/jpi/v1/current_users_controller.rb +6 -1
  28. data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/kpis_controller.rb +9 -10
  29. data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/widgets_controller.rb +6 -3
  30. data/lib/mno_enterprise/concerns/controllers/jpi/v1/marketplace_controller.rb +20 -8
  31. data/lib/mno_enterprise/concerns/controllers/jpi/v1/organizations_controller.rb +12 -0
  32. data/lib/mno_enterprise/concerns/controllers/jpi/v1/teams_controller.rb +13 -0
  33. data/lib/mno_enterprise/concerns/controllers/pages_controller.rb +2 -0
  34. data/lib/mno_enterprise/concerns/controllers/webhook/events_controller.rb +22 -0
  35. data/lib/mno_enterprise/concerns/controllers/webhook/o_auth_controller.rb +12 -3
  36. data/lib/mno_enterprise/event_logger.rb +2 -2
  37. data/lib/mno_enterprise/intercom_events_listener.rb +25 -30
  38. data/spec/controllers/mno_enterprise/admin/invoices_controller_spec.rb +38 -0
  39. data/spec/controllers/mno_enterprise/impersonate_controller_spec.rb +6 -0
  40. data/spec/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller_spec.rb +9 -0
  41. data/spec/controllers/mno_enterprise/jpi/v1/admin/organizations_controller_spec.rb +3 -2
  42. data/spec/controllers/mno_enterprise/jpi/v1/admin/users_controller_spec.rb +2 -1
  43. data/spec/controllers/mno_enterprise/jpi/v1/audit_events_controller_spec.rb +49 -0
  44. data/spec/controllers/mno_enterprise/jpi/v1/current_users_controller_spec.rb +16 -0
  45. data/spec/controllers/mno_enterprise/jpi/v1/impac/kpis_controller_spec.rb +124 -89
  46. data/spec/controllers/mno_enterprise/jpi/v1/marketplace_controller_spec.rb +83 -36
  47. data/spec/controllers/mno_enterprise/jpi/v1/organizations_controller_spec.rb +18 -3
  48. data/spec/controllers/mno_enterprise/org_invites_controller_spec.rb +3 -3
  49. data/spec/controllers/mno_enterprise/provision_controller_spec.rb +2 -2
  50. data/spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb +1 -1
  51. data/spec/lib/mno_enterprise/audit_events_listener_spec.rb +11 -0
  52. data/spec/lib/mno_enterprise/intercom_events_listener_spec.rb +74 -31
  53. data/spec/routing/devise/registrations_routing_spec.rb +43 -6
  54. data/spec/routing/mno_enterprise/admin/invoices_controller_routing_spec.rb +11 -0
  55. data/spec/routing/mno_enterprise/impersonate_controller_routing_spec.rb +30 -4
  56. data/spec/routing/mno_enterprise/jpi/v1/audit_events_controller_routing_spec.rb +11 -0
  57. metadata +20 -4
@@ -53,6 +53,15 @@ module MnoEnterprise
53
53
  #===============================================
54
54
  # Specs
55
55
  #===============================================
56
+ shared_examples "an organization management action" do
57
+ context 'when Organization management is disabled' do
58
+ before { Settings.merge!(organization_management: {enabled: false}) }
59
+ after { Settings.reload! }
60
+
61
+ it { is_expected.to have_http_status(:forbidden) }
62
+ end
63
+ end
64
+
56
65
  describe 'GET #index' do
57
66
  subject { get :index }
58
67
 
@@ -97,6 +106,7 @@ module MnoEnterprise
97
106
  subject { post :create, organization: params }
98
107
 
99
108
  it_behaves_like "jpi v1 protected action"
109
+ it_behaves_like "an organization management action"
100
110
 
101
111
  context 'success' do
102
112
  before { subject }
@@ -120,6 +130,7 @@ module MnoEnterprise
120
130
  subject { put :update, id: organization.id, organization: params }
121
131
 
122
132
  it_behaves_like "jpi v1 authorizable action"
133
+ it_behaves_like "an organization management action"
123
134
 
124
135
  context 'success' do
125
136
  it 'updates the organization' do
@@ -140,6 +151,7 @@ module MnoEnterprise
140
151
  subject { delete :destroy, id: organization.id }
141
152
 
142
153
  it_behaves_like 'jpi v1 authorizable action'
154
+ it_behaves_like 'an organization management action'
143
155
 
144
156
  context 'success' do
145
157
  it 'deletes the organization' do
@@ -213,6 +225,7 @@ module MnoEnterprise
213
225
  subject { put :update_billing, id: organization.id, credit_card: params }
214
226
 
215
227
  it_behaves_like "jpi v1 protected action"
228
+ it_behaves_like "an organization management action"
216
229
 
217
230
  context 'authorized' do
218
231
  it 'updates the entity credit card' do
@@ -232,7 +245,7 @@ module MnoEnterprise
232
245
  let(:mastercard) { '5105105105105100' }
233
246
 
234
247
  context 'with a valid type' do
235
- before { params.merge!(number: visa) }
248
+ before { params[:number] = visa }
236
249
  it 'updates the entity credit card' do
237
250
  expect_any_instance_of(MnoEnterprise::CreditCard).to receive(:save).and_return(true)
238
251
  subject
@@ -247,7 +260,7 @@ module MnoEnterprise
247
260
  end
248
261
 
249
262
  context 'with an invalid type' do
250
- before { params.merge!(number: mastercard) }
263
+ before { params[:number] = mastercard }
251
264
  it 'does not the entity credit card' do
252
265
  expect_any_instance_of(MnoEnterprise::CreditCard).not_to receive(:save)
253
266
  subject
@@ -272,6 +285,7 @@ module MnoEnterprise
272
285
  subject { put :invite_members, id: organization.id, invites: params }
273
286
 
274
287
  it_behaves_like "jpi v1 authorizable action"
288
+ it_behaves_like "an organization management action"
275
289
 
276
290
  context 'succcess' do
277
291
  let(:relation) { instance_double('Her::Model::Relation') }
@@ -317,6 +331,7 @@ module MnoEnterprise
317
331
  subject { put :update_member, id: organization.id, member: params }
318
332
 
319
333
  it_behaves_like "jpi v1 authorizable action"
334
+ it_behaves_like "an organization management action"
320
335
 
321
336
  context 'with user' do
322
337
  let(:member) { build(:user) }
@@ -425,7 +440,7 @@ module MnoEnterprise
425
440
  subject { put :remove_member, id: organization.id, member: params }
426
441
 
427
442
  it_behaves_like "jpi v1 authorizable action"
428
-
443
+ it_behaves_like "an organization management action"
429
444
 
430
445
  context 'with user' do
431
446
  let(:params) { { email: user.email } }
@@ -25,9 +25,9 @@ module MnoEnterprise
25
25
  describe "GET #show" do
26
26
  subject { get :show, id: invite.id, token: token}
27
27
 
28
- let(:success_fragment) { "#?dhbRefId=#{invite.organization.id}&#{URI.encode_www_form([['flash', {msg: "You are now part of #{invite.organization.name}", type: :success}.to_json]])}" }
29
- let(:expired_fragment) { "#?#{URI.encode_www_form([['flash', {msg: "It looks like this invite has expired. Please ask your company administrator to resend the invite.", type: :error}.to_json]])}" }
30
- let(:invalid_fragment) { "#?#{URI.encode_www_form([['flash', {msg: "Unfortunately, this invite does not seem to be valid.", type: :error}.to_json]])}" }
28
+ let(:success_fragment) { "#!?dhbRefId=#{invite.organization.id}&#{URI.encode_www_form([['flash', {msg: "You are now part of #{invite.organization.name}", type: :success}.to_json]])}" }
29
+ let(:expired_fragment) { "#!?#{URI.encode_www_form([['flash', {msg: "It looks like this invite has expired. Please ask your company administrator to resend the invite.", type: :error}.to_json]])}" }
30
+ let(:invalid_fragment) { "#!?#{URI.encode_www_form([['flash', {msg: "Unfortunately, this invite does not seem to be valid.", type: :error}.to_json]])}" }
31
31
 
32
32
  context 'when not signed in' do
33
33
  it { expect(subject).not_to be_success }
@@ -57,7 +57,7 @@ module MnoEnterprise
57
57
  describe "unauthorized" do
58
58
  let(:authorized) { false }
59
59
 
60
- let(:error_fragment) { "#?#{URI.encode_www_form([['flash', {msg: "Unfortunately you do not have permission to purchase products for this organization", type: :error}.to_json]])}" }
60
+ let(:error_fragment) { "#!?#{URI.encode_www_form([['flash', {msg: "Unfortunately you do not have permission to purchase products for this organization", type: :error}.to_json]])}" }
61
61
 
62
62
  it 'redirect to the dashboard with an error message' do
63
63
  expect(response).to redirect_to(mnoe_home_path + error_fragment)
@@ -89,7 +89,7 @@ module MnoEnterprise
89
89
 
90
90
  context 'with one organization available' do
91
91
  let(:organizations) { [organization] }
92
- let(:error_fragment) { "#?#{URI.encode_www_form([['flash', {msg: "Unfortunately you do not have permission to purchase products for this organization", type: :error}.to_json]])}" }
92
+ let(:error_fragment) { "#!?#{URI.encode_www_form([['flash', {msg: "Unfortunately you do not have permission to purchase products for this organization", type: :error}.to_json]])}" }
93
93
 
94
94
  it 'redirect to the dashboard with an error message' do
95
95
  expect(response).to redirect_to(mnoe_home_path + error_fragment)
@@ -64,7 +64,7 @@ module MnoEnterprise
64
64
  context 'when there is on oauth error' do
65
65
  subject { get :callback, id: app_instance.uid, oauth: {error: :unauthorized} }
66
66
 
67
- let(:fragment) { "#?#{URI.encode_www_form([['flash', {msg: 'We could not validate your credentials, please try again', type: :error}.to_json]])}" }
67
+ let(:fragment) { "#!?#{URI.encode_www_form([['flash', {msg: 'We could not validate your credentials, please try again', type: :error}.to_json]])}" }
68
68
 
69
69
  it { subject; expect(response).to redirect_to(MnoEnterprise.router.dashboard_path + fragment) }
70
70
  end
@@ -17,12 +17,23 @@ module MnoEnterprise
17
17
  end
18
18
 
19
19
  let(:user) { build(:user) }
20
+ let(:organization) { build(:organization) }
20
21
 
21
22
  describe '#info' do
22
23
  subject { MnoEnterprise::AuditEventsListener.new.info('user_update_password', user.id, 'User password change', user.class.name, user.id, user.email) }
23
24
 
24
25
  it { expect(subject.code).to eq(200) }
25
26
  it { expect(subject.request.options[:body]).to eq(info_data(user)) }
27
+
28
+ context 'with an organization_id in the metadata' do
29
+ subject { MnoEnterprise::AuditEventsListener.new.info('user_update_password', user.id, 'User password change', user.class.name, user.id, {organization_id: 'foobar'}) }
30
+ it { expect(subject.request.options[:body][:data][:organization_id]).to eq('foobar') }
31
+ end
32
+
33
+ context 'with an Organization subject' do
34
+ subject { MnoEnterprise::AuditEventsListener.new.info('app_launch', user.id, 'App Launched', organization.class.name, organization.id, nil) }
35
+ it { expect(subject.request.options[:body][:data][:organization_id]).to eq(organization.id) }
36
+ end
26
37
  end
27
38
  end
28
39
  end
@@ -4,12 +4,15 @@ module MnoEnterprise
4
4
  RSpec.describe IntercomEventsListener do
5
5
  let(:app) { build(:app) }
6
6
  let(:app_instance) { build(:app_instance, app: app, organization_id: organization.id) }
7
- let(:user) { build(:user) }
7
+ let(:user) { build(:user).tap {|u| u.extend(MnoEnterprise::Concerns::Models::IntercomUser)} }
8
+ let(:credit_card) { build(:credit_card) }
8
9
  let(:organization) { build(:organization) }
9
10
  before do
10
11
  api_stub_for(get: "/users/#{user.id}", response: from_api(user))
11
12
  api_stub_for(get: "/users/#{user.id}/organizations", response: from_api([organization]))
12
13
  api_stub_for(get: "/organizations/#{organization.id}/app_instances", response: from_api([app_instance]))
14
+ api_stub_for(get: "/organizations/#{organization.id}/credit_card", response: from_api(credit_card))
15
+ api_stub_for(get: "/organizations/#{organization.id}/users", response: from_api([user]))
13
16
  end
14
17
 
15
18
  # Stub Intercom client
@@ -28,7 +31,13 @@ module MnoEnterprise
28
31
  email: user.email,
29
32
  created_at: user.created_at.to_i,
30
33
  last_seen_ip: user.last_sign_in_ip,
31
- custom_attributes: {phone: user.phone},
34
+ custom_attributes: {
35
+ first_name: user.name,
36
+ surname: user.surname,
37
+ confirmed_at: user.confirmed_at,
38
+ phone: user.phone,
39
+ admin_role: user.admin_role
40
+ },
32
41
  update_last_request_at: true,
33
42
  companies:[
34
43
  {
@@ -38,9 +47,11 @@ module MnoEnterprise
38
47
  custom_attributes: {
39
48
  industry: organization.industry,
40
49
  size: organization.size,
41
- credit_card_details: organization.credit_card?,
50
+ credit_card_details: organization.has_credit_card_details?,
51
+ credit_card_expiry: organization.credit_card.expiry_date,
42
52
  app_count: organization.app_instances.count,
43
- app_list: organization.app_instances.map { |app| app.name }.to_sentence
53
+ app_list: organization.app_instances.map { |app| app.name }.to_sentence,
54
+ user_count: 1
44
55
  }
45
56
  }
46
57
  ]
@@ -48,36 +59,27 @@ module MnoEnterprise
48
59
  }
49
60
 
50
61
  describe '#info' do
51
- context 'when the user already exist in intercom' do
52
- before { allow(users).to receive(:find) }
53
- subject { described_class.new }
54
-
55
- it 'add an event when an password is changed' do
56
- expect(events).to receive(:create).with(hash_including(email: user.email, user_id: user.id, event_name: 'user-update-password'))
57
- subject.info('user_update_password', user.id, 'User password change', user.class.name, user.id, user.email)
58
- end
62
+ before do
63
+ allow(MnoEnterprise::User).to receive(:find).and_return(user)
64
+ # It refreshes the user
65
+ expect(users).to receive(:create).with(expected_user_data)
66
+ end
59
67
 
60
- it 'add an event when an app is added' do
61
- expect(events).to receive(:create).with(hash_including(email: user.email, user_id: user.id, event_name: 'added-app-' + app.nid, metadata: {type: 'single', app_list: app.nid}))
62
- subject.info('app_add', user.id, 'App Added', app_instance.class.name, app_instance.id, {name: app_instance.name, app_nid: app_instance.app.nid} )
63
- end
68
+ subject { described_class.new }
64
69
 
65
- it 'add an event when an app is launched' do
66
- expect(events).to receive(:create).with(hash_including(email: user.email, user_id: user.id, event_name: 'launched-app-' + app.nid))
67
- subject.info('app_launch', user.id, 'App Launched', app_instance.class.name, app_instance.id, {name: app_instance.name, app_nid: app_instance.app.nid} )
68
- end
70
+ it 'add an event when a password is changed' do
71
+ expect(events).to receive(:create).with(hash_including(email: user.email, user_id: user.id, event_name: 'user-update-password'))
72
+ subject.info('user_update_password', user.id, 'User password change', user.class.name, user.id, user.email)
73
+ end
69
74
 
75
+ it 'add an event when an app is added' do
76
+ expect(events).to receive(:create).with(hash_including(email: user.email, user_id: user.id, event_name: 'added-app-' + app.nid, metadata: {type: 'single', app_list: app.nid}))
77
+ subject.info('app_add', user.id, 'App Added', app_instance.class.name, app_instance.id, {name: app_instance.name, app_nid: app_instance.app.nid} )
70
78
  end
71
- context 'when the user does not exist in intercom' do
72
- before do
73
- allow(users).to receive(:find).and_raise(Intercom::ResourceNotFound.new('not found'))
74
- expect(users).to receive(:create).with(expected_user_data)
75
- end
76
79
 
77
- it 'add an event when an password is changed' do
78
- expect(events).to receive(:create).with(hash_including(email: user.email, event_name: 'user-update-password'))
79
- subject.info('user_update_password', user.id, 'User password change', user.class.name, user.id, user.email)
80
- end
80
+ it 'add an event when an app is launched' do
81
+ expect(events).to receive(:create).with(hash_including(email: user.email, user_id: user.id, event_name: 'launched-app-' + app.nid))
82
+ subject.info('app_launch', user.id, 'App Launched', app_instance.class.name, app_instance.id, {name: app_instance.name, app_nid: app_instance.app.nid} )
81
83
  end
82
84
  end
83
85
 
@@ -91,9 +93,11 @@ module MnoEnterprise
91
93
  end
92
94
 
93
95
  context 'when the user has an external_id' do
94
- before { user.external_id = '132456' }
96
+ before { user.external_id = '123456' }
95
97
  it 'updates the user' do
96
- expect(users).to receive(:create).with(hash_including(custom_attributes: { phone: user.phone, external_id: '132456' }))
98
+ expect(users).to receive(:create) do |options|
99
+ expect(options[:custom_attributes][:external_id]).to eq('123456')
100
+ end
97
101
  subject
98
102
  end
99
103
  end
@@ -106,5 +110,44 @@ module MnoEnterprise
106
110
  end
107
111
  end
108
112
  end
113
+
114
+ # TODO: a bit redundant with the full hash above
115
+ # To be refactored when extracting to a service
116
+ describe '#format_company' do
117
+ let(:organization) do
118
+ MnoEnterprise::Organization.new(attributes_for(:organization)).tap do |o|
119
+ o.credit_card = credit_card
120
+ o.app_instances = [build(:app_instance, name: 'Xero'), build(:app_instance, name: 'Shopify')]
121
+ o.users = [build(:user)]
122
+ end
123
+ end
124
+
125
+ let(:intercom_data) { subject.format_company(organization) }
126
+ let(:custom_attributes) { intercom_data[:custom_attributes] }
127
+
128
+ it { expect(intercom_data[:company_id]).to eq(organization.id) }
129
+ it { expect(intercom_data[:created_at]).to eq(organization.created_at.to_i) }
130
+ it { expect(intercom_data[:name]).to eq(organization.name) }
131
+
132
+ it { expect(custom_attributes[:app_count]).to eq(2) }
133
+ it { expect(custom_attributes[:app_list]).to eq("Shopify and Xero") }
134
+ it { expect(custom_attributes[:user_count]).to eq(1) }
135
+
136
+ context 'with a credit card' do
137
+ it 'does not return CC data' do
138
+ expect(custom_attributes[:credit_card_details]).to be true
139
+ expect(custom_attributes[:credit_card_expiry]).to be_a Date
140
+ end
141
+ end
142
+
143
+ context 'without a credit card' do
144
+ let(:credit_card) { MnoEnterprise::CreditCard.new }
145
+
146
+ it 'does not return CC data' do
147
+ expect(custom_attributes[:credit_card_details]).to be false
148
+ expect(custom_attributes[:credit_card_expiry]).to be nil
149
+ end
150
+ end
151
+ end
109
152
  end
110
153
  end
@@ -3,13 +3,50 @@ require 'rails_helper'
3
3
  module MnoEnterprise
4
4
  RSpec.describe Devise::RegistrationsController, type: :routing do
5
5
  routes { MnoEnterprise::Engine.routes }
6
-
7
- it 'routes to #new' do
8
- expect(get('/auth/users/sign_up')).to route_to("mno_enterprise/auth/registrations#new")
6
+
7
+ context 'it is enabled by default' do
8
+ before(:all) do
9
+ Settings.devise = {}
10
+ Rails.application.reload_routes!
11
+ end
12
+
13
+ it 'routes to #new' do
14
+ expect(get('/auth/users/sign_up')).to route_to("mno_enterprise/auth/registrations#new")
15
+ end
16
+
17
+ it 'routes to #create' do
18
+ expect(post('/auth/users')).to route_to("mno_enterprise/auth/registrations#create")
19
+ end
20
+ end
21
+
22
+ context 'when registration is enabled' do
23
+ before(:all) do
24
+ Settings.merge!(devise: {registration: {disabled: false}})
25
+ Rails.application.reload_routes!
26
+ end
27
+
28
+ it 'routes to #new' do
29
+ expect(get('/auth/users/sign_up')).to route_to("mno_enterprise/auth/registrations#new")
30
+ end
31
+
32
+ it 'routes to #create' do
33
+ expect(post('/auth/users')).to route_to("mno_enterprise/auth/registrations#create")
34
+ end
9
35
  end
10
-
11
- it 'routes to #create' do
12
- expect(post('/auth/users')).to route_to("mno_enterprise/auth/registrations#create")
36
+
37
+ context 'when registration is disabled' do
38
+ before(:all) do
39
+ Settings.merge!(devise: {registration: {disabled: true}})
40
+ Rails.application.reload_routes!
41
+ end
42
+
43
+ it 'does not route to #new' do
44
+ expect(get('/auth/users/sign_up')).not_to be_routable
45
+ end
46
+
47
+ it 'does not route to #create' do
48
+ expect(post('/auth/users')).not_to be_routable
49
+ end
13
50
  end
14
51
  end
15
52
  end
@@ -0,0 +1,11 @@
1
+ require "rails_helper"
2
+
3
+ module MnoEnterprise
4
+ RSpec.describe Admin::InvoicesController, type: :routing do
5
+ routes { MnoEnterprise::Engine.routes }
6
+
7
+ it "routes to #show" do
8
+ expect(get("/admin/invoices/201504-NU4")).to route_to("mno_enterprise/admin/invoices#show", id: '201504-NU4')
9
+ end
10
+ end
11
+ end
@@ -4,12 +4,38 @@ module MnoEnterprise
4
4
  RSpec.describe ImpersonateController, type: :routing do
5
5
  routes { MnoEnterprise::Engine.routes }
6
6
 
7
- it "routes to #create" do
8
- expect(get("/impersonate/user/1")).to route_to("mno_enterprise/impersonate#create", user_id: '1')
7
+ context "Impersonation is enabled" do
8
+ before(:all) do
9
+ Settings.merge!(admin_panel: {impersonation: {disabled: false}})
10
+ Rails.application.reload_routes!
11
+ end
12
+
13
+ it "routes to #create" do
14
+ expect(get("/impersonate/user/1")).to route_to("mno_enterprise/impersonate#create", user_id: '1')
15
+ end
16
+
17
+ it "routes to #destroy" do
18
+ expect(get("/impersonate/revert")).to route_to("mno_enterprise/impersonate#destroy")
19
+ end
9
20
  end
10
21
 
11
- it "routes to #destroy" do
12
- expect(get("/impersonate/revert")).to route_to("mno_enterprise/impersonate#destroy")
22
+ context "Impersonation is disabled" do
23
+ before(:all) do
24
+ Settings.merge!(admin_panel: {impersonation: {disabled: true}})
25
+ Rails.application.reload_routes!
26
+ end
27
+
28
+ it 'loads regular routes' do
29
+ expect(get('/ping')).to route_to('mno_enterprise/status#ping')
30
+ end
31
+
32
+ it "does not route to #create" do
33
+ expect(get("/impersonate/user/1")).not_to be_routable
34
+ end
35
+
36
+ it "does not route to #destroy" do
37
+ expect(get("/impersonate/revert")).not_to be_routable
38
+ end
13
39
  end
14
40
  end
15
41
  end
@@ -0,0 +1,11 @@
1
+ require 'rails_helper'
2
+
3
+ module MnoEnterprise
4
+ RSpec.describe Jpi::V1::AuditEventsController, type: :routing do
5
+ routes { MnoEnterprise::Engine.routes }
6
+
7
+ it 'routes to #index' do
8
+ expect(get('/jpi/v1/organizations/1/audit_events')).to route_to('mno_enterprise/jpi/v1/audit_events#index', organization_id: '1')
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.2.1
4
+ version: 3.3.0
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-11-09 00:00:00.000000000 Z
12
+ date: 2017-06-20 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.2.1
20
+ version: 3.3.0
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.2.1
27
+ version: 3.3.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: jbuilder
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +206,7 @@ files:
206
206
  - app/assets/javascripts/mno_enterprise/application.js
207
207
  - app/assets/javascripts/mno_enterprise/config.js.coffee.erb
208
208
  - app/controllers/devise/password_expired_controller.rb
209
+ - app/controllers/mno_enterprise/admin/invoices_controller.rb
209
210
  - app/controllers/mno_enterprise/auth/confirmations_controller.rb
210
211
  - app/controllers/mno_enterprise/auth/omniauth_callbacks_controller.rb
211
212
  - app/controllers/mno_enterprise/auth/passwords_controller.rb
@@ -234,6 +235,7 @@ files:
234
235
  - app/controllers/mno_enterprise/jpi/v1/app_instances_sync_controller.rb
235
236
  - app/controllers/mno_enterprise/jpi/v1/app_questions_controller.rb
236
237
  - app/controllers/mno_enterprise/jpi/v1/app_reviews_controller.rb
238
+ - app/controllers/mno_enterprise/jpi/v1/audit_events_controller.rb
237
239
  - app/controllers/mno_enterprise/jpi/v1/base_resource_controller.rb
238
240
  - app/controllers/mno_enterprise/jpi/v1/current_users_controller.rb
239
241
  - app/controllers/mno_enterprise/jpi/v1/deletion_requests_controller.rb
@@ -248,6 +250,7 @@ files:
248
250
  - app/controllers/mno_enterprise/pages_controller.rb
249
251
  - app/controllers/mno_enterprise/provision_controller.rb
250
252
  - app/controllers/mno_enterprise/status_controller.rb
253
+ - app/controllers/mno_enterprise/webhook/events_controller.rb
251
254
  - app/controllers/mno_enterprise/webhook/o_auth_controller.rb
252
255
  - app/jobs/mno_enterprise/event_logger_job.rb
253
256
  - app/mailers/mno_enterprise/system_notification_mailer.rb
@@ -277,6 +280,7 @@ files:
277
280
  - app/views/mno_enterprise/jpi/v1/admin/app_reviews/index.json.jbuilder
278
281
  - app/views/mno_enterprise/jpi/v1/admin/app_reviews/show.json.jbuilder
279
282
  - app/views/mno_enterprise/jpi/v1/admin/audit_events/_audit_event.json.jbuilder
283
+ - app/views/mno_enterprise/jpi/v1/admin/audit_events/index.csv.erb
280
284
  - app/views/mno_enterprise/jpi/v1/admin/audit_events/index.json.jbuilder
281
285
  - app/views/mno_enterprise/jpi/v1/admin/base_resource/_member.json.jbuilder
282
286
  - app/views/mno_enterprise/jpi/v1/admin/cloud_apps/_cloud_app.json.jbuilder
@@ -318,6 +322,9 @@ files:
318
322
  - app/views/mno_enterprise/jpi/v1/app_reviews/_resource.json.jbuilder
319
323
  - app/views/mno_enterprise/jpi/v1/app_reviews/index.json.jbuilder
320
324
  - app/views/mno_enterprise/jpi/v1/app_reviews/show.json.jbuilder
325
+ - app/views/mno_enterprise/jpi/v1/audit_events/_audit_event.json.jbuilder
326
+ - app/views/mno_enterprise/jpi/v1/audit_events/index.csv.erb
327
+ - app/views/mno_enterprise/jpi/v1/audit_events/index.json.jbuilder
321
328
  - app/views/mno_enterprise/jpi/v1/base_resource/_app_review.json.jbuilder
322
329
  - app/views/mno_enterprise/jpi/v1/billing/index.json.jbuilder
323
330
  - app/views/mno_enterprise/jpi/v1/current_users/show.json.jbuilder
@@ -390,11 +397,13 @@ files:
390
397
  - lib/mno_enterprise/concerns/controllers/org_invites_controller.rb
391
398
  - lib/mno_enterprise/concerns/controllers/pages_controller.rb
392
399
  - lib/mno_enterprise/concerns/controllers/provision_controller.rb
400
+ - lib/mno_enterprise/concerns/controllers/webhook/events_controller.rb
393
401
  - lib/mno_enterprise/concerns/controllers/webhook/o_auth_controller.rb
394
402
  - lib/mno_enterprise/concerns/mailers/system_notification_mailer.rb
395
403
  - lib/mno_enterprise/event_logger.rb
396
404
  - lib/mno_enterprise/intercom_events_listener.rb
397
405
  - lib/tasks/non_digested_assets.rake
406
+ - spec/controllers/mno_enterprise/admin/invoices_controller_spec.rb
398
407
  - spec/controllers/mno_enterprise/auth/confirmation_controller_spec.rb
399
408
  - spec/controllers/mno_enterprise/auth/omniauth_callback_controller_spec.rb
400
409
  - spec/controllers/mno_enterprise/deletion_requests_controller_spec.rb
@@ -417,6 +426,7 @@ files:
417
426
  - spec/controllers/mno_enterprise/jpi/v1/app_instances_sync_controller_spec.rb
418
427
  - spec/controllers/mno_enterprise/jpi/v1/app_questions_controller_spec.rb
419
428
  - spec/controllers/mno_enterprise/jpi/v1/app_reviews_controller_spec.rb
429
+ - spec/controllers/mno_enterprise/jpi/v1/audit_events_controller_spec.rb
420
430
  - spec/controllers/mno_enterprise/jpi/v1/current_users_controller_spec.rb
421
431
  - spec/controllers/mno_enterprise/jpi/v1/deletion_requests_controller_spec.rb
422
432
  - spec/controllers/mno_enterprise/jpi/v1/impac/alerts_controller_spec.rb
@@ -441,6 +451,7 @@ files:
441
451
  - spec/routing/devise/passwords_routing_spec.rb
442
452
  - spec/routing/devise/registrations_routing_spec.rb
443
453
  - spec/routing/devise/sessions_routing_spec.rb
454
+ - spec/routing/mno_enterprise/admin/invoices_controller_routing_spec.rb
444
455
  - spec/routing/mno_enterprise/deletion_requests_controller_routing_spec.rb
445
456
  - spec/routing/mno_enterprise/impersonate_controller_routing_spec.rb
446
457
  - spec/routing/mno_enterprise/jpi/v1/admin/app_instances_controller_routing_spec.rb
@@ -456,6 +467,7 @@ files:
456
467
  - spec/routing/mno_enterprise/jpi/v1/app_instances_controller_routing_spec.rb
457
468
  - spec/routing/mno_enterprise/jpi/v1/app_instances_sync_controller_routing_spec.rb
458
469
  - spec/routing/mno_enterprise/jpi/v1/app_reviews_controller_routing_spec.rb
470
+ - spec/routing/mno_enterprise/jpi/v1/audit_events_controller_routing_spec.rb
459
471
  - spec/routing/mno_enterprise/jpi/v1/current_users_controller_routing_spec.rb
460
472
  - spec/routing/mno_enterprise/jpi/v1/deletion_requests_controller_routing_spec.rb
461
473
  - spec/routing/mno_enterprise/jpi/v1/impac/alerts_controller_routing_spec.rb
@@ -496,6 +508,7 @@ signing_key:
496
508
  specification_version: 4
497
509
  summary: Maestrano Enterprise - API
498
510
  test_files:
511
+ - spec/routing/mno_enterprise/admin/invoices_controller_routing_spec.rb
499
512
  - spec/routing/mno_enterprise/impersonate_controller_routing_spec.rb
500
513
  - spec/routing/mno_enterprise/deletion_requests_controller_routing_spec.rb
501
514
  - spec/routing/mno_enterprise/provision_controller_routing_spec.rb
@@ -518,6 +531,7 @@ test_files:
518
531
  - spec/routing/mno_enterprise/jpi/v1/organizations_controller_routing_spec.rb
519
532
  - spec/routing/mno_enterprise/jpi/v1/app_instances_sync_controller_routing_spec.rb
520
533
  - spec/routing/mno_enterprise/jpi/v1/app_instances_controller_routing_spec.rb
534
+ - spec/routing/mno_enterprise/jpi/v1/audit_events_controller_routing_spec.rb
521
535
  - spec/routing/mno_enterprise/jpi/v1/impac/widgets_controller_routing_spec.rb
522
536
  - spec/routing/mno_enterprise/jpi/v1/impac/kpis_controller_routing_spec.rb
523
537
  - spec/routing/mno_enterprise/jpi/v1/impac/alerts_controller_routing_spec.rb
@@ -536,6 +550,7 @@ test_files:
536
550
  - spec/lib/mno_enterprise/audit_events_listener_spec.rb
537
551
  - spec/lib/mno_enterprise/intercom_events_listener_spec.rb
538
552
  - spec/rails_helper.rb
553
+ - spec/controllers/mno_enterprise/admin/invoices_controller_spec.rb
539
554
  - spec/controllers/mno_enterprise/pages_controller_spec.rb
540
555
  - spec/controllers/mno_enterprise/deletion_requests_controller_spec.rb
541
556
  - spec/controllers/mno_enterprise/impersonate_controller_spec.rb
@@ -557,6 +572,7 @@ test_files:
557
572
  - spec/controllers/mno_enterprise/jpi/v1/admin/app_comments_controller_spec.rb
558
573
  - spec/controllers/mno_enterprise/jpi/v1/app_questions_controller_spec.rb
559
574
  - spec/controllers/mno_enterprise/jpi/v1/current_users_controller_spec.rb
575
+ - spec/controllers/mno_enterprise/jpi/v1/audit_events_controller_spec.rb
560
576
  - spec/controllers/mno_enterprise/jpi/v1/deletion_requests_controller_spec.rb
561
577
  - spec/controllers/mno_enterprise/jpi/v1/organizations_controller_spec.rb
562
578
  - spec/controllers/mno_enterprise/jpi/v1/app_feedbacks_controller_spec.rb