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  }`