github.com/clerkinc/clerk-sdk-go@v1.49.1/clerk/email_addresses_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 TestEmailAddressesService_Create_HappyPath(t *testing.T) { 13 token := "token" 14 expectedResponse := unverifiedEmailAddressJSON 15 16 verified := false 17 primary := false 18 19 payload := CreateEmailAddressParams{ 20 UserID: "user_abcdefg", 21 EmailAddress: "banana@cherry.com", 22 Verified: &verified, 23 Primary: &primary, 24 } 25 26 client, mux, _, teardown := setup(token) 27 defer teardown() 28 29 url := "/email_addresses" 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 EmailAddress 38 _ = json.Unmarshal([]byte(expectedResponse), &want) 39 40 got, err := client.EmailAddresses().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 TestEmailAddressesService_Read_HappyPath(t *testing.T) { 49 token := "token" 50 emailAddressID := "idn_banana" 51 expectedResponse := unverifiedEmailAddressJSON 52 53 client, mux, _, teardown := setup(token) 54 defer teardown() 55 56 url := fmt.Sprintf("/email_addresses/%s", emailAddressID) 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 EmailAddress 65 _ = json.Unmarshal([]byte(expectedResponse), &want) 66 67 got, err := client.EmailAddresses().Read(emailAddressID) 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 TestEmailAddressesService_Update_HappyPath(t *testing.T) { 76 token := "token" 77 emailAddressID := "idn_banana" 78 expectedResponse := verifiedEmailAddressJSON 79 80 verified := true 81 primary := true 82 83 payload := UpdateEmailAddressParams{ 84 Verified: &verified, 85 Primary: &primary, 86 } 87 88 client, mux, _, teardown := setup(token) 89 defer teardown() 90 91 url := fmt.Sprintf("/email_addresses/%s", emailAddressID) 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 EmailAddress 100 _ = json.Unmarshal([]byte(expectedResponse), &want) 101 102 got, err := client.EmailAddresses().Update(emailAddressID, 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 TestEmailAddressesService_Delete_HappyPath(t *testing.T) { 111 token := "token" 112 emailAddressID := "idn_banana" 113 114 client, mux, _, teardown := setup(token) 115 defer teardown() 116 117 url := fmt.Sprintf("/email_addresses/%s", emailAddressID) 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": "email_address" }`, emailAddressID) 123 fmt.Fprint(w, response) 124 }) 125 126 want := DeleteResponse{ID: emailAddressID, Object: "email_address", Deleted: true} 127 128 got, _ := client.EmailAddresses().Delete(emailAddressID) 129 if !reflect.DeepEqual(*got, want) { 130 t.Errorf("Response = %v, want %v", *got, want) 131 } 132 } 133 134 const unverifiedEmailAddressJSON = `{ 135 "id": "idn_banana", 136 "object": "email_address", 137 "email_address": "banana@cherry.com", 138 "reserved": true, 139 "linked_to": [] 140 }` 141 142 const verifiedEmailAddressJSON = `{ 143 "id": "idn_banana", 144 "object": "email_address", 145 "email_address": "banana@cherry.com", 146 "reserved": true, 147 "verification": { 148 "status": "verified", 149 "strategy": "admin", 150 "attempts": null, 151 "expire_at": null 152 }, 153 "linked_to": [] 154 }`