github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/systests/email_notification_test.go (about) 1 package systests 2 3 import ( 4 "testing" 5 6 "github.com/keybase/client/go/client" 7 8 "github.com/keybase/client/go/kbtest" 9 "github.com/keybase/client/go/libkb" 10 "github.com/keybase/client/go/protocol/keybase1" 11 "github.com/stretchr/testify/require" 12 ) 13 14 type mockEmailNotification struct { 15 list []keybase1.Email 16 category string 17 email keybase1.EmailAddress 18 } 19 20 type mockEmailListener struct { 21 libkb.NoopNotifyListener 22 verifiedEmails []keybase1.EmailAddress 23 changeNotifications []mockEmailNotification 24 } 25 26 var _ libkb.NotifyListener = (*mockEmailListener)(nil) 27 28 func (n *mockEmailListener) EmailAddressVerified(emailAddress keybase1.EmailAddress) { 29 n.verifiedEmails = append(n.verifiedEmails, emailAddress) 30 } 31 32 func (n *mockEmailListener) EmailsChanged(list []keybase1.Email, category string, email keybase1.EmailAddress) { 33 n.changeNotifications = append(n.changeNotifications, mockEmailNotification{ 34 list: list, 35 category: category, 36 email: email, 37 }) 38 } 39 40 func setupUserWithMockEmailListener(user *userPlusDevice) *mockEmailListener { 41 userListener := &mockEmailListener{} 42 user.tc.G.SetService() 43 user.tc.G.NotifyRouter.AddListener(userListener) 44 return userListener 45 } 46 47 func TestEmailVerificationNotifications(t *testing.T) { 48 tt := newTeamTester(t) 49 defer tt.cleanup() 50 51 bob := tt.addUser("bob") 52 email := bob.userInfo.email 53 bobListener := setupUserWithMockEmailListener(bob) 54 55 // verifying an email address fires off an "email.verified" notification with the email 56 err := kbtest.VerifyEmailAuto(bob.MetaContext(), keybase1.EmailAddress(email)) 57 require.NoError(t, err) 58 bob.drainGregor() 59 expectedNotification := []keybase1.EmailAddress{keybase1.EmailAddress(email)} 60 require.Equal(t, bobListener.verifiedEmails, expectedNotification) 61 } 62 63 func TestEmailChangeNotifications(t *testing.T) { 64 tt := newTeamTester(t) 65 defer tt.cleanup() 66 67 bob := tt.addUser("bob") 68 bobListener := setupUserWithMockEmailListener(bob) 69 70 // Create new random email that we will add 71 sinfo := randomUser("") 72 73 cmd := client.CmdAddEmail{Contextified: libkb.NewContextified(bob.tc.G)} 74 cmd.Email = sinfo.email 75 cmd.Visibility = keybase1.IdentityVisibility_PRIVATE 76 err := cmd.Run() 77 require.NoError(t, err) 78 79 bob.drainGregor() 80 require.Len(t, bobListener.changeNotifications, 1) 81 change := bobListener.changeNotifications[0] 82 require.Equal(t, "email.added", change.category) 83 require.EqualValues(t, sinfo.email, change.email) 84 require.Len(t, change.list, 2) 85 }