@@ -603,6 +603,8 @@ func TestUserOAuth2Github(t *testing.T) {
603
603
604
604
require .Equal (t ,http .StatusUnauthorized ,resp .StatusCode )
605
605
})
606
+
607
+ // The bug only is exercised when a deleted user with the same linked_id exists.
606
608
t .Run ("ChangedEmail" ,func (t * testing.T ) {
607
609
t .Parallel ()
608
610
@@ -627,7 +629,7 @@ func TestUserOAuth2Github(t *testing.T) {
627
629
coderEmail ,
628
630
}
629
631
630
- client := coderdtest .New (t ,& coderdtest.Options {
632
+ owner := coderdtest .New (t ,& coderdtest.Options {
631
633
Auditor :auditor ,
632
634
GithubOAuth2Config :& coderd.GithubOAuth2Config {
633
635
AllowSignups :true ,
@@ -650,9 +652,19 @@ func TestUserOAuth2Github(t *testing.T) {
650
652
},
651
653
},
652
654
})
655
+ coderdtest .CreateFirstUser (t ,owner )
656
+
657
+ ctx := testutil .Context (t ,testutil .WaitLong )
658
+ // Create the user, then delete the user, then create again.
659
+ // This causes the email change to fail.
660
+ client := codersdk .New (owner .URL )
653
661
654
- ctx := testutil .Context (t ,testutil .WaitMedium )
655
- // This should register the user
662
+ client ,_ = fake .Login (t ,client , jwt.MapClaims {})
663
+ deleted ,err := client .User (ctx ,"me" )
664
+ err = owner .DeleteUser (ctx ,deleted .ID )
665
+ require .NoError (t ,err )
666
+
667
+ // Create the user again.
656
668
client ,_ = fake .Login (t ,client , jwt.MapClaims {})
657
669
user ,err := client .User (ctx ,"me" )
658
670
require .NoError (t ,err )
@@ -666,7 +678,8 @@ func TestUserOAuth2Github(t *testing.T) {
666
678
client ,_ = fake .Login (t ,client , jwt.MapClaims {})
667
679
user ,err = client .User (ctx ,"me" )
668
680
require .NoError (t ,err )
669
- require .Equal (t ,user .ID ,userID )
681
+
682
+ require .Equal (t ,user .ID ,userID ,"user_id is different, a new user was likely created" )
670
683
require .Equal (t ,user .Email ,* gmailEmail .Email )
671
684
672
685
// Entirely change emails.
@@ -681,7 +694,8 @@ func TestUserOAuth2Github(t *testing.T) {
681
694
client ,_ = fake .Login (t ,client , jwt.MapClaims {})
682
695
user ,err = client .User (ctx ,"me" )
683
696
require .NoError (t ,err )
684
- require .Equal (t ,user .ID ,userID )
697
+
698
+ require .Equal (t ,user .ID ,userID ,"user_id is different, a new user was likely created" )
685
699
require .Equal (t ,user .Email ,newEmail )
686
700
})
687
701
}