@@ -4349,3 +4349,51 @@ func TestWorkspaceTimings(t *testing.T) {
4349
4349
require .Contains (t ,err .Error (),"not found" )
4350
4350
})
4351
4351
}
4352
+
4353
+ // TestOIDCRemoved emulates a user logging in with OIDC, then that OIDC
4354
+ // auth method being removed.
4355
+ func TestOIDCRemoved (t * testing.T ) {
4356
+ t .Parallel ()
4357
+
4358
+ owner ,db := coderdtest .NewWithDatabase (t ,& coderdtest.Options {
4359
+ IncludeProvisionerDaemon :true ,
4360
+ })
4361
+ first := coderdtest .CreateFirstUser (t ,owner )
4362
+
4363
+ user ,userData := coderdtest .CreateAnotherUser (t ,owner ,first .OrganizationID ,rbac .ScopedRoleOrgAdmin (first .OrganizationID ))
4364
+
4365
+ ctx := testutil .Context (t ,testutil .WaitMedium )
4366
+ //nolint:gocritic // unit test
4367
+ _ ,err := db .UpdateUserLoginType (dbauthz .AsSystemRestricted (ctx ), database.UpdateUserLoginTypeParams {
4368
+ NewLoginType :database .LoginTypeOIDC ,
4369
+ UserID :userData .ID ,
4370
+ })
4371
+ require .NoError (t ,err )
4372
+
4373
+ //nolint:gocritic // unit test
4374
+ _ ,err = db .InsertUserLink (dbauthz .AsSystemRestricted (ctx ), database.InsertUserLinkParams {
4375
+ UserID :userData .ID ,
4376
+ LoginType :database .LoginTypeOIDC ,
4377
+ LinkedID :"random" ,
4378
+ OAuthAccessToken :"foobar" ,
4379
+ OAuthAccessTokenKeyID : sql.NullString {},
4380
+ OAuthRefreshToken :"refresh" ,
4381
+ OAuthRefreshTokenKeyID : sql.NullString {},
4382
+ OAuthExpiry :time .Now ().Add (time .Hour * - 1 ),
4383
+ Claims : database.UserLinkClaims {},
4384
+ })
4385
+ require .NoError (t ,err )
4386
+
4387
+ version := coderdtest .CreateTemplateVersion (t ,owner ,first .OrganizationID ,nil )
4388
+ _ = coderdtest .AwaitTemplateVersionJobCompleted (t ,owner ,version .ID )
4389
+ template := coderdtest .CreateTemplate (t ,owner ,first .OrganizationID ,version .ID )
4390
+
4391
+ wrk := coderdtest .CreateWorkspace (t ,user ,template .ID )
4392
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t ,owner ,wrk .LatestBuild .ID )
4393
+
4394
+ deleteBuild ,err := owner .CreateWorkspaceBuild (ctx ,wrk .ID , codersdk.CreateWorkspaceBuildRequest {
4395
+ Transition :codersdk .WorkspaceTransitionDelete ,
4396
+ })
4397
+ require .NoError (t ,err ,"delete the workspace" )
4398
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t ,owner ,deleteBuild .ID )
4399
+ }