@@ -34,6 +34,7 @@ defmodule Guard.ServiceAccount.ActionsTest do
34
34
create: fn _ , _ , _ , _ -> :ok end ,
35
35
fetch: fn _ -> % { id: "rbac-user-id" , user_id: "user-id" } end
36
36
] } ,
37
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] } ,
37
38
{ Guard.Events.UserCreated , [ :passthrough ] , [ publish: fn _ , _ -> :ok end ] }
38
39
] ) do
39
40
params = ServiceAccountFactory . build_params ( )
@@ -80,6 +81,7 @@ defmodule Guard.ServiceAccount.ActionsTest do
80
81
end ,
81
82
fetch: fn _ -> % { id: "rbac-user-id" , user_id: "user-id" } end
82
83
] } ,
84
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] } ,
83
85
{ Guard.Events.UserCreated , [ :passthrough ] , [ publish: fn _ , _ -> :ok end ] }
84
86
] ) do
85
87
params = ServiceAccountFactory . build_params ( )
@@ -95,11 +97,17 @@ defmodule Guard.ServiceAccount.ActionsTest do
95
97
"Test SA"
96
98
)
97
99
)
100
+
101
+ # Verify role assignment was called
102
+ assert_called ( Guard.Api.Rbac . assign_role ( "org-id" , "user-id" , :_ ) )
98
103
end
99
104
end
100
105
101
106
test "handles service account creation failure" do
102
- with_mock ServiceAccount , [ :passthrough ] , create: fn _ -> { :error , :creation_failed } end do
107
+ with_mocks ( [
108
+ { ServiceAccount , [ :passthrough ] , [ create: fn _ -> { :error , :creation_failed } end ] } ,
109
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] }
110
+ ] ) do
103
111
params = ServiceAccountFactory . build_params ( )
104
112
105
113
{ :error , :creation_failed } = Actions . create ( params )
@@ -131,6 +139,7 @@ defmodule Guard.ServiceAccount.ActionsTest do
131
139
[
132
140
create: fn _ , _ , _ , _ -> :error end
133
141
] } ,
142
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] } ,
134
143
{ Guard.Events.UserCreated , [ :passthrough ] , [ publish: fn _ , _ -> :ok end ] }
135
144
] ) do
136
145
params = ServiceAccountFactory . build_params ( )
@@ -167,16 +176,59 @@ defmodule Guard.ServiceAccount.ActionsTest do
167
176
[
168
177
create: fn _ , _ , _ , _ -> :ok end ,
169
178
fetch: fn _ -> nil end
170
- ] }
179
+ ] } ,
180
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] }
171
181
] ) do
172
182
params = ServiceAccountFactory . build_params ( )
173
183
174
184
{ :error , :rbac_user_not_found } = Actions . create ( params )
175
185
end
176
186
end
177
187
188
+ test "handles role assignment failure" do
189
+ with_mocks ( [
190
+ { ServiceAccount , [ :passthrough ] ,
191
+ [
192
+ create: fn _ ->
193
+ { :ok ,
194
+ % {
195
+ service_account: % {
196
+ id: "user-id" ,
197
+ user_id: "user-id" ,
198
+ name: "Test SA" ,
199
+ description: "Test Description" ,
200
+ org_id: "org-id" ,
201
+ creator_id: "creator-id" ,
202
+ deactivated: false ,
203
+
204
+ } ,
205
+ api_token: "test-token"
206
+ } }
207
+ end
208
+ ] } ,
209
+ { Guard.Store.RbacUser , [ :passthrough ] ,
210
+ [
211
+ create: fn _ , _ , _ , _ -> :ok end ,
212
+ fetch: fn _ -> % { id: "rbac-user-id" , user_id: "user-id" } end
213
+ ] } ,
214
+ { Guard.Api.Rbac , [ :passthrough ] ,
215
+ [ assign_role: fn _ , _ , _ -> { :error , :assignment_failed } end ] } ,
216
+ { Guard.Events.UserCreated , [ :passthrough ] , [ publish: fn _ , _ -> :ok end ] }
217
+ ] ) do
218
+ params = ServiceAccountFactory . build_params ( )
219
+
220
+ { :error , :assignment_failed } = Actions . create ( params )
221
+
222
+ # Verify event was NOT published on failure
223
+ refute called ( Guard.Events.UserCreated . publish ( :_ , :_ ) )
224
+ end
225
+ end
226
+
178
227
test "handles service account store creation failure" do
179
- with_mock ServiceAccount , [ :passthrough ] , create: fn _ -> { :error , :creation_failed } end do
228
+ with_mocks ( [
229
+ { ServiceAccount , [ :passthrough ] , [ create: fn _ -> { :error , :creation_failed } end ] } ,
230
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] }
231
+ ] ) do
180
232
params = ServiceAccountFactory . build_params ( )
181
233
182
234
{ :error , :creation_failed } = Actions . create ( params )
@@ -335,9 +387,10 @@ defmodule Guard.ServiceAccount.ActionsTest do
335
387
[ reset_auth_token: fn _ -> { :ok , "test-token" } end ] } ,
336
388
{ Guard.Store.RbacUser , [ :passthrough ] ,
337
389
[
338
- create: fn _ , _ , _ -> :ok end ,
390
+ create: fn _ , _ , _ , _ -> :ok end ,
339
391
fetch: fn _ -> % { id: "rbac-user-id" } end
340
392
] } ,
393
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] } ,
341
394
{ Guard.Events.UserCreated , [ :passthrough ] , [ publish: fn _ , _ -> :ok end ] }
342
395
] ) do
343
396
params =
@@ -372,9 +425,10 @@ defmodule Guard.ServiceAccount.ActionsTest do
372
425
[ reset_auth_token: fn _ -> { :ok , "test-token" } end ] } ,
373
426
{ Guard.Store.RbacUser , [ :passthrough ] ,
374
427
[
375
- create: fn _ , _ , _ -> :ok end ,
428
+ create: fn _ , _ , _ , _ -> :ok end ,
376
429
fetch: fn _ -> % { id: "rbac-user-id" } end
377
430
] } ,
431
+ { Guard.Api.Rbac , [ :passthrough ] , [ assign_role: fn _ , _ , _ -> :ok end ] } ,
378
432
{ Guard.Events.UserCreated , [ :passthrough ] , [ publish: fn _ , _ -> :ok end ] }
379
433
] ) do
380
434
# Create service account first
0 commit comments