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