@@ -165,6 +165,58 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
165
165
}
166
166
})
167
167
168
+ t .Run ("with no project access options for custom TeamProject permissions" , func (t * testing.T ) {
169
+ skipUnlessBeta (t )
170
+ options := TeamProjectAccessAddOptions {
171
+ Access : * ProjectAccess (TeamProjectAccessCustom ),
172
+ Team : tmTest ,
173
+ Project : pTest ,
174
+ ProjectAccess : & TeamProjectAccessProjectPermissionsOptions {},
175
+ WorkspaceAccess : & TeamProjectAccessWorkspacePermissionsOptions {
176
+ Runs : WorkspaceRunsPermission (WorkspaceRunsPermissionApply ),
177
+ SentinelMocks : WorkspaceSentinelMocksPermission (WorkspaceSentinelMocksPermissionRead ),
178
+ StateVersions : WorkspaceStateVersionsPermission (WorkspaceStateVersionsPermissionWrite ),
179
+ Variables : WorkspaceVariablesPermission (WorkspaceVariablesPermissionWrite ),
180
+ Create : Bool (true ),
181
+ Locking : Bool (true ),
182
+ Move : Bool (true ),
183
+ Delete : Bool (false ),
184
+ RunTasks : Bool (false ),
185
+ },
186
+ }
187
+
188
+ tpa , err := client .TeamProjectAccess .Add (ctx , options )
189
+ defer func () {
190
+ err := client .TeamProjectAccess .Remove (ctx , tpa .ID )
191
+ if err != nil {
192
+ t .Logf ("error removing team access (%s): %s" , tpa .ID , err )
193
+ }
194
+ }()
195
+
196
+ require .NoError (t , err )
197
+
198
+ // Get a refreshed view from the API.
199
+ refreshed , err := client .TeamProjectAccess .Read (ctx , tpa .ID )
200
+ require .NoError (t , err )
201
+
202
+ for _ , item := range []* TeamProjectAccess {
203
+ tpa ,
204
+ refreshed ,
205
+ } {
206
+ assert .NotEmpty (t , item .ID )
207
+ assert .Equal (t , options .Access , item .Access )
208
+ assert .Equal (t , * options .WorkspaceAccess .Runs , item .WorkspaceAccess .WorkspaceRunsPermission )
209
+ assert .Equal (t , * options .WorkspaceAccess .SentinelMocks , item .WorkspaceAccess .WorkspaceSentinelMocksPermission )
210
+ assert .Equal (t , * options .WorkspaceAccess .StateVersions , item .WorkspaceAccess .WorkspaceStateVersionsPermission )
211
+ assert .Equal (t , * options .WorkspaceAccess .Variables , item .WorkspaceAccess .WorkspaceVariablesPermission )
212
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceCreatePermission , true )
213
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceLockingPermission , true )
214
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceMovePermission , true )
215
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceDeletePermission , false )
216
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceRunTasksPermission , false )
217
+ }
218
+ })
219
+
168
220
t .Run ("with valid options for all custom TeamProject permissions" , func (t * testing.T ) {
169
221
options := TeamProjectAccessAddOptions {
170
222
Access : * ProjectAccess (TeamProjectAccessCustom ),
@@ -221,6 +273,45 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
221
273
}
222
274
})
223
275
276
+ t .Run ("with valid options for custom variable sets permissions" , func (t * testing.T ) {
277
+ skipUnlessBeta (t )
278
+ options := TeamProjectAccessAddOptions {
279
+ Access : * ProjectAccess (TeamProjectAccessCustom ),
280
+ Team : tmTest ,
281
+ Project : pTest ,
282
+ ProjectAccess : & TeamProjectAccessProjectPermissionsOptions {
283
+ VariableSets : ProjectVariableSetsPermission (ProjectVariableSetsPermissionWrite ),
284
+ },
285
+ WorkspaceAccess : & TeamProjectAccessWorkspacePermissionsOptions {
286
+ Runs : WorkspaceRunsPermission (WorkspaceRunsPermissionApply ),
287
+ },
288
+ }
289
+
290
+ tpa , err := client .TeamProjectAccess .Add (ctx , options )
291
+ t .Cleanup (func () {
292
+ err := client .TeamProjectAccess .Remove (ctx , tpa .ID )
293
+ if err != nil {
294
+ t .Logf ("error removing team access (%s): %s" , tpa .ID , err )
295
+ }
296
+ })
297
+
298
+ require .NoError (t , err )
299
+
300
+ // Get a refreshed view from the API.
301
+ refreshed , err := client .TeamProjectAccess .Read (ctx , tpa .ID )
302
+ require .NoError (t , err )
303
+
304
+ for _ , item := range []* TeamProjectAccess {
305
+ tpa ,
306
+ refreshed ,
307
+ } {
308
+ assert .NotEmpty (t , item .ID )
309
+ assert .Equal (t , options .Access , item .Access )
310
+ assert .Equal (t , * options .ProjectAccess .VariableSets , item .ProjectAccess .ProjectVariableSetsPermission )
311
+ assert .Equal (t , * options .WorkspaceAccess .Runs , item .WorkspaceAccess .WorkspaceRunsPermission )
312
+ }
313
+ })
314
+
224
315
t .Run ("with valid options for some custom TeamProject permissions" , func (t * testing.T ) {
225
316
options := TeamProjectAccessAddOptions {
226
317
Access : * ProjectAccess (TeamProjectAccessCustom ),
@@ -389,6 +480,48 @@ func TestTeamProjectAccessesUpdate(t *testing.T) {
389
480
assert .Equal (t , true , tpa .WorkspaceAccess .WorkspaceRunTasksPermission )
390
481
})
391
482
483
+ t .Run ("with valid custom permissions attributes for variable sets permissions" , func (t * testing.T ) {
484
+ skipUnlessBeta (t )
485
+ // create tpaCustomTest to verify unupdated attributes stay the same for custom permissions
486
+ // because going from admin to read to custom changes the values of all custom permissions
487
+ tm2Test , tm2TestCleanup := createTeam (t , client , orgTest )
488
+ defer tm2TestCleanup ()
489
+
490
+ TpaOptions := TeamProjectAccessAddOptions {
491
+ Access : * ProjectAccess (TeamProjectAccessCustom ),
492
+ Team : tm2Test ,
493
+ Project : pTest ,
494
+ }
495
+
496
+ tpaCustomTest , err := client .TeamProjectAccess .Add (ctx , TpaOptions )
497
+ require .NoError (t , err )
498
+
499
+ options := TeamProjectAccessUpdateOptions {
500
+ Access : ProjectAccess (TeamProjectAccessCustom ),
501
+ ProjectAccess : & TeamProjectAccessProjectPermissionsOptions {
502
+ VariableSets : ProjectVariableSetsPermission (ProjectVariableSetsPermissionRead ),
503
+ },
504
+ WorkspaceAccess : & TeamProjectAccessWorkspacePermissionsOptions {
505
+ Create : Bool (false ),
506
+ },
507
+ }
508
+
509
+ tpa , err := client .TeamProjectAccess .Update (ctx , tpaCustomTest .ID , options )
510
+ require .NoError (t , err )
511
+ require .NotNil (t , options .ProjectAccess )
512
+ require .NotNil (t , options .WorkspaceAccess )
513
+ assert .Equal (t , * options .ProjectAccess .VariableSets , tpa .ProjectAccess .ProjectVariableSetsPermission )
514
+ assert .Equal (t , false , tpa .WorkspaceAccess .WorkspaceCreatePermission )
515
+ // assert that other attributes remain the same
516
+ assert .Equal (t , tpaCustomTest .ProjectAccess .ProjectSettingsPermission , tpa .ProjectAccess .ProjectSettingsPermission )
517
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceLockingPermission , tpa .WorkspaceAccess .WorkspaceLockingPermission )
518
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceMovePermission , tpa .WorkspaceAccess .WorkspaceMovePermission )
519
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceDeletePermission , tpa .WorkspaceAccess .WorkspaceDeletePermission )
520
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceRunsPermission , tpa .WorkspaceAccess .WorkspaceRunsPermission )
521
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceSentinelMocksPermission , tpa .WorkspaceAccess .WorkspaceSentinelMocksPermission )
522
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceStateVersionsPermission , tpa .WorkspaceAccess .WorkspaceStateVersionsPermission )
523
+ })
524
+
392
525
t .Run ("with valid custom permissions attributes for some permissions" , func (t * testing.T ) {
393
526
// create tpaCustomTest to verify unupdated attributes stay the same for custom permissions
394
527
// because going from admin to read to custom changes the values of all custom permissions
@@ -429,6 +562,7 @@ func TestTeamProjectAccessesUpdate(t *testing.T) {
429
562
assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceSentinelMocksPermission , tpa .WorkspaceAccess .WorkspaceSentinelMocksPermission )
430
563
assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceStateVersionsPermission , tpa .WorkspaceAccess .WorkspaceStateVersionsPermission )
431
564
})
565
+
432
566
t .Run ("with invalid custom permissions attributes" , func (t * testing.T ) {
433
567
options := TeamProjectAccessUpdateOptions {
434
568
Access : ProjectAccess (TeamProjectAccessCustom ),
0 commit comments