@@ -5,9 +5,10 @@ package tfe
5
5
6
6
import (
7
7
"context"
8
- "github.com/stretchr/testify/assert"
9
8
"testing"
10
9
10
+ "github.com/stretchr/testify/assert"
11
+
11
12
"github.com/stretchr/testify/require"
12
13
)
13
14
@@ -164,6 +165,102 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
164
165
}
165
166
})
166
167
168
+ t .Run ("with valid options for all 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 : & ProjectAccessPermissionsOptions {
175
+ Settings : ProjectSettingsPermission (ProjectSettingsPermissionUpdate ),
176
+ Teams : ProjectTeamsPermission (ProjectTeamsPermissionManage ),
177
+ },
178
+ WorkspaceAccess : & WorkspaceAccessPermissionsOptions {
179
+ Runs : WorkspaceRunsPermission (WorkspaceRunsPermissionApply ),
180
+ SentinelMocks : WorkspaceSentinelMocksPermission (WorkspaceSentinelMocksPermissionRead ),
181
+ StateVersions : WorkspaceStateVersionsPermission (WorkspaceStateVersionsPermissionWrite ),
182
+ Variables : WorkspaceVariablesPermission (WorkspaceVariablesPermissionWrite ),
183
+ Create : true ,
184
+ Locking : true ,
185
+ Move : true ,
186
+ Delete : false ,
187
+ RunTasks : false ,
188
+ },
189
+ }
190
+
191
+ tpa , err := client .TeamProjectAccess .Add (ctx , options )
192
+ defer func () {
193
+ err := client .TeamProjectAccess .Remove (ctx , tpa .ID )
194
+ if err != nil {
195
+ t .Logf ("error removing team access (%s): %s" , tpa .ID , err )
196
+ }
197
+ }()
198
+
199
+ require .NoError (t , err )
200
+
201
+ // Get a refreshed view from the API.
202
+ refreshed , err := client .TeamProjectAccess .Read (ctx , tpa .ID )
203
+ require .NoError (t , err )
204
+
205
+ for _ , item := range []* TeamProjectAccess {
206
+ tpa ,
207
+ refreshed ,
208
+ } {
209
+ assert .NotEmpty (t , item .ID )
210
+ assert .Equal (t , options .Access , item .Access )
211
+ assert .Equal (t , * options .ProjectAccess .Settings , item .ProjectAccess .ProjectSettingsPermission )
212
+ assert .Equal (t , * options .ProjectAccess .Teams , item .ProjectAccess .ProjectTeamsPermission )
213
+ assert .Equal (t , * options .WorkspaceAccess .Runs , item .WorkspaceAccess .WorkspaceRunsPermission )
214
+ assert .Equal (t , * options .WorkspaceAccess .SentinelMocks , item .WorkspaceAccess .WorkspaceSentinelMocksPermission )
215
+ assert .Equal (t , * options .WorkspaceAccess .StateVersions , item .WorkspaceAccess .WorkspaceStateVersionsPermission )
216
+ assert .Equal (t , * options .WorkspaceAccess .Variables , item .WorkspaceAccess .WorkspaceVariablesPermission )
217
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceCreatePermission , true )
218
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceLockingPermission , true )
219
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceMovePermission , true )
220
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceDeletePermission , false )
221
+ assert .Equal (t , item .WorkspaceAccess .WorkspaceRunTasksPermission , false )
222
+ }
223
+ })
224
+
225
+ t .Run ("with valid options for some custom TeamProject permissions" , func (t * testing.T ) {
226
+ skipUnlessBeta (t )
227
+ options := TeamProjectAccessAddOptions {
228
+ Access : * ProjectAccess (TeamProjectAccessCustom ),
229
+ Team : tmTest ,
230
+ Project : pTest ,
231
+ ProjectAccess : & ProjectAccessPermissionsOptions {
232
+ Settings : ProjectSettingsPermission (ProjectSettingsPermissionUpdate ),
233
+ },
234
+ WorkspaceAccess : & WorkspaceAccessPermissionsOptions {
235
+ Runs : WorkspaceRunsPermission (WorkspaceRunsPermissionApply ),
236
+ },
237
+ }
238
+
239
+ tpa , err := client .TeamProjectAccess .Add (ctx , options )
240
+ defer func () {
241
+ err := client .TeamProjectAccess .Remove (ctx , tpa .ID )
242
+ if err != nil {
243
+ t .Logf ("error removing team access (%s): %s" , tpa .ID , err )
244
+ }
245
+ }()
246
+
247
+ require .NoError (t , err )
248
+
249
+ // Get a refreshed view from the API.
250
+ refreshed , err := client .TeamProjectAccess .Read (ctx , tpa .ID )
251
+ require .NoError (t , err )
252
+
253
+ for _ , item := range []* TeamProjectAccess {
254
+ tpa ,
255
+ refreshed ,
256
+ } {
257
+ assert .NotEmpty (t , item .ID )
258
+ assert .Equal (t , options .Access , item .Access )
259
+ assert .Equal (t , * options .ProjectAccess .Settings , item .ProjectAccess .ProjectSettingsPermission )
260
+ assert .Equal (t , * options .WorkspaceAccess .Runs , item .WorkspaceAccess .WorkspaceRunsPermission )
261
+ }
262
+ })
263
+
167
264
t .Run ("when the team already has access to the project" , func (t * testing.T ) {
168
265
_ , tpaTestCleanup := createTeamProjectAccess (t , client , tmTest , pTest , nil )
169
266
defer tpaTestCleanup ()
@@ -205,6 +302,20 @@ func TestTeamProjectAccessesAdd(t *testing.T) {
205
302
assert .Equal (t , err , ErrRequiredProject )
206
303
})
207
304
305
+ t .Run ("when invalid custom project permission is provided in options" , func (t * testing.T ) {
306
+ skipUnlessBeta (t )
307
+ tpa , err := client .TeamProjectAccess .Add (ctx , TeamProjectAccessAddOptions {
308
+ Access : * ProjectAccess (TeamProjectAccessCustom ),
309
+ Team : tmTest ,
310
+ Project : pTest ,
311
+ ProjectAccess : & ProjectAccessPermissionsOptions {
312
+ Teams : ProjectTeamsPermission (badIdentifier ),
313
+ },
314
+ })
315
+ assert .Nil (t , tpa )
316
+ assert .Error (t , err )
317
+ })
318
+
208
319
t .Run ("when invalid access is provided in options" , func (t * testing.T ) {
209
320
tpa , err := client .TeamProjectAccess .Add (ctx , TeamProjectAccessAddOptions {
210
321
Access : badIdentifier ,
@@ -242,6 +353,101 @@ func TestTeamProjectAccessesUpdate(t *testing.T) {
242
353
243
354
assert .Equal (t , tpa .Access , TeamProjectAccessRead )
244
355
})
356
+
357
+ t .Run ("with valid custom permissions attributes for all permissions" , func (t * testing.T ) {
358
+ skipUnlessBeta (t )
359
+ options := TeamProjectAccessUpdateOptions {
360
+ Access : ProjectAccess (TeamProjectAccessCustom ),
361
+ ProjectAccess : & ProjectAccessPermissionsOptions {
362
+ Settings : ProjectSettingsPermission (ProjectSettingsPermissionUpdate ),
363
+ Teams : ProjectTeamsPermission (ProjectTeamsPermissionManage ),
364
+ },
365
+ WorkspaceAccess : & WorkspaceAccessPermissionsOptions {
366
+ Runs : WorkspaceRunsPermission (WorkspaceRunsPermissionPlan ),
367
+ SentinelMocks : WorkspaceSentinelMocksPermission (WorkspaceSentinelMocksPermissionNone ),
368
+ StateVersions : WorkspaceStateVersionsPermission (WorkspaceStateVersionsPermissionReadOutputs ),
369
+ Variables : WorkspaceVariablesPermission (WorkspaceVariablesPermissionRead ),
370
+ Create : false ,
371
+ Locking : false ,
372
+ Move : false ,
373
+ Delete : true ,
374
+ RunTasks : true ,
375
+ },
376
+ }
377
+
378
+ tpa , err := client .TeamProjectAccess .Update (ctx , tpaTest .ID , options )
379
+ require .NoError (t , err )
380
+
381
+ assert .Equal (t , tpa .Access , TeamProjectAccessCustom )
382
+ assert .Equal (t , * options .ProjectAccess .Teams , tpa .ProjectAccess .ProjectTeamsPermission )
383
+ assert .Equal (t , * options .ProjectAccess .Settings , tpa .ProjectAccess .ProjectSettingsPermission )
384
+ assert .Equal (t , * options .WorkspaceAccess .Runs , tpa .WorkspaceAccess .WorkspaceRunsPermission )
385
+ assert .Equal (t , * options .WorkspaceAccess .SentinelMocks , tpa .WorkspaceAccess .WorkspaceSentinelMocksPermission )
386
+ assert .Equal (t , * options .WorkspaceAccess .StateVersions , tpa .WorkspaceAccess .WorkspaceStateVersionsPermission )
387
+ assert .Equal (t , * options .WorkspaceAccess .Variables , tpa .WorkspaceAccess .WorkspaceVariablesPermission )
388
+ assert .Equal (t , false , tpa .WorkspaceAccess .WorkspaceCreatePermission )
389
+ assert .Equal (t , false , tpa .WorkspaceAccess .WorkspaceLockingPermission )
390
+ assert .Equal (t , false , tpa .WorkspaceAccess .WorkspaceMovePermission )
391
+ assert .Equal (t , true , tpa .WorkspaceAccess .WorkspaceDeletePermission )
392
+ assert .Equal (t , true , tpa .WorkspaceAccess .WorkspaceRunTasksPermission )
393
+ })
394
+
395
+ t .Run ("with valid custom permissions attributes for some permissions" , func (t * testing.T ) {
396
+ //create tpaCustomTest to verify unupdated attributes stay the same for custom permissions
397
+ // because going from admin to read to custom changes the values of all custom permissions
398
+ tm2Test , tm2TestCleanup := createTeam (t , client , orgTest )
399
+ defer tm2TestCleanup ()
400
+
401
+ // tpaCustomTest, tpaTestCustomCleanup := createTeamProjectAccess(t, client, tm2Test, pTest, orgTest)
402
+ // defer tpaTestCustomCleanup()
403
+ TpaOptions := TeamProjectAccessAddOptions {
404
+ Access : * ProjectAccess (TeamProjectAccessCustom ),
405
+ Team : tm2Test ,
406
+ Project : pTest ,
407
+ }
408
+
409
+ tpaCustomTest , err := client .TeamProjectAccess .Add (ctx , TpaOptions )
410
+ require .NoError (t , err )
411
+
412
+ skipUnlessBeta (t )
413
+ options := TeamProjectAccessUpdateOptions {
414
+ Access : ProjectAccess (TeamProjectAccessCustom ),
415
+ ProjectAccess : & ProjectAccessPermissionsOptions {
416
+ Teams : ProjectTeamsPermission (ProjectTeamsPermissionManage ),
417
+ },
418
+ WorkspaceAccess : & WorkspaceAccessPermissionsOptions {
419
+ Create : false ,
420
+ },
421
+ }
422
+
423
+ tpa , err := client .TeamProjectAccess .Update (ctx , tpaCustomTest .ID , options )
424
+ require .NoError (t , err )
425
+
426
+ assert .Equal (t , * options .ProjectAccess .Teams , tpa .ProjectAccess .ProjectTeamsPermission )
427
+ assert .Equal (t , false , tpa .WorkspaceAccess .WorkspaceCreatePermission )
428
+ // assert that other attributes remain the same
429
+ assert .Equal (t , tpaCustomTest .ProjectAccess .ProjectSettingsPermission , tpa .ProjectAccess .ProjectSettingsPermission )
430
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceLockingPermission , tpa .WorkspaceAccess .WorkspaceLockingPermission )
431
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceMovePermission , tpa .WorkspaceAccess .WorkspaceMovePermission )
432
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceDeletePermission , tpa .WorkspaceAccess .WorkspaceDeletePermission )
433
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceRunsPermission , tpa .WorkspaceAccess .WorkspaceRunsPermission )
434
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceSentinelMocksPermission , tpa .WorkspaceAccess .WorkspaceSentinelMocksPermission )
435
+ assert .Equal (t , tpaCustomTest .WorkspaceAccess .WorkspaceStateVersionsPermission , tpa .WorkspaceAccess .WorkspaceStateVersionsPermission )
436
+ })
437
+ t .Run ("with invalid custom permissions attributes" , func (t * testing.T ) {
438
+ skipUnlessBeta (t )
439
+ options := TeamProjectAccessUpdateOptions {
440
+ Access : ProjectAccess (TeamProjectAccessCustom ),
441
+ ProjectAccess : & ProjectAccessPermissionsOptions {
442
+ Teams : ProjectTeamsPermission (badIdentifier ),
443
+ },
444
+ }
445
+
446
+ tpa , err := client .TeamProjectAccess .Update (ctx , tpaTest .ID , options )
447
+
448
+ assert .Nil (t , tpa )
449
+ assert .Error (t , err )
450
+ })
245
451
}
246
452
247
453
func TestTeamProjectAccessesRemove (t * testing.T ) {
0 commit comments