@@ -100,6 +100,67 @@ func TestApproveApprovalTask(t *testing.T) {
100
100
State : "pending" ,
101
101
},
102
102
},
103
+ // Test case with group approvers
104
+ {
105
+ ObjectMeta : metav1.ObjectMeta {
106
+ Name : "at-group-1" ,
107
+ Namespace : "foo" ,
108
+ },
109
+ Spec : v1alpha1.ApprovalTaskSpec {
110
+ Approvers : []v1alpha1.ApproverDetails {
111
+ {
112
+ Name : "admin-group" ,
113
+ Input : "pending" ,
114
+ Type : "Group" ,
115
+ Users : []v1alpha1.UserDetails {},
116
+ },
117
+ {
118
+ Name : "dev-team" ,
119
+ Input : "pending" ,
120
+ Type : "Group" ,
121
+ Users : []v1alpha1.UserDetails {},
122
+ },
123
+ },
124
+ NumberOfApprovalsRequired : 2 ,
125
+ },
126
+ Status : v1alpha1.ApprovalTaskStatus {
127
+ Approvers : []string {
128
+ "admin-group" ,
129
+ "dev-team" ,
130
+ },
131
+ State : "pending" ,
132
+ },
133
+ },
134
+ // Test case with mixed user and group approvers
135
+ {
136
+ ObjectMeta : metav1.ObjectMeta {
137
+ Name : "at-mixed-1" ,
138
+ Namespace : "foo" ,
139
+ },
140
+ Spec : v1alpha1.ApprovalTaskSpec {
141
+ Approvers : []v1alpha1.ApproverDetails {
142
+ {
143
+ Name : "alice" ,
144
+ Input : "pending" ,
145
+ Type : "User" ,
146
+ },
147
+ {
148
+ Name : "admin-group" ,
149
+ Input : "pending" ,
150
+ Type : "Group" ,
151
+ Users : []v1alpha1.UserDetails {},
152
+ },
153
+ },
154
+ NumberOfApprovalsRequired : 2 ,
155
+ },
156
+ Status : v1alpha1.ApprovalTaskStatus {
157
+ Approvers : []string {
158
+ "alice" ,
159
+ "admin-group" ,
160
+ },
161
+ State : "pending" ,
162
+ },
163
+ },
103
164
}
104
165
105
166
ns := []* corev1.Namespace {
@@ -114,6 +175,8 @@ func TestApproveApprovalTask(t *testing.T) {
114
175
cb .UnstructuredV1alpha1 (approvaltasks [0 ], "v1alpha1" ),
115
176
cb .UnstructuredV1alpha1 (approvaltasks [1 ], "v1alpha1" ),
116
177
cb .UnstructuredV1alpha1 (approvaltasks [2 ], "v1alpha1" ),
178
+ cb .UnstructuredV1alpha1 (approvaltasks [3 ], "v1alpha1" ),
179
+ cb .UnstructuredV1alpha1 (approvaltasks [4 ], "v1alpha1" ),
117
180
)
118
181
if err != nil {
119
182
t .Errorf ("unable to create dynamic client: %v" , err )
@@ -128,25 +191,61 @@ func TestApproveApprovalTask(t *testing.T) {
128
191
}{
129
192
{
130
193
name : "approve approval task" ,
131
- command : command (t , approvaltasks , ns , dc , "tekton" ),
194
+ command : command (t , approvaltasks , ns , dc , "tekton" , [] string {} ),
132
195
args : []string {"at-1" , "-n" , "foo" },
133
196
expectedOutput : "ApprovalTask at-1 is approved in foo namespace\n " ,
134
197
wantError : false ,
135
198
},
136
199
{
137
200
name : "invalid username" ,
138
- command : command (t , approvaltasks , ns , dc , "test-user" ),
201
+ command : command (t , approvaltasks , ns , dc , "test-user" , [] string {} ),
139
202
args : []string {"at-2" , "-n" , "foo" },
140
203
expectedOutput : "Error: failed to approve approvalTask from namespace foo: Approver: test-user, is not present in the approvers list\n " ,
141
204
wantError : true ,
142
205
},
143
206
{
144
207
name : "approvaltask not found" ,
145
- command : command (t , approvaltasks , ns , dc , "tekton" ),
208
+ command : command (t , approvaltasks , ns , dc , "tekton" , [] string {} ),
146
209
args : []string {"at-3" , "-n" , "test" },
147
210
expectedOutput : fmt .Sprintf ("Error: failed to approve approvalTask from namespace %s: approvaltasks.openshift-pipelines.org \" %s\" not found\n " , "test" , "at-3" ),
148
211
wantError : true ,
149
212
},
213
+ // Group tests
214
+ {
215
+ name : "approve as group member" ,
216
+ command : command (t , approvaltasks , ns , dc , "bob" , []string {"admin-group" }),
217
+ args : []string {"at-group-1" , "-n" , "foo" },
218
+ expectedOutput : "ApprovalTask at-group-1 is approved in foo namespace\n " ,
219
+ wantError : false ,
220
+ },
221
+ {
222
+ name : "user not in any required groups" ,
223
+ command : command (t , approvaltasks , ns , dc , "charlie" , []string {"other-group" }),
224
+ args : []string {"at-group-1" , "-n" , "foo" },
225
+ expectedOutput : "Error: failed to approve approvalTask from namespace foo: Approver: charlie, is not present in the approvers list\n " ,
226
+ wantError : true ,
227
+ },
228
+ {
229
+ name : "approve mixed user and group - as group member" ,
230
+ command : command (t , approvaltasks , ns , dc , "david" , []string {"admin-group" }),
231
+ args : []string {"at-mixed-1" , "-n" , "foo" },
232
+ expectedOutput : "ApprovalTask at-mixed-1 is approved in foo namespace\n " ,
233
+ wantError : false ,
234
+ },
235
+ {
236
+ name : "approve mixed user and group - as direct user" ,
237
+ command : command (t , approvaltasks , ns , dc , "alice" , []string {"other-group" }),
238
+ args : []string {"at-mixed-1" , "-n" , "foo" },
239
+ expectedOutput : "ApprovalTask at-mixed-1 is approved in foo namespace\n " ,
240
+ wantError : false ,
241
+ },
242
+ {
243
+ name : "user in multiple groups but approves through one" ,
244
+ command : command (t , approvaltasks , ns , dc , "eve" , []string {"admin-group" , "dev-team" , "other-group" }),
245
+ args : []string {"at-group-1" , "-n" , "foo" },
246
+ expectedOutput : "ApprovalTask at-group-1 is approved in foo namespace\n " ,
247
+ wantError : false ,
248
+ },
150
249
}
151
250
152
251
for _ , td := range tests {
@@ -163,9 +262,9 @@ func TestApproveApprovalTask(t *testing.T) {
163
262
}
164
263
}
165
264
166
- func command (t * testing.T , approvaltasks []* v1alpha1.ApprovalTask , ns []* corev1.Namespace , dc dynamic.Interface , username string ) * cobra.Command {
265
+ func command (t * testing.T , approvaltasks []* v1alpha1.ApprovalTask , ns []* corev1.Namespace , dc dynamic.Interface , username string , groups [] string ) * cobra.Command {
167
266
cs , _ := test .SeedTestData (t , test.Data {Approvaltasks : approvaltasks , Namespaces : ns })
168
- p := & test.Params {ApprovalTask : cs .ApprovalTask , Kube : cs .Kube , Dynamic : dc , Username : username }
267
+ p := & test.Params {ApprovalTask : cs .ApprovalTask , Kube : cs .Kube , Dynamic : dc , Username : username , Groups : groups }
169
268
cs .ApprovalTask .Resources = cb .APIResourceList ("v1alpha1" , []string {"approvaltask" })
170
269
171
270
return Command (p )
0 commit comments