@@ -66,6 +66,93 @@ defmodule Rbac.GrpcServers.RbacServerTest do
66
66
setup_assign_and_retract ( channel )
67
67
end
68
68
69
+ @ tag :subject_type_test
70
+ test "Should assign a role to a USER subject and save correct subject_type" , % {
71
+ channel: channel ,
72
+ valid_requester: valid_requester ,
73
+ non_member_user: non_member_user ,
74
+ org_id: org_id
75
+ } do
76
+ request = % InternalApi.RBAC.AssignRoleRequest {
77
+ requester_id: valid_requester . user_id ,
78
+ role_assignment: % InternalApi.RBAC.RoleAssignment {
79
+ org_id: org_id ,
80
+ role_id: Rbac.Roles.Member . role ( ) . id ,
81
+ subject: % InternalApi.RBAC.Subject {
82
+ subject_id: non_member_user . user_id ,
83
+ subject_type: :USER
84
+ }
85
+ }
86
+ }
87
+
88
+ { :ok , response } = Stub . assign_role ( channel , request )
89
+ assert response == % InternalApi.RBAC.AssignRoleResponse { }
90
+
91
+ role_assignment =
92
+ Rbac.Models.RoleAssignment . get_by_user_and_org_id ( non_member_user . user_id , org_id )
93
+
94
+ assert role_assignment . role_id == Rbac.Roles.Member . role ( ) . id
95
+ assert role_assignment . subject_type == "user"
96
+ end
97
+
98
+ @ tag :subject_type_test
99
+ test "Should assign a role to a SERVICE_ACCOUNT subject and save correct subject_type" , % {
100
+ channel: channel ,
101
+ valid_requester: valid_requester ,
102
+ non_member_user: non_member_user ,
103
+ org_id: org_id
104
+ } do
105
+ request = % InternalApi.RBAC.AssignRoleRequest {
106
+ requester_id: valid_requester . user_id ,
107
+ role_assignment: % InternalApi.RBAC.RoleAssignment {
108
+ org_id: org_id ,
109
+ role_id: Rbac.Roles.Admin . role ( ) . id ,
110
+ subject: % InternalApi.RBAC.Subject {
111
+ subject_id: non_member_user . user_id ,
112
+ subject_type: :SERVICE_ACCOUNT
113
+ }
114
+ }
115
+ }
116
+
117
+ { :ok , response } = Stub . assign_role ( channel , request )
118
+ assert response == % InternalApi.RBAC.AssignRoleResponse { }
119
+
120
+ role_assignment =
121
+ Rbac.Models.RoleAssignment . get_by_user_and_org_id ( non_member_user . user_id , org_id )
122
+
123
+ assert role_assignment . role_id == Rbac.Roles.Admin . role ( ) . id
124
+ assert role_assignment . subject_type == "service_account"
125
+ end
126
+
127
+ @ tag :subject_type_test
128
+ test "Should default to 'user' subject_type when subject_type is not provided" , % {
129
+ channel: channel ,
130
+ valid_requester: valid_requester ,
131
+ non_member_user: non_member_user ,
132
+ org_id: org_id
133
+ } do
134
+ request = % InternalApi.RBAC.AssignRoleRequest {
135
+ requester_id: valid_requester . user_id ,
136
+ role_assignment: % InternalApi.RBAC.RoleAssignment {
137
+ org_id: org_id ,
138
+ role_id: Rbac.Roles.Owner . role ( ) . id ,
139
+ subject: % InternalApi.RBAC.Subject {
140
+ subject_id: non_member_user . user_id
141
+ # subject_type not provided
142
+ }
143
+ }
144
+ }
145
+
146
+ { :ok , response } = Stub . assign_role ( channel , request )
147
+ assert response == % InternalApi.RBAC.AssignRoleResponse { }
148
+
149
+ role_assignment =
150
+ Rbac.Models.RoleAssignment . get_by_user_and_org_id ( non_member_user . user_id , org_id )
151
+
152
+ assert role_assignment . role_id == Rbac.Roles.Owner . role ( ) . id
153
+ assert role_assignment . subject_type == "user"
154
+ end
155
+
69
156
test "A valid requester user should assign a member role to a subject" , % {
70
157
channel: channel ,
71
158
valid_requester: valid_requester ,
0 commit comments