@@ -8,11 +8,13 @@ import (
8
8
"net/http"
9
9
"testing"
10
10
11
+ "github.com/golang-jwt/jwt/v4"
11
12
"github.com/stretchr/testify/assert"
12
13
"github.com/stretchr/testify/require"
13
14
14
15
"github.com/coder/coder/v2/coderd/audit"
15
16
"github.com/coder/coder/v2/coderd/coderdtest"
17
+ "github.com/coder/coder/v2/coderd/coderdtest/oidctest"
16
18
"github.com/coder/coder/v2/coderd/database"
17
19
"github.com/coder/coder/v2/codersdk"
18
20
"github.com/coder/coder/v2/cryptorand"
@@ -364,5 +366,61 @@ func TestScim(t *testing.T) {
364
366
require .Len (t , userRes .Users , 1 )
365
367
assert .Equal (t , codersdk .UserStatusSuspended , userRes .Users [0 ].Status )
366
368
})
369
+
370
+ t .Run ("ActiveIsActive" , func (t * testing.T ) {
371
+ t .Parallel ()
372
+
373
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
374
+ defer cancel ()
375
+
376
+ scimAPIKey := []byte ("hi" )
377
+
378
+ fake := oidctest .NewFakeIDP (t , oidctest .WithServing ())
379
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
380
+ Options : & coderdtest.Options {
381
+ OIDCConfig : fake .OIDCConfig (t , []string {}),
382
+ },
383
+ SCIMAPIKey : scimAPIKey ,
384
+ AuditLogging : true ,
385
+ LicenseOptions : & coderdenttest.LicenseOptions {
386
+ AccountID : "coolin" ,
387
+ Features : license.Features {
388
+ codersdk .FeatureSCIM : 1 ,
389
+ codersdk .FeatureAuditLog : 1 ,
390
+ },
391
+ },
392
+ })
393
+
394
+ sUser := makeScimUser (t )
395
+ res , err := client .Request (ctx , "POST" , "/scim/v2/Users" , sUser , setScimAuth (scimAPIKey ))
396
+ require .NoError (t , err )
397
+ defer res .Body .Close ()
398
+ assert .Equal (t , http .StatusOK , res .StatusCode )
399
+
400
+ err = json .NewDecoder (res .Body ).Decode (& sUser )
401
+ require .NoError (t , err )
402
+
403
+ scimUser , err := client .User (ctx , sUser .UserName )
404
+ require .NoError (t , err )
405
+ require .Equal (t , codersdk .UserStatusDormant , scimUser .Status , "user starts as dormant" )
406
+
407
+ scimUserClient , _ := fake .Login (t , client , jwt.MapClaims {
408
+ "email" : sUser .Emails [0 ].Value ,
409
+ })
410
+ scimUser , err = scimUserClient .User (ctx , codersdk .Me )
411
+ require .NoError (t , err )
412
+ require .Equal (t , codersdk .UserStatusActive , scimUser .Status , "user should now be active" )
413
+
414
+ // Patch the user
415
+ res , err = client .Request (ctx , "PATCH" , "/scim/v2/Users/" + sUser .ID , sUser , setScimAuth (scimAPIKey ))
416
+ require .NoError (t , err )
417
+ _ , _ = io .Copy (io .Discard , res .Body )
418
+ _ = res .Body .Close ()
419
+ assert .Equal (t , http .StatusOK , res .StatusCode )
420
+
421
+ scimUser , err = client .User (ctx , sUser .UserName )
422
+ require .NoError (t , err )
423
+ require .Equal (t , codersdk .UserStatusActive , scimUser .Status , "user is still active" )
424
+ })
367
425
})
368
426
}
0 commit comments