mno-enterprise-api 3.0.7 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/mno_enterprise/config.js.coffee.erb +2 -0
- data/app/controllers/mno_enterprise/impersonate_controller.rb +1 -2
- data/app/controllers/mno_enterprise/jpi/v1/admin/audit_events_controller.rb +2 -2
- data/app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb +50 -0
- data/app/controllers/mno_enterprise/jpi/v1/admin/invoices_controller.rb +13 -27
- data/app/controllers/mno_enterprise/jpi/v1/admin/organizations_controller.rb +82 -1
- data/app/controllers/mno_enterprise/jpi/v1/admin/users_controller.rb +9 -1
- data/app/controllers/mno_enterprise/jpi/v1/app_instances_sync_controller.rb +2 -2
- data/app/controllers/mno_enterprise/jpi/v1/marketplace_controller.rb +1 -1
- data/app/controllers/mno_enterprise/status_controller.rb +2 -4
- data/app/views/mno_enterprise/auth/confirmations/_form.html.haml +2 -2
- data/app/views/mno_enterprise/auth/registrations/_form.html.haml +1 -1
- data/app/views/mno_enterprise/auth/unlocks/new.html.haml +11 -11
- data/app/views/mno_enterprise/jpi/v1/admin/base_resource/_member.json.jbuilder +28 -0
- data/app/views/mno_enterprise/jpi/v1/admin/organizations/invite_member.json.jbuilder +3 -0
- data/app/views/mno_enterprise/jpi/v1/admin/organizations/show.json.jbuilder +2 -2
- data/app/views/mno_enterprise/jpi/v1/admin/users/_user.json.jbuilder +1 -1
- data/app/views/mno_enterprise/jpi/v1/admin/users/show.json.jbuilder +2 -1
- data/app/views/mno_enterprise/jpi/v1/current_users/show.json.jbuilder +1 -0
- data/app/views/mno_enterprise/jpi/v1/impac/kpis/_kpi.json.jbuilder +1 -1
- data/app/views/mno_enterprise/jpi/v1/marketplace/_app.json.jbuilder +1 -1
- data/app/views/mno_enterprise/jpi/v1/organizations/_credit_card.json.jbuilder +2 -2
- data/config/initializers/health_check.rb +5 -3
- data/config/routes.rb +8 -1
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/organizations_controller.rb +0 -1
- data/lib/mno_enterprise/concerns/mailers/system_notification_mailer.rb +19 -5
- data/spec/controllers/mno_enterprise/impersonate_controller_spec.rb +4 -14
- data/spec/controllers/mno_enterprise/jpi/v1/admin/invites_controller_spec.rb +63 -0
- data/spec/controllers/mno_enterprise/jpi/v1/admin/invoices_controller_spec.rb +4 -14
- data/spec/controllers/mno_enterprise/jpi/v1/admin/organizations_controller_spec.rb +65 -0
- data/spec/controllers/mno_enterprise/jpi/v1/admin/users_controller_spec.rb +16 -16
- data/spec/controllers/mno_enterprise/jpi/v1/app_instances_sync_controller_spec.rb +14 -22
- data/spec/controllers/mno_enterprise/jpi/v1/current_users_controller_spec.rb +4 -1
- data/spec/controllers/mno_enterprise/jpi/v1/impac/kpis_controller_spec.rb +2 -2
- data/spec/controllers/mno_enterprise/jpi/v1/marketplace_controller_spec.rb +43 -2
- data/spec/controllers/mno_enterprise/pages_controller_spec.rb +0 -4
- data/spec/controllers/mno_enterprise/status_controller_spec.rb +0 -4
- data/spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb +1 -5
- data/spec/mailer/mno_enterprise/system_notification_mailer_spec.rb +23 -11
- data/spec/routing/mno_enterprise/jpi/v1/admin/invites_controller_routing_spec.rb +11 -0
- data/spec/routing/mno_enterprise/jpi/v1/admin/organizations_controller_routing_spec.rb +8 -0
- data/spec/routing/mno_enterprise/jpi/v1/admin/users_controller_routing_spec.rb +4 -0
- metadata +13 -8
- data/app/views/mno_enterprise/auth/unlocks/_form.html.haml +0 -10
- data/app/views/mno_enterprise/jpi/v1/admin/organizations/_member.json.jbuilder +0 -14
@@ -1 +1 @@
|
|
1
|
-
json.extract! kpi, :id, :element_watched, :endpoint, :source, :targets, :settings, :extra_params
|
1
|
+
json.extract! kpi, :id, :name, :element_watched, :endpoint, :source, :targets, :settings, :extra_params
|
@@ -2,6 +2,6 @@ json.credit_card do
|
|
2
2
|
if credit_card
|
3
3
|
json.extract! credit_card, :id, :title,:first_name,:last_name,:month,:year,:country,:billing_address,:billing_city,:billing_postcode, :billing_country
|
4
4
|
json.number credit_card.masked_number
|
5
|
-
json.verification_value
|
5
|
+
json.verification_value 'CVV'
|
6
6
|
end
|
7
|
-
end
|
7
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
|
-
HealthCheck::Engine.
|
1
|
+
HealthCheck::Engine.routes_manually_defined = true
|
2
2
|
|
3
3
|
HealthCheck.setup do |config|
|
4
|
+
|
4
5
|
# Text output upon success
|
5
6
|
config.success = 'success'
|
6
7
|
|
@@ -20,14 +21,15 @@ HealthCheck.setup do |config|
|
|
20
21
|
config.http_status_for_error_object = 500
|
21
22
|
|
22
23
|
# You can customize which checks happen on a standard health check
|
23
|
-
config.standard_checks =
|
24
|
+
config.standard_checks = [ 'database', 'migrations', 'custom' ]
|
24
25
|
|
25
26
|
# You can set what tests are run with the 'full' or 'all' parameter
|
26
|
-
config.full_checks =
|
27
|
+
config.full_checks = ['database', 'migrations', 'cache', 'custom']
|
27
28
|
|
28
29
|
# Add one or more custom checks that return a blank string if ok, or an error message if there is an error
|
29
30
|
config.add_custom_check do
|
30
31
|
# any code that returns blank on success and non blank string upon failure
|
31
32
|
MnoEnterprise::HealthCheck.perform_mno_hub_check
|
32
33
|
end
|
34
|
+
|
33
35
|
end
|
data/config/routes.rb
CHANGED
@@ -127,13 +127,20 @@ MnoEnterprise::Engine.routes.draw do
|
|
127
127
|
resources :users, only: [:index, :show, :destroy, :update, :create] do
|
128
128
|
collection do
|
129
129
|
get :count
|
130
|
+
post :signup_email
|
130
131
|
end
|
131
132
|
end
|
132
|
-
resources :organizations, only: [:index, :show] do
|
133
|
+
resources :organizations, only: [:index, :show, :create] do
|
133
134
|
collection do
|
134
135
|
get :in_arrears
|
135
136
|
get :count
|
136
137
|
end
|
138
|
+
member do
|
139
|
+
post :users, action: :invite_member
|
140
|
+
end
|
141
|
+
resources :users, only: [] do
|
142
|
+
resource :invites, only: [:create]
|
143
|
+
end
|
137
144
|
end
|
138
145
|
resources :tenant_invoices, only: [:index, :show]
|
139
146
|
resources :invoices, only: [:index, :show] do
|
@@ -33,7 +33,7 @@ module MnoEnterprise::Concerns::Mailers::SystemNotificationMailer
|
|
33
33
|
#
|
34
34
|
def confirmation_instructions(record, token, opts={})
|
35
35
|
template = record.confirmed? && record.unconfirmed_email? ? 'reconfirmation-instructions' : 'confirmation-instructions'
|
36
|
-
|
36
|
+
MnoEnterprise::MailClient.deliver(template,
|
37
37
|
default_sender,
|
38
38
|
recipient(record),
|
39
39
|
user_vars(record).merge(confirmation_link: user_confirmation_url(confirmation_token: token))
|
@@ -51,7 +51,7 @@ module MnoEnterprise::Concerns::Mailers::SystemNotificationMailer
|
|
51
51
|
# :reset_password_link
|
52
52
|
#
|
53
53
|
def reset_password_instructions(record, token, opts={})
|
54
|
-
|
54
|
+
MnoEnterprise::MailClient.deliver('reset-password-instructions',
|
55
55
|
default_sender,
|
56
56
|
recipient(record),
|
57
57
|
user_vars(record).merge(reset_password_link: edit_user_password_url(reset_password_token: token))
|
@@ -69,7 +69,7 @@ module MnoEnterprise::Concerns::Mailers::SystemNotificationMailer
|
|
69
69
|
# :unlock_link
|
70
70
|
#
|
71
71
|
def unlock_instructions(record, token, opts={})
|
72
|
-
|
72
|
+
MnoEnterprise::MailClient.deliver('unlock-instructions',
|
73
73
|
default_sender,
|
74
74
|
recipient(record),
|
75
75
|
user_vars(record).merge(unlock_link: user_unlock_url(unlock_token: token))
|
@@ -101,7 +101,7 @@ module MnoEnterprise::Concerns::Mailers::SystemNotificationMailer
|
|
101
101
|
confirmation_link = new_user ? user_confirmation_url(confirmation_token: org_invite.user.confirmation_token) : org_invite_url(org_invite, token: org_invite.token)
|
102
102
|
email_template = new_user ? 'organization-invite-new-user' : 'organization-invite-existing-user'
|
103
103
|
|
104
|
-
|
104
|
+
MnoEnterprise::MailClient.deliver(email_template,
|
105
105
|
default_sender,
|
106
106
|
recipient(org_invite.user,new_user),
|
107
107
|
invite_vars(org_invite,new_user).merge(confirmation_link: confirmation_link)
|
@@ -118,13 +118,27 @@ module MnoEnterprise::Concerns::Mailers::SystemNotificationMailer
|
|
118
118
|
# :full_name
|
119
119
|
# :terminate_account_link
|
120
120
|
def deletion_request_instructions(record, deletion_request)
|
121
|
-
|
121
|
+
MnoEnterprise::MailClient.deliver('deletion-request-instructions',
|
122
122
|
default_sender,
|
123
123
|
recipient(record),
|
124
124
|
user_vars(record).merge(terminate_account_link: deletion_request_url(deletion_request))
|
125
125
|
)
|
126
126
|
end
|
127
127
|
|
128
|
+
# Description:
|
129
|
+
# Email providing registration instructions
|
130
|
+
#
|
131
|
+
# Variables:
|
132
|
+
# :registration_link
|
133
|
+
def registration_instructions(email)
|
134
|
+
MnoEnterprise::MailClient.deliver(
|
135
|
+
'registration-instructions',
|
136
|
+
default_sender,
|
137
|
+
{email: email},
|
138
|
+
{registration_link: new_user_registration_url}
|
139
|
+
)
|
140
|
+
end
|
141
|
+
|
128
142
|
protected
|
129
143
|
|
130
144
|
def recipient(record, new_user = false)
|
@@ -30,23 +30,13 @@ module MnoEnterprise
|
|
30
30
|
|
31
31
|
describe "#destroy" do
|
32
32
|
subject { get :destroy }
|
33
|
+
before { get :create, user_id: user2.id }
|
33
34
|
|
34
|
-
|
35
|
-
before { get :create, user_id: user2.id }
|
35
|
+
it { expect(controller.current_user.id).to eq(user2.id) }
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
it { subject; expect(controller.current_user.id).to eq(user.id) }
|
40
|
-
|
41
|
-
it { is_expected.to redirect_to('/admin/') }
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'with a redirect_path' do
|
45
|
-
before { get :create, user_id: user2.id, redirect_path: '/admin/redirect#path' }
|
46
|
-
|
47
|
-
it { is_expected.to redirect_to('/admin/redirect#path') }
|
48
|
-
end
|
37
|
+
it { subject; expect(controller.current_user.id).to eq(user.id) }
|
49
38
|
end
|
50
39
|
end
|
51
40
|
end
|
41
|
+
|
52
42
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
module MnoEnterprise
|
4
|
+
RSpec.describe Jpi::V1::Admin::InvitesController do
|
5
|
+
routes { MnoEnterprise::Engine.routes }
|
6
|
+
before { request.env['HTTP_ACCEPT'] = 'application/json' }
|
7
|
+
|
8
|
+
#===============================================
|
9
|
+
# Assignments
|
10
|
+
#===============================================
|
11
|
+
# Stub user and user call
|
12
|
+
let(:user) { build(:user, admin_role: 'admin') }
|
13
|
+
before do
|
14
|
+
api_stub_for(get: "/users/#{user.id}", response: from_api(user))
|
15
|
+
sign_in user
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:organization) { FactoryGirl.build(:organization) }
|
19
|
+
let(:invitee) { FactoryGirl.build(:user) }
|
20
|
+
let(:invite) { FactoryGirl.build(:org_invite, user: invitee, organization: organization, status: 'staged') }
|
21
|
+
|
22
|
+
# Stub ActionMailer
|
23
|
+
let(:message_delivery) { instance_double(ActionMailer::MessageDelivery) }
|
24
|
+
before { allow(message_delivery).to receive(:deliver_later).with(no_args) }
|
25
|
+
|
26
|
+
# API stubs
|
27
|
+
before do
|
28
|
+
api_stub_for(get: "/organizations/#{organization.id}", response: from_api(organization))
|
29
|
+
api_stub_for(get: "/organizations/#{organization.id}/org_invites?filter[status.in][]=pending&filter[status.in][]=staged&filter[user_id]=#{invitee.id}", response: from_api([invite]))
|
30
|
+
|
31
|
+
allow(MnoEnterprise::User).to receive(:find) do |user_id|
|
32
|
+
case user_id.to_i
|
33
|
+
when user.id then user
|
34
|
+
when invitee.id then invitee
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
api_stub_for(put: "/org_invites/#{invite.id}", response: from_api(invite))
|
39
|
+
end
|
40
|
+
|
41
|
+
# unconfirmed
|
42
|
+
describe 'POST #create' do
|
43
|
+
subject { post :create, user_id: invitee.id, organization_id: organization.id }
|
44
|
+
|
45
|
+
context 'existing user' do
|
46
|
+
it 'sends the invitation email' do
|
47
|
+
expect(SystemNotificationMailer).to receive(:organization_invite).with(invite).and_return(message_delivery)
|
48
|
+
subject
|
49
|
+
expect(response).to be_success
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'new user' do
|
54
|
+
before { invitee.confirmed_at = nil }
|
55
|
+
|
56
|
+
it 'sends the confirmation instructions' do
|
57
|
+
expect(invitee).to receive(:resend_confirmation_instructions)
|
58
|
+
subject
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -39,13 +39,16 @@ module MnoEnterprise
|
|
39
39
|
# Stub invoice and invoice call
|
40
40
|
let(:invoice) { build(:invoice) }
|
41
41
|
let(:user) { build(:user, :admin) }
|
42
|
-
let(:tenant) { build(:tenant
|
42
|
+
let(:tenant) { build(:tenant) }
|
43
|
+
let(:org1) { build(:organization, current_billing: Money.new(10_000,'AUD')) }
|
44
|
+
let(:org2) { build(:organization, current_billing: Money.new(1000,'AUD')) }
|
43
45
|
|
44
46
|
before do
|
45
47
|
api_stub_for(get: "/invoices", response: from_api([invoice]))
|
46
48
|
api_stub_for(get: "/invoices/#{invoice.id}", response: from_api(invoice))
|
47
49
|
api_stub_for(get: "/users", response: from_api([user]))
|
48
50
|
api_stub_for(get: "/users/#{user.id}", response: from_api(user))
|
51
|
+
api_stub_for(get: "/organizations", response: from_api([org1, org2]))
|
49
52
|
api_stub_for(get: "/tenant", response: from_api(tenant))
|
50
53
|
sign_in user
|
51
54
|
end
|
@@ -82,19 +85,6 @@ module MnoEnterprise
|
|
82
85
|
describe 'GET #current_billing_amount' do
|
83
86
|
subject { get :current_billing_amount }
|
84
87
|
|
85
|
-
context 'with an old MnoHub' do
|
86
|
-
let(:tenant) { build(:old_tenant) }
|
87
|
-
|
88
|
-
before { subject }
|
89
|
-
|
90
|
-
it { expect(response).to be_success }
|
91
|
-
|
92
|
-
it 'returns the sum of the current_billing' do
|
93
|
-
expected = {'current_billing_amount' => {"amount"=>"N/A", "currency"=>""}}
|
94
|
-
expect(response.body).to eq(expected.to_json)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
88
|
context 'success' do
|
99
89
|
before { subject }
|
100
90
|
|
@@ -52,6 +52,7 @@ module MnoEnterprise
|
|
52
52
|
api_stub_for(get: "/organizations/#{organization.id}/app_instances", response: from_api([app_instance]))
|
53
53
|
api_stub_for(get: "/organizations/#{organization.id}/credit_card", response: from_api([credit_card]))
|
54
54
|
api_stub_for(get: "/arrears_situations", response: from_api([arrears]))
|
55
|
+
api_stub_for(post: "/organizations", response: from_api([organization]))
|
55
56
|
end
|
56
57
|
|
57
58
|
let(:expected_hash_for_organizations) {
|
@@ -112,5 +113,69 @@ module MnoEnterprise
|
|
112
113
|
end
|
113
114
|
end
|
114
115
|
end
|
116
|
+
|
117
|
+
describe 'POST #create' do
|
118
|
+
let(:params) { FactoryGirl.attributes_for(:organization) }
|
119
|
+
before { allow(MnoEnterprise::Organization).to receive(:create) { organization } }
|
120
|
+
|
121
|
+
subject { post :create, organization: params }
|
122
|
+
|
123
|
+
it 'creates the organization' do
|
124
|
+
expect(MnoEnterprise::Organization).to receive(:create).with(params.slice(:name)) { organization }
|
125
|
+
subject
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'provision the app instances' do
|
129
|
+
params.merge!(app_nids: ['xero', app_instance.app.nid])
|
130
|
+
|
131
|
+
# Track the API call
|
132
|
+
create = false
|
133
|
+
stub = -> { create = true; from_api(app_instance) }
|
134
|
+
api_stub_for(post: "/organizations/#{organization.id}/app_instances", response: stub)
|
135
|
+
|
136
|
+
subject
|
137
|
+
|
138
|
+
expect(create).to be true
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe 'POST #invite_member' do
|
143
|
+
before do
|
144
|
+
# Track the api call
|
145
|
+
@api_call = false
|
146
|
+
stub = -> { @api_call = true; from_api(org_invite) }
|
147
|
+
api_stub_for(post: "/organizations/#{organization.id}/org_invites", response: stub)
|
148
|
+
end
|
149
|
+
|
150
|
+
let(:params) { FactoryGirl.attributes_for(:user) }
|
151
|
+
subject { post :invite_member, id: organization.id, user: params }
|
152
|
+
|
153
|
+
context 'with existing user' do
|
154
|
+
before { allow(MnoEnterprise::User).to receive(:find_by) { user } }
|
155
|
+
|
156
|
+
it 'creates an invite' do
|
157
|
+
subject
|
158
|
+
expect(@api_call).to be true
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'with new user' do
|
163
|
+
before { allow(MnoEnterprise::User).to receive(:find_by) { nil } }
|
164
|
+
|
165
|
+
# Directly stubbing the controller method as user creation is a PITA to stub
|
166
|
+
let(:new_user) { build(:user, params.slice(:email, :name, :surname, :phone)) }
|
167
|
+
before { allow(controller).to receive(:create_unconfirmed_user) { new_user } }
|
168
|
+
|
169
|
+
it 'creates a user' do
|
170
|
+
expect(controller).to receive(:create_unconfirmed_user) { new_user }
|
171
|
+
subject
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'creates an invite' do
|
175
|
+
subject
|
176
|
+
expect(@api_call).to be true
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
115
180
|
end
|
116
181
|
end
|
@@ -28,33 +28,20 @@ module MnoEnterprise
|
|
28
28
|
'admin_role' => user.admin_role,
|
29
29
|
'created_at' => user.created_at,
|
30
30
|
'last_sign_in_at' => user.last_sign_in_at,
|
31
|
-
'confirmed_at' => user.confirmed_at
|
32
|
-
'organizations' => partial_hash_for_organization(user)
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
def partial_hash_for_users(user)
|
37
|
-
{
|
38
|
-
'id' => user.id,
|
39
|
-
'uid' => user.uid,
|
40
|
-
'email' => user.email,
|
41
|
-
'name' => user.name,
|
42
|
-
'surname' => user.surname,
|
43
|
-
'admin_role' => user.admin_role,
|
44
|
-
'created_at' => user.created_at
|
31
|
+
'confirmed_at' => user.confirmed_at
|
45
32
|
}
|
46
33
|
end
|
47
34
|
|
48
35
|
def hash_for_users(users)
|
49
36
|
{
|
50
|
-
'users' => users.map { |o|
|
37
|
+
'users' => users.map { |o| partial_hash_for_user(o) },
|
51
38
|
'metadata' => {'pagination' => {'count' => users.count}}
|
52
39
|
}
|
53
40
|
end
|
54
41
|
|
55
42
|
def hash_for_user(user)
|
56
43
|
hash = {
|
57
|
-
'user' => partial_hash_for_user(user)
|
44
|
+
'user' => partial_hash_for_user(user).merge('organizations' => partial_hash_for_organization(user))
|
58
45
|
}
|
59
46
|
|
60
47
|
return hash
|
@@ -131,7 +118,20 @@ module MnoEnterprise
|
|
131
118
|
|
132
119
|
# Test that the user is deleted by testing the api endpoint was called
|
133
120
|
it { expect(user_to_delete.name).to eq('deleted') }
|
121
|
+
end
|
122
|
+
|
123
|
+
describe 'POST #signup_email' do
|
124
|
+
let(:email) { 'test@test.com' }
|
125
|
+
subject { post :signup_email, user: {email: email}}
|
134
126
|
|
127
|
+
it { expect(response).to be_success }
|
128
|
+
|
129
|
+
it 'sends the signup instructions' do
|
130
|
+
message_delivery = instance_double(ActionMailer::MessageDelivery)
|
131
|
+
expect(SystemNotificationMailer).to receive(:registration_instructions).with(email) { message_delivery }
|
132
|
+
expect(message_delivery).to receive(:deliver_later).with(no_args)
|
133
|
+
subject
|
134
|
+
end
|
135
135
|
end
|
136
136
|
end
|
137
137
|
end
|
@@ -8,7 +8,7 @@ module MnoEnterprise
|
|
8
8
|
render_views
|
9
9
|
routes { MnoEnterprise::Engine.routes }
|
10
10
|
before { request.env["HTTP_ACCEPT"] = 'application/json' }
|
11
|
-
|
11
|
+
|
12
12
|
|
13
13
|
#===============================================
|
14
14
|
# Assignments
|
@@ -16,7 +16,7 @@ module MnoEnterprise
|
|
16
16
|
# Stub controller ability
|
17
17
|
let!(:ability) { stub_ability }
|
18
18
|
before { allow(ability).to receive(:can?).with(any_args).and_return(true) }
|
19
|
-
|
19
|
+
|
20
20
|
# Stub user and user call
|
21
21
|
let(:user) { build(:user) }
|
22
22
|
before do
|
@@ -24,12 +24,12 @@ module MnoEnterprise
|
|
24
24
|
api_stub_for(put: "/users/#{user.id}", response: from_api(user))
|
25
25
|
end
|
26
26
|
before { sign_in user }
|
27
|
-
|
27
|
+
|
28
28
|
# Stub organization
|
29
29
|
let(:organization) { build(:organization) }
|
30
30
|
before { allow_any_instance_of(MnoEnterprise::User).to receive(:organizations).and_return([organization]) }
|
31
31
|
|
32
|
-
|
32
|
+
|
33
33
|
#===============================================
|
34
34
|
# Specs
|
35
35
|
#===============================================
|
@@ -49,7 +49,7 @@ module MnoEnterprise
|
|
49
49
|
before { api_stub_for(get: "/organizations/#{organization.id}/app_instances_sync/anything", response: from_api(progress_results)) }
|
50
50
|
|
51
51
|
subject { get :index, organization_id: organization.uid }
|
52
|
-
|
52
|
+
|
53
53
|
it_behaves_like "jpi v1 protected action"
|
54
54
|
|
55
55
|
it "verifies the user's rights" do
|
@@ -74,29 +74,21 @@ module MnoEnterprise
|
|
74
74
|
before { subject }
|
75
75
|
it { expect(JSON.parse(response.body)['is_syncing']).to be_falsey }
|
76
76
|
end
|
77
|
-
|
78
|
-
context "when connector is pending" do
|
79
|
-
let(:progress_results) { { connectors: [
|
80
|
-
HashWithIndifferentAccess.new({name: 'a_name', status: 'PENDING', date: nil})
|
81
|
-
] } }
|
82
|
-
before { subject }
|
83
|
-
it { expect(JSON.parse(response.body)['is_syncing']).to be_truthy }
|
84
|
-
end
|
85
77
|
end
|
86
78
|
|
87
79
|
describe "POST #create" do
|
88
|
-
|
80
|
+
it "to spec: cannot stub 'post /app_instances_syncs data%5Bmode%5D=a_mode'"
|
89
81
|
|
90
|
-
#
|
91
|
-
|
92
|
-
|
82
|
+
# Apps sync
|
83
|
+
let(:sync_results) { {connectors: []} }
|
84
|
+
before { api_stub_for(post: "/app_instances_syncs", response: from_api(sync_results)) }
|
93
85
|
|
94
|
-
|
86
|
+
subject { post :create, organization_id: organization.uid, mode: 'a_mode', return_url: 'a/random/url' }
|
95
87
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
88
|
+
it "verifies the user's rights" do
|
89
|
+
expect(ability).to receive(:can?).with(:sync_apps, organization)
|
90
|
+
subject
|
91
|
+
end
|
100
92
|
end
|
101
93
|
end
|
102
94
|
end
|