github.com/clerkinc/clerk-sdk-go@v1.49.1/clerk/phone_numbers_test.go (about) 1 package clerk 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/stretchr/testify/assert" 7 "net/http" 8 "reflect" 9 "testing" 10 ) 11 12 func TestPhoneNumbersService_Create_HappyPath(t *testing.T) { 13 token := "token" 14 expectedResponse := unverifiedPhoneNumberJSON 15 16 verified := false 17 primary := false 18 19 payload := CreatePhoneNumberParams{ 20 UserID: "user_abcdefg", 21 PhoneNumber: "+15555555555", 22 Verified: &verified, 23 Primary: &primary, 24 } 25 26 client, mux, _, teardown := setup(token) 27 defer teardown() 28 29 url := "/phone_numbers" 30 31 mux.HandleFunc(url, func(w http.ResponseWriter, req *http.Request) { 32 testHttpMethod(t, req, "POST") 33 testHeader(t, req, "Authorization", "Bearer "+token) 34 fmt.Fprint(w, expectedResponse) 35 }) 36 37 var want PhoneNumber 38 _ = json.Unmarshal([]byte(expectedResponse), &want) 39 40 got, err := client.PhoneNumbers().Create(payload) 41 assert.Nil(t, err) 42 43 if !reflect.DeepEqual(*got, want) { 44 t.Errorf("Response = %v, want %v", got, want) 45 } 46 } 47 48 func TestPhoneNumbersService_Read_HappyPath(t *testing.T) { 49 token := "token" 50 phoneNumberID := "idn_banana" 51 expectedResponse := unverifiedPhoneNumberJSON 52 53 client, mux, _, teardown := setup(token) 54 defer teardown() 55 56 url := fmt.Sprintf("/phone_numbers/%s", phoneNumberID) 57 58 mux.HandleFunc(url, func(w http.ResponseWriter, req *http.Request) { 59 testHttpMethod(t, req, "GET") 60 testHeader(t, req, "Authorization", "Bearer "+token) 61 fmt.Fprint(w, expectedResponse) 62 }) 63 64 var want PhoneNumber 65 _ = json.Unmarshal([]byte(expectedResponse), &want) 66 67 got, err := client.PhoneNumbers().Read(phoneNumberID) 68 assert.Nil(t, err) 69 70 if !reflect.DeepEqual(*got, want) { 71 t.Errorf("Response = %v, want %v", got, want) 72 } 73 } 74 75 func TestPhoneNumbersService_Update_HappyPath(t *testing.T) { 76 token := "token" 77 phoneNumberID := "idn_banana" 78 expectedResponse := verifiedPhoneNumberJSON 79 80 verified := true 81 primary := true 82 83 payload := UpdatePhoneNumberParams{ 84 Verified: &verified, 85 Primary: &primary, 86 } 87 88 client, mux, _, teardown := setup(token) 89 defer teardown() 90 91 url := fmt.Sprintf("/phone_numbers/%s", phoneNumberID) 92 93 mux.HandleFunc(url, func(w http.ResponseWriter, req *http.Request) { 94 testHttpMethod(t, req, "PATCH") 95 testHeader(t, req, "Authorization", "Bearer "+token) 96 fmt.Fprint(w, expectedResponse) 97 }) 98 99 var want PhoneNumber 100 _ = json.Unmarshal([]byte(expectedResponse), &want) 101 102 got, err := client.PhoneNumbers().Update(phoneNumberID, payload) 103 assert.Nil(t, err) 104 105 if !reflect.DeepEqual(*got, want) { 106 t.Errorf("Response = %v, want %v", got, want) 107 } 108 } 109 110 func TestPhoneNumbersService_Delete_HappyPath(t *testing.T) { 111 token := "token" 112 phoneNumberID := "idn_banana" 113 114 client, mux, _, teardown := setup(token) 115 defer teardown() 116 117 url := fmt.Sprintf("/phone_numbers/%s", phoneNumberID) 118 119 mux.HandleFunc(url, func(w http.ResponseWriter, req *http.Request) { 120 testHttpMethod(t, req, "DELETE") 121 testHeader(t, req, "Authorization", "Bearer "+token) 122 response := fmt.Sprintf(`{ "deleted": true, "id": "%v", "object": "phone_number" }`, phoneNumberID) 123 fmt.Fprint(w, response) 124 }) 125 126 want := DeleteResponse{ID: phoneNumberID, Object: "phone_number", Deleted: true} 127 128 got, _ := client.PhoneNumbers().Delete(phoneNumberID) 129 if !reflect.DeepEqual(*got, want) { 130 t.Errorf("Response = %v, want %v", *got, want) 131 } 132 } 133 134 const unverifiedPhoneNumberJSON = `{ 135 "id": "idn_avocado", 136 "object": "phone_number", 137 "phone_number": "+15555555555", 138 "reserved_for_second_factor": false, 139 "default_second_factor": false, 140 "reserved": false, 141 "linked_to": [], 142 "backup_codes": null 143 }` 144 145 const verifiedPhoneNumberJSON = `{ 146 "id": "idn_avocado", 147 "object": "phone_number", 148 "phone_number": "+15555555555", 149 "reserved_for_second_factor": false, 150 "default_second_factor": false, 151 "reserved": false, 152 "verification": { 153 "status": "verified", 154 "strategy": "admin", 155 "attempts": null, 156 "expire_at": null 157 }, 158 "linked_to": [], 159 "backup_codes": null 160 }`