github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/phonenumbers/user_test.go (about) 1 // Copyright 2018 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 package phonenumbers 4 5 import ( 6 "fmt" 7 "strings" 8 "testing" 9 10 "github.com/keybase/client/go/kbtest" 11 "github.com/keybase/client/go/libkb" 12 "github.com/keybase/client/go/protocol/keybase1" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestSetPhoneNumber(t *testing.T) { 17 tc := libkb.SetupTest(t, "TestPhoneNumbers", 1) 18 defer tc.Cleanup() 19 20 _, err := kbtest.CreateAndSignupFakeUser("phon", tc.G) 21 require.NoError(t, err) 22 23 // Generate a random phone number e.g. "14155552671". 24 randomNumber := kbtest.GenerateTestPhoneNumber() 25 // In strict format: "+14155552671". 26 phoneNumber := keybase1.PhoneNumber("+" + randomNumber) 27 // Create a representation likely to come from phone contact book: "+1-415-555-2671". 28 phoneFormatted := keybase1.RawPhoneNumber(fmt.Sprintf("+%s-%s-%s-%s", randomNumber[0:1], randomNumber[1:4], randomNumber[4:7], randomNumber[7:11])) 29 // Sanity check. 30 require.EqualValues(t, phoneNumber, strings.ReplaceAll(string(phoneFormatted), "-", "")) 31 32 t.Logf("Generated phone number: %q formatted as %q", phoneNumber, phoneFormatted) 33 34 mctx := libkb.NewMetaContextForTest(tc) 35 36 err = AddPhoneNumber(mctx, phoneNumber, keybase1.IdentityVisibility_PRIVATE) 37 require.NoError(t, err) 38 39 code, err := kbtest.GetPhoneVerificationCode(mctx, phoneNumber) 40 require.NoError(t, err) 41 t.Logf("Got verification code: %q", code) 42 43 err = VerifyPhoneNumber(mctx, phoneNumber, code) 44 require.NoError(t, err) 45 err = SetVisibilityPhoneNumber(mctx, phoneNumber, keybase1.IdentityVisibility_PUBLIC) 46 require.NoError(t, err) 47 48 resp, err := GetPhoneNumbers(mctx) 49 require.NoError(t, err) 50 require.Len(t, resp, 1) 51 require.Equal(t, phoneNumber, resp[0].PhoneNumber) 52 require.True(t, resp[0].Verified) 53 54 err = DeletePhoneNumber(mctx, phoneNumber) 55 require.NoError(t, err) 56 57 resp, err = GetPhoneNumbers(mctx) 58 require.NoError(t, err) 59 require.Len(t, resp, 0) 60 } 61 62 func TestDeleteSupersededNumber(t *testing.T) { 63 tc := libkb.SetupTest(t, "TestPhoneNumbers", 1) 64 defer tc.Cleanup() 65 66 mctx := libkb.NewMetaContextForTest(tc) 67 68 user1, err := kbtest.CreateAndSignupFakeUser("user1", tc.G) 69 require.NoError(t, err) 70 71 phoneNumber := keybase1.PhoneNumber("+15550123456") 72 73 err = AddPhoneNumber(mctx, phoneNumber, keybase1.IdentityVisibility_PRIVATE) 74 require.NoError(t, err) 75 76 // Verify phone on another user 77 _, err = kbtest.CreateAndSignupFakeUser("user2", tc.G) 78 require.NoError(t, err) 79 err = AddPhoneNumber(mctx, phoneNumber, keybase1.IdentityVisibility_PRIVATE) 80 require.NoError(t, err) 81 82 code, err := kbtest.GetPhoneVerificationCode(mctx, phoneNumber) 83 require.NoError(t, err) 84 t.Logf("Got verification code: %q", code) 85 err = VerifyPhoneNumber(mctx, phoneNumber, code) 86 require.NoError(t, err) 87 88 // Check it's superseded on user1 89 kbtest.Logout(tc) 90 err = user1.Login(tc.G) 91 require.NoError(t, err) 92 93 numbers, err := GetPhoneNumbers(mctx) 94 require.NoError(t, err) 95 require.Len(t, numbers, 1) 96 require.True(t, numbers[0].Superseded) 97 98 // Try adding again; superseded one should be deleted 99 err = AddPhoneNumber(mctx, phoneNumber, keybase1.IdentityVisibility_PRIVATE) 100 require.NoError(t, err) 101 numbers, err = GetPhoneNumbers(mctx) 102 require.NoError(t, err) 103 require.Len(t, numbers, 1) 104 require.False(t, numbers[0].Superseded) 105 } 106 107 func TestBadPhoneNumbers(t *testing.T) { 108 tc := libkb.SetupTest(t, "TestPhoneNumbers", 1) 109 defer tc.Cleanup() 110 111 _, err := kbtest.CreateAndSignupFakeUser("phon", tc.G) 112 require.NoError(t, err) 113 114 mctx := libkb.NewMetaContextForTest(tc) 115 require.Error(t, AddPhoneNumber(mctx, "14155552671", keybase1.IdentityVisibility_PUBLIC)) 116 require.Error(t, AddPhoneNumber(mctx, "014155552671", keybase1.IdentityVisibility_PUBLIC)) 117 require.Error(t, AddPhoneNumber(mctx, "784111222", keybase1.IdentityVisibility_PUBLIC)) 118 }