mno-enterprise-api 3.3.3 → 3.4.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.
- checksums.yaml +5 -5
- data/app/controllers/mno_enterprise/jpi/v1/admin/impac/dashboards_controller.rb +105 -0
- data/app/controllers/mno_enterprise/jpi/v1/admin/impac/widgets_controller.rb +20 -8
- data/app/controllers/mno_enterprise/jpi/v1/admin/invoices_controller.rb +1 -1
- data/app/controllers/mno_enterprise/jpi/v1/admin/organizations_controller.rb +1 -140
- data/app/controllers/mno_enterprise/jpi/v1/admin/sub_tenants_controller.rb +64 -0
- data/app/controllers/mno_enterprise/jpi/v1/admin/users_controller.rb +30 -20
- data/app/views/mno_enterprise/jpi/v1/admin/impac/dashboards/_dashboard.json.jbuilder +12 -0
- data/app/views/mno_enterprise/jpi/v1/admin/impac/dashboards/index.json.jbuilder +1 -0
- data/app/views/mno_enterprise/jpi/v1/admin/impac/dashboards/show.json.jbuilder +1 -0
- data/app/views/mno_enterprise/jpi/v1/admin/impac/widgets/_widget.json.jbuilder +1 -0
- data/app/views/mno_enterprise/jpi/v1/admin/organizations/_organization.json.jbuilder +1 -1
- data/app/views/mno_enterprise/jpi/v1/admin/sub_tenants/_sub_tenant.json.jbuilder +1 -0
- data/app/views/mno_enterprise/jpi/v1/admin/sub_tenants/index.json.jbuilder +2 -0
- data/app/views/mno_enterprise/jpi/v1/admin/sub_tenants/show.json.jbuilder +12 -0
- 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 +5 -5
- data/app/views/mno_enterprise/jpi/v1/current_users/show.json.jbuilder +4 -2
- data/app/views/mno_enterprise/jpi/v1/impac/widgets/_widget.json.jbuilder +1 -0
- data/app/views/mno_enterprise/jpi/v1/organizations/_organization.json.jbuilder +1 -1
- data/config/routes.rb +9 -1
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/admin/organizations_controller.rb +159 -0
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/alerts_controller.rb +3 -6
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/dashboards_controller.rb +29 -38
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/kpis_controller.rb +7 -8
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/impac/widgets_controller.rb +14 -2
- data/lib/mno_enterprise/concerns/controllers/jpi/v1/organizations_controller.rb +1 -1
- data/spec/controllers/mno_enterprise/jpi/v1/admin/impac/dashboard_controller_spec.rb +149 -0
- data/spec/controllers/mno_enterprise/jpi/v1/admin/impac/dashboard_templates_controller_spec.rb +151 -139
- data/spec/controllers/mno_enterprise/jpi/v1/admin/impac/kpis_controller_spec.rb +95 -69
- data/spec/controllers/mno_enterprise/jpi/v1/admin/impac/widgets_controller_spec.rb +169 -81
- data/spec/controllers/mno_enterprise/jpi/v1/admin/invoices_controller_spec.rb +1 -1
- data/spec/controllers/mno_enterprise/jpi/v1/admin/organizations_controller_spec.rb +2 -1
- data/spec/controllers/mno_enterprise/jpi/v1/admin/sub_tenants_controller_spec.rb +172 -0
- data/spec/controllers/mno_enterprise/jpi/v1/admin/users_controller_spec.rb +29 -12
- data/spec/controllers/mno_enterprise/jpi/v1/current_users_controller_spec.rb +4 -2
- data/spec/controllers/mno_enterprise/jpi/v1/impac/dashboards_controller_spec.rb +26 -15
- data/spec/controllers/mno_enterprise/jpi/v1/impac/kpis_controller_spec.rb +11 -7
- data/spec/routing/mno_enterprise/jpi/v1/admin/impac/dashboards_controller_routing_spec.rb +28 -0
- data/spec/routing/mno_enterprise/jpi/v1/impac/dashboards_controller_routing_spec.rb +4 -0
- metadata +85 -70
@@ -158,7 +158,7 @@ module MnoEnterprise
|
|
158
158
|
it { expect(response).to be_success }
|
159
159
|
|
160
160
|
it 'returns a valid amount' do
|
161
|
-
expected = {'last_portfolio_amount' => {'amount' => tenant.last_portfolio_amount.amount, 'currency' => tenant.last_portfolio_amount.
|
161
|
+
expected = {'last_portfolio_amount' => {'amount' => tenant.last_portfolio_amount.amount, 'currency' => tenant.last_portfolio_amount.currency.to_s}}
|
162
162
|
|
163
163
|
expect(response.body).to eq(expected.to_json)
|
164
164
|
end
|
@@ -70,7 +70,8 @@ module MnoEnterprise
|
|
70
70
|
'name' => organization.name,
|
71
71
|
'soa_enabled' => organization.soa_enabled,
|
72
72
|
'created_at' => organization.created_at,
|
73
|
-
'account_frozen' => organization.account_frozen
|
73
|
+
'account_frozen' => organization.account_frozen,
|
74
|
+
'financial_year_end_month' => organization.financial_year_end_month
|
74
75
|
}],
|
75
76
|
'metadata' => {'pagination' => {'count' => 1}}
|
76
77
|
}
|
@@ -0,0 +1,172 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
module MnoEnterprise
|
4
|
+
describe Jpi::V1::Admin::SubTenantsController, type: :controller do
|
5
|
+
include MnoEnterprise::TestingSupport::SharedExamples::JpiV1Admin
|
6
|
+
render_views
|
7
|
+
routes { MnoEnterprise::Engine.routes }
|
8
|
+
before { request.env['HTTP_ACCEPT'] = 'application/json' }
|
9
|
+
|
10
|
+
def hash_for_sub_tenants(sub_tenants)
|
11
|
+
{
|
12
|
+
'sub_tenants' => sub_tenants.map { |s| partial_hash_for_sub_tenant(s) },
|
13
|
+
'metadata' => {'pagination' => {'count' => sub_tenants.count}}
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def hash_for_sub_tenant(s)
|
18
|
+
hash = partial_hash_for_sub_tenant(s).merge(
|
19
|
+
{
|
20
|
+
'clients' => s.clients.map { |c| hash_for_client(c) },
|
21
|
+
'account_managers' => s.account_managers.map { |c| hash_account_manager(c) },
|
22
|
+
})
|
23
|
+
{'sub_tenant' => hash}
|
24
|
+
end
|
25
|
+
|
26
|
+
def partial_hash_for_sub_tenant(s)
|
27
|
+
{
|
28
|
+
'id' => s.id,
|
29
|
+
'name' => s.name,
|
30
|
+
'created_at' => s.created_at,
|
31
|
+
'updated_at' => s.updated_at,
|
32
|
+
'client_ids' => s.client_ids,
|
33
|
+
'account_manager_ids' => s.account_manager_ids
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def hash_for_client(client)
|
38
|
+
{
|
39
|
+
'id' => client.id,
|
40
|
+
'uid' => client.uid,
|
41
|
+
'name' => client.name,
|
42
|
+
'created_at' => client.created_at
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def hash_account_manager(user)
|
47
|
+
{
|
48
|
+
'id' => user.id,
|
49
|
+
'uid' => user.uid,
|
50
|
+
'name' => user.name,
|
51
|
+
'surname' => user.surname,
|
52
|
+
'email' => user.email,
|
53
|
+
'created_at' => user.created_at,
|
54
|
+
'admin_role' => user.admin_role
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
shared_examples_for 'unauthorized access' do
|
59
|
+
it { expect(subject).to_not be_success }
|
60
|
+
it do
|
61
|
+
subject
|
62
|
+
expect(response.status).to eq(401)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
#===============================================
|
67
|
+
# Specs
|
68
|
+
#===============================================
|
69
|
+
let(:current_user) { build(:user, :admin) }
|
70
|
+
let(:user) { build(:user) }
|
71
|
+
let(:organization) { build(:organization) }
|
72
|
+
let(:sub_tenant) { build(:sub_tenant, account_managers: [user], clients: [organization]) }
|
73
|
+
|
74
|
+
before do
|
75
|
+
api_stub_for(get: '/sub_tenants', response: from_api([sub_tenant]))
|
76
|
+
api_stub_for(get: "/sub_tenants/#{sub_tenant.id}", response: from_api(sub_tenant))
|
77
|
+
api_stub_for(get: "/users/#{current_user.id}", response: from_api(current_user))
|
78
|
+
api_stub_for(get: "/users/#{current_user.id}/organizations", response: from_api([organization]))
|
79
|
+
sign_in current_user
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#index' do
|
83
|
+
subject { get :index }
|
84
|
+
context 'not admin' do
|
85
|
+
let(:current_user) { build(:user) }
|
86
|
+
it_behaves_like 'unauthorized access'
|
87
|
+
end
|
88
|
+
context 'admin' do
|
89
|
+
context 'success' do
|
90
|
+
before { subject }
|
91
|
+
it 'returns a list of sub_tenant' do
|
92
|
+
expect(response).to be_success
|
93
|
+
expect(JSON.parse(response.body)).to eq(JSON.parse(hash_for_sub_tenants([sub_tenant]).to_json))
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'GET #show' do
|
100
|
+
subject { get :show, id: sub_tenant.id }
|
101
|
+
|
102
|
+
before do
|
103
|
+
api_stub_for(get: "/sub_tenants/#{sub_tenant.id}/clients", response: from_api([organization]))
|
104
|
+
api_stub_for(get: "/sub_tenants/#{sub_tenant.id}/account_managers", response: from_api([user]))
|
105
|
+
end
|
106
|
+
context 'not admin' do
|
107
|
+
let(:current_user) { build(:user) }
|
108
|
+
it_behaves_like 'unauthorized access'
|
109
|
+
end
|
110
|
+
context 'admin' do
|
111
|
+
it_behaves_like 'a jpi v1 admin action'
|
112
|
+
context 'success' do
|
113
|
+
before { subject }
|
114
|
+
it 'returns a complete description of the sub_tenant' do
|
115
|
+
expect(response).to be_success
|
116
|
+
expect(JSON.parse(response.body)).to eq(JSON.parse(hash_for_sub_tenant(sub_tenant).to_json))
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'PUT #update' do
|
123
|
+
subject { put :update, id: sub_tenant.id, sub_tenant: {name: 'new name'} }
|
124
|
+
|
125
|
+
before do
|
126
|
+
api_stub_for(get: "/sub_tenants/#{sub_tenant.id}", response: from_api(sub_tenant))
|
127
|
+
api_stub_for(put: "/sub_tenants/#{sub_tenant.id}", response: -> { sub_tenant.name = 'new name'; from_api(sub_tenant) })
|
128
|
+
sign_in current_user
|
129
|
+
end
|
130
|
+
|
131
|
+
it_behaves_like 'a jpi v1 admin action' do
|
132
|
+
before { api_stub_for(get: "/users/#{user.id}/organizations", response: from_api([organization])) }
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'not admin' do
|
136
|
+
let(:current_user) { build(:user) }
|
137
|
+
it_behaves_like 'unauthorized access'
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'admin' do
|
141
|
+
before { subject }
|
142
|
+
context 'success' do
|
143
|
+
it { expect(response).to be_success }
|
144
|
+
# Test that the user is updated by testing the api endpoint was called
|
145
|
+
it { expect(sub_tenant.name).to eq('new name') }
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe 'DELETE #destroy' do
|
151
|
+
subject { delete :destroy, id: sub_tenant.id }
|
152
|
+
before do
|
153
|
+
api_stub_for(get: "/sub_tenants/#{sub_tenant.id}", response: from_api(sub_tenant))
|
154
|
+
api_stub_for(delete: "/sub_tenants/#{sub_tenant.id}")
|
155
|
+
sign_in current_user
|
156
|
+
end
|
157
|
+
it_behaves_like 'a jpi v1 admin action'
|
158
|
+
|
159
|
+
context 'not admin' do
|
160
|
+
let(:current_user) { build(:user) }
|
161
|
+
it_behaves_like 'unauthorized access'
|
162
|
+
end
|
163
|
+
context 'admin' do
|
164
|
+
context 'success' do
|
165
|
+
it { subject }
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
@@ -7,15 +7,25 @@ module MnoEnterprise
|
|
7
7
|
routes { MnoEnterprise::Engine.routes }
|
8
8
|
before { request.env["HTTP_ACCEPT"] = 'application/json' }
|
9
9
|
|
10
|
-
def
|
10
|
+
def partial_hash_for_organizations(user)
|
11
11
|
user.organizations.map do |org|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
hash_for_organization(org)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def hash_for_organization(org)
|
17
|
+
{
|
18
|
+
'id' => org.id,
|
19
|
+
'uid' => org.uid,
|
20
|
+
'name' => org.name,
|
21
|
+
'account_frozen' => org.account_frozen,
|
22
|
+
'created_at' => org.created_at
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def partial_hash_for_clients(user)
|
27
|
+
user.clients.map do |org|
|
28
|
+
hash_for_organization(org)
|
19
29
|
end
|
20
30
|
end
|
21
31
|
|
@@ -29,9 +39,12 @@ module MnoEnterprise
|
|
29
39
|
'surname' => user.surname,
|
30
40
|
'admin_role' => user.admin_role,
|
31
41
|
'created_at' => user.created_at,
|
42
|
+
'updated_at' => user.updated_at,
|
32
43
|
'last_sign_in_at' => user.last_sign_in_at,
|
33
44
|
'confirmed_at' => user.confirmed_at,
|
34
|
-
'sign_in_count' => user.sign_in_count
|
45
|
+
'sign_in_count' => user.sign_in_count,
|
46
|
+
'mnoe_sub_tenant_id' => user.mnoe_sub_tenant_id,
|
47
|
+
'client_ids' => user.client_ids
|
35
48
|
}
|
36
49
|
end
|
37
50
|
|
@@ -44,7 +57,7 @@ module MnoEnterprise
|
|
44
57
|
|
45
58
|
def hash_for_user(user)
|
46
59
|
hash = {
|
47
|
-
'user' => partial_hash_for_user(user).merge('organizations' =>
|
60
|
+
'user' => partial_hash_for_user(user).merge('organizations' => partial_hash_for_organizations(user), 'clients' => partial_hash_for_clients(user))
|
48
61
|
}
|
49
62
|
|
50
63
|
return hash
|
@@ -55,11 +68,15 @@ module MnoEnterprise
|
|
55
68
|
# Assignments
|
56
69
|
#===============================================
|
57
70
|
# Stub user and user call
|
58
|
-
let(:user) { build(:user, :admin, :with_organizations) }
|
71
|
+
let(:user) { build(:user, :admin, :with_organizations, :with_clients) }
|
72
|
+
|
73
|
+
let(:organization) { build(:organization) }
|
74
|
+
|
59
75
|
before do
|
60
76
|
api_stub_for(get: "/users", response: from_api([user]))
|
61
77
|
api_stub_for(get: "/users/#{user.id}", response: from_api(user))
|
62
|
-
api_stub_for(get: "/users/#{user.id}/organizations", response: from_api(
|
78
|
+
api_stub_for(get: "/users/#{user.id}/organizations", response: from_api([organization]))
|
79
|
+
api_stub_for(get: "/users/#{user.id}/clients", response: from_api([organization]))
|
63
80
|
sign_in user
|
64
81
|
end
|
65
82
|
|
@@ -34,7 +34,8 @@ module MnoEnterprise
|
|
34
34
|
'sso_session' => res.sso_session,
|
35
35
|
'admin_role' => res.admin_role,
|
36
36
|
'avatar_url' => avatar_url(res),
|
37
|
-
'tos_accepted_at' => res.meta_data[:tos_accepted_at] || false
|
37
|
+
'tos_accepted_at' => res.meta_data[:tos_accepted_at] || false,
|
38
|
+
'mnoe_sub_tenant_id' => res.mnoe_sub_tenant_id
|
38
39
|
}
|
39
40
|
|
40
41
|
if res.id
|
@@ -47,7 +48,8 @@ module MnoEnterprise
|
|
47
48
|
'currency' => 'AUD',
|
48
49
|
'current_user_role' => o.role,
|
49
50
|
'has_myob_essentials_only' => o.has_myob_essentials_only?,
|
50
|
-
'financial_year_end_month' => o.financial_year_end_month
|
51
|
+
'financial_year_end_month' => o.financial_year_end_month,
|
52
|
+
'acl' => o.acl
|
51
53
|
}
|
52
54
|
end
|
53
55
|
|
@@ -37,6 +37,7 @@ module MnoEnterprise
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
let!(:ability) { stub_ability }
|
40
41
|
let(:user) { build(:user, :with_organizations) }
|
41
42
|
let(:org) { build(:organization, users: [user]) }
|
42
43
|
let(:metadata) { { hist_parameters: { from: '2015-01-01', to: '2015-03-31', period: 'MONTHLY' } } }
|
@@ -130,6 +131,10 @@ module MnoEnterprise
|
|
130
131
|
end
|
131
132
|
|
132
133
|
describe 'POST #create' do
|
134
|
+
subject { post :create, user_id: user.id, dashboard: dashboard_params }
|
135
|
+
|
136
|
+
include_context "#{described_class}: dashboard dependencies stubs"
|
137
|
+
|
133
138
|
before do
|
134
139
|
api_stub_for(
|
135
140
|
post: "users/#{user.id}/dashboards",
|
@@ -140,20 +145,24 @@ module MnoEnterprise
|
|
140
145
|
get: "users/#{user.id}/dashboards",
|
141
146
|
response: from_api([dashboard])
|
142
147
|
)
|
148
|
+
allow(ability).to receive(:can?).with(:create_impac_dashboards, any_args).and_return(true)
|
143
149
|
end
|
144
|
-
include_context "#{described_class}: dashboard dependencies stubs"
|
145
|
-
|
146
|
-
subject { post :create, user_id: user.id, dashboard: dashboard_params }
|
147
150
|
|
148
151
|
it_behaves_like "jpi v1 protected action"
|
149
152
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
+
context 'when authorized' do
|
154
|
+
it 'returns a dashboard' do
|
155
|
+
subject
|
156
|
+
expect(JSON.parse(response.body)).to eq(hash_for_dashboard)
|
157
|
+
end
|
153
158
|
end
|
154
159
|
end
|
155
160
|
|
156
161
|
describe 'PUT #update' do
|
162
|
+
subject { put :update, id: dashboard.id, dashboard: dashboard_params }
|
163
|
+
|
164
|
+
include_context "#{described_class}: dashboard dependencies stubs"
|
165
|
+
|
157
166
|
before do
|
158
167
|
api_stub_for(
|
159
168
|
get: "users/#{user.id}/dashboards/#{dashboard.id}",
|
@@ -163,10 +172,8 @@ module MnoEnterprise
|
|
163
172
|
put: "dashboards/#{dashboard.id}",
|
164
173
|
response: from_api(dashboard)
|
165
174
|
)
|
175
|
+
allow(ability).to receive(:can?).with(:update_impac_dashboards, any_args).and_return(true)
|
166
176
|
end
|
167
|
-
include_context "#{described_class}: dashboard dependencies stubs"
|
168
|
-
|
169
|
-
subject { put :update, id: dashboard.id, dashboard: dashboard_params }
|
170
177
|
|
171
178
|
it_behaves_like "jpi v1 protected action"
|
172
179
|
|
@@ -177,6 +184,10 @@ module MnoEnterprise
|
|
177
184
|
end
|
178
185
|
|
179
186
|
describe "DELETE destroy" do
|
187
|
+
subject { delete :destroy, id: dashboard.id }
|
188
|
+
|
189
|
+
include_context "#{described_class}: dashboard dependencies stubs"
|
190
|
+
|
180
191
|
before do
|
181
192
|
api_stub_for(
|
182
193
|
get: "users/#{user.id}/dashboards/#{dashboard.id}",
|
@@ -186,15 +197,17 @@ module MnoEnterprise
|
|
186
197
|
delete: "dashboards/#{dashboard.id}",
|
187
198
|
response: from_api(dashboard)
|
188
199
|
)
|
200
|
+
allow(ability).to receive(:can?).with(:destroy_impac_dashboards, any_args).and_return(true)
|
189
201
|
end
|
190
|
-
include_context "#{described_class}: dashboard dependencies stubs"
|
191
|
-
|
192
|
-
subject { delete :destroy, id: dashboard.id }
|
193
202
|
|
194
203
|
it_behaves_like "jpi v1 protected action"
|
195
204
|
end
|
196
205
|
|
197
206
|
describe 'POST copy' do
|
207
|
+
subject { post :copy, id: template.id, dashboard: dashboard_params }
|
208
|
+
|
209
|
+
include_context "#{described_class}: dashboard dependencies stubs"
|
210
|
+
|
198
211
|
let(:template) { build(:impac_dashboard, dashboard_type: 'template') }
|
199
212
|
|
200
213
|
before do
|
@@ -207,10 +220,8 @@ module MnoEnterprise
|
|
207
220
|
post: "/dashboards/#{template.id}/copy",
|
208
221
|
response: from_api(dashboard)
|
209
222
|
)
|
223
|
+
allow(ability).to receive(:can?).with(:create_impac_dashboards, any_args).and_return(true)
|
210
224
|
end
|
211
|
-
include_context "#{described_class}: dashboard dependencies stubs"
|
212
|
-
|
213
|
-
subject { post :copy, id: template.id, dashboard: dashboard_params }
|
214
225
|
|
215
226
|
it_behaves_like "jpi v1 protected action"
|
216
227
|
|
@@ -78,7 +78,6 @@ module MnoEnterprise
|
|
78
78
|
|
79
79
|
describe 'POST #create' do
|
80
80
|
shared_examples "create kpi action" do
|
81
|
-
|
82
81
|
it "creates the kpi" do
|
83
82
|
subject
|
84
83
|
expect(assigns(:kpi)).to eq(kpi)
|
@@ -89,6 +88,8 @@ module MnoEnterprise
|
|
89
88
|
|
90
89
|
let (:kpi_targets) { {} }
|
91
90
|
|
91
|
+
before { allow(ability).to receive(:can?).with(:create_impac_kpis, any_args).and_return(true) }
|
92
|
+
|
92
93
|
context "a dashboard KPI" do
|
93
94
|
subject { post :create, dashboard_id: dashboard.id, kpi: kpi_hash }
|
94
95
|
|
@@ -170,6 +171,8 @@ module MnoEnterprise
|
|
170
171
|
end
|
171
172
|
|
172
173
|
describe 'PUT #update' do
|
174
|
+
subject { put :update, id: kpi.id, kpi: kpi_hash.merge(params) }
|
175
|
+
|
173
176
|
RSpec.shared_examples 'a kpi update action' do
|
174
177
|
it "updates the kpi" do
|
175
178
|
subject
|
@@ -233,16 +236,14 @@ module MnoEnterprise
|
|
233
236
|
let(:kpi_hash) { from_api(kpi)[:data].except(:dashboard).merge(element_watched: 'New Watchable') }
|
234
237
|
let(:params) { {} }
|
235
238
|
|
236
|
-
subject { put :update, id: kpi.id, kpi: kpi_hash.merge(params) }
|
237
|
-
|
238
239
|
before do
|
239
240
|
api_stub_for(get: "/kpis/#{kpi.id}", response: from_api(kpi))
|
240
241
|
api_stub_for(put: "/kpis/#{kpi.id}", response: kpi_hash)
|
241
242
|
api_stub_for(get: "/kpis/#{kpi.id}/alerts", response: from_api(alerts_hashes))
|
243
|
+
allow(ability).to receive(:can?).with(:update_impac_kpis, any_args).and_return(true)
|
244
|
+
kpi.save
|
242
245
|
end
|
243
246
|
|
244
|
-
before { kpi.save }
|
245
|
-
|
246
247
|
context "a dashboard KPI" do
|
247
248
|
it_behaves_like "jpi v1 authorizable action"
|
248
249
|
it_behaves_like "a kpi update action"
|
@@ -260,8 +261,11 @@ module MnoEnterprise
|
|
260
261
|
describe 'DELETE #destroy' do
|
261
262
|
subject { delete :destroy, id: kpi.id }
|
262
263
|
|
263
|
-
before
|
264
|
-
|
264
|
+
before do
|
265
|
+
api_stub_for(get: "/kpis/#{kpi.id}", response: from_api(kpi))
|
266
|
+
api_stub_for(delete: "/kpis/#{kpi.id}", response: {message: 'ok', code: 200})
|
267
|
+
allow(ability).to receive(:can?).with(:destroy_impac_kpis, any_args).and_return(true)
|
268
|
+
end
|
265
269
|
|
266
270
|
it_behaves_like "jpi v1 authorizable action"
|
267
271
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
module MnoEnterprise
|
4
|
+
RSpec.describe Jpi::V1::Admin::Impac::DashboardsController, type: :routing do
|
5
|
+
routes { MnoEnterprise::Engine.routes }
|
6
|
+
|
7
|
+
it 'routes to #index' do
|
8
|
+
expect(get('/jpi/v1/admin/impac/dashboards')).to route_to('mno_enterprise/jpi/v1/admin/impac/dashboards#index', format: 'json')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'routes to #create' do
|
12
|
+
expect(post('/jpi/v1/admin/impac/dashboards')).to route_to('mno_enterprise/jpi/v1/admin/impac/dashboards#create', format: 'json')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'routes to #update' do
|
16
|
+
expect(put('/jpi/v1/admin/impac/dashboards/2')).to route_to('mno_enterprise/jpi/v1/admin/impac/dashboards#update', id: '2', format: 'json')
|
17
|
+
expect(patch('/jpi/v1/admin/impac/dashboards/2')).to route_to('mno_enterprise/jpi/v1/admin/impac/dashboards#update', id: '2', format: 'json')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'routes to #destroy' do
|
21
|
+
expect(delete('/jpi/v1/admin/impac/dashboards/2')).to route_to('mno_enterprise/jpi/v1/admin/impac/dashboards#destroy', id: '2', format: 'json')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'routes to #copy' do
|
25
|
+
expect(post('/jpi/v1/admin/impac/dashboards/2/copy')).to route_to('mno_enterprise/jpi/v1/admin/impac/dashboards#copy', id: '2', format: 'json')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|