github.com/clerkinc/clerk-sdk-go@v1.49.1/clerk/verification_test.go (about)

     1  package clerk
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  	"net/url"
     8  	"reflect"
     9  	"testing"
    10  )
    11  
    12  func TestVerificationService_Verify_useSessionId(t *testing.T) {
    13  	apiToken := "apiToken"
    14  	sessionId := "someSessionId"
    15  	sessionToken := "someSessionToken"
    16  	request := setupRequest(&sessionId, &sessionToken)
    17  
    18  	client, mux, _, teardown := setup(apiToken)
    19  	defer teardown()
    20  
    21  	expectedResponse := dummySessionJson
    22  
    23  	mux.HandleFunc("/sessions/"+sessionId+"/verify", func(w http.ResponseWriter, req *http.Request) {
    24  		testHttpMethod(t, req, "POST")
    25  		testHeader(t, req, "Authorization", "Bearer "+apiToken)
    26  		fmt.Fprint(w, expectedResponse)
    27  	})
    28  
    29  	got, err := client.Verification().Verify(request)
    30  	if err != nil {
    31  		t.Errorf("Was not expecting error to be returned, got %v instead", err)
    32  	}
    33  
    34  	var want Session
    35  	_ = json.Unmarshal([]byte(expectedResponse), &want)
    36  
    37  	if !reflect.DeepEqual(*got, want) {
    38  		t.Errorf("Response = %v, want %v", *got, want)
    39  	}
    40  }
    41  
    42  func TestVerificationService_Verify_handleServerErrorWhenUsingSessionId(t *testing.T) {
    43  	sessionId := "someSessionId"
    44  	sessionToken := "someSessionToken"
    45  	request := setupRequest(&sessionId, &sessionToken)
    46  
    47  	client, mux, _, teardown := setup("apiToken")
    48  	defer teardown()
    49  
    50  	mux.HandleFunc("/sessions/"+sessionId+"/verify", func(w http.ResponseWriter, req *http.Request) {
    51  		testHttpMethod(t, req, "POST")
    52  		w.WriteHeader(400)
    53  	})
    54  
    55  	_, err := client.Verification().Verify(request)
    56  	if err == nil {
    57  		t.Errorf("Was expecting error to be returned")
    58  	}
    59  }
    60  
    61  func TestVerificationService_Verify_useClientActiveSession(t *testing.T) {
    62  	apiToken := "apiToken"
    63  	sessionToken := "someSessionToken"
    64  	request := setupRequest(nil, &sessionToken)
    65  
    66  	client, mux, _, teardown := setup(apiToken)
    67  	defer teardown()
    68  
    69  	clientResponseJson := dummyClientResponseJson
    70  	var clientResponse ClientResponse
    71  	_ = json.Unmarshal([]byte(clientResponseJson), &clientResponse)
    72  
    73  	sessionJson := dummySessionJson
    74  
    75  	mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) {
    76  		testHttpMethod(t, req, "POST")
    77  		testHeader(t, req, "Authorization", "Bearer "+apiToken)
    78  		fmt.Fprint(w, clientResponseJson)
    79  	})
    80  
    81  	got, err := client.Verification().Verify(request)
    82  	if err != nil {
    83  		t.Errorf("Was not expecting error to be returned, got %v instead", err)
    84  	}
    85  
    86  	var want Session
    87  	_ = json.Unmarshal([]byte(sessionJson), &want)
    88  
    89  	if !reflect.DeepEqual(*got, want) {
    90  		t.Errorf("Response = %v, want %v", *got, want)
    91  	}
    92  }
    93  
    94  func TestVerificationService_Verify_handleServerErrorWhenUsingClientActiveSession(t *testing.T) {
    95  	sessionToken := "someSessionToken"
    96  	request := setupRequest(nil, &sessionToken)
    97  
    98  	client, mux, _, teardown := setup("apiToken")
    99  	defer teardown()
   100  
   101  	mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) {
   102  		testHttpMethod(t, req, "POST")
   103  		w.WriteHeader(400)
   104  	})
   105  
   106  	_, err := client.Verification().Verify(request)
   107  	if err == nil {
   108  		t.Errorf("Was expecting error to be returned")
   109  	}
   110  }
   111  
   112  func TestVerificationService_Verify_noActiveSessionWhenUsingClientActiveSession(t *testing.T) {
   113  	apiToken := "apiToken"
   114  	sessionToken := "someSessionToken"
   115  	request := setupRequest(nil, &sessionToken)
   116  
   117  	client, mux, _, teardown := setup(apiToken)
   118  	defer teardown()
   119  
   120  	var clientResponse ClientResponse
   121  	_ = json.Unmarshal([]byte(dummyClientResponseJson), &clientResponse)
   122  	clientResponse.LastActiveSessionID = nil
   123  
   124  	mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) {
   125  		testHttpMethod(t, req, "POST")
   126  		jsonResp, _ := json.Marshal(clientResponse)
   127  		fmt.Fprint(w, string(jsonResp))
   128  	})
   129  
   130  	_, err := client.Verification().Verify(request)
   131  	if err == nil {
   132  		t.Errorf("Was expecting error to be returned")
   133  	}
   134  }
   135  
   136  func TestVerificationService_Verify_activeSessionNotIncludedInSessions(t *testing.T) {
   137  	apiToken := "apiToken"
   138  	sessionToken := "someSessionToken"
   139  	request := setupRequest(nil, &sessionToken)
   140  
   141  	client, mux, _, teardown := setup(apiToken)
   142  	defer teardown()
   143  
   144  	var clientResponse ClientResponse
   145  	_ = json.Unmarshal([]byte(dummyClientResponseJson), &clientResponse)
   146  	clientResponse.Sessions = make([]*Session, 0)
   147  
   148  	mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) {
   149  		testHttpMethod(t, req, "POST")
   150  		jsonResp, _ := json.Marshal(clientResponse)
   151  		fmt.Fprint(w, string(jsonResp))
   152  	})
   153  
   154  	_, err := client.Verification().Verify(request)
   155  	if err == nil {
   156  		t.Errorf("Was expecting error to be returned")
   157  	}
   158  }
   159  
   160  func TestVerificationService_Verify_notFailForEmptyRequest(t *testing.T) {
   161  	client, _, _, teardown := setup("apiToken")
   162  	defer teardown()
   163  
   164  	session, err := client.Verification().Verify(nil)
   165  	if err == nil {
   166  		t.Errorf("Expected error to be returned")
   167  	}
   168  
   169  	if session != nil {
   170  		t.Errorf("Expected no session to returned, got %v instead", session)
   171  	}
   172  }
   173  
   174  func TestVerificationService_Verify_noSessionCookie(t *testing.T) {
   175  	client, _, _, teardown := setup("apiToken")
   176  	defer teardown()
   177  
   178  	request := setupRequest(nil, nil)
   179  
   180  	session, err := client.Verification().Verify(request)
   181  	if err == nil {
   182  		t.Errorf("Expected error to be returned")
   183  	}
   184  
   185  	if session != nil {
   186  		t.Errorf("Expected no session to returned, got %v instead", session)
   187  	}
   188  }
   189  
   190  func setupRequest(sessionId, sessionToken *string) *http.Request {
   191  	var request http.Request
   192  	request.Method = "GET"
   193  
   194  	url := url.URL{
   195  		Scheme: "http",
   196  		Host:   "host.com",
   197  		Path:   "/path",
   198  	}
   199  	request.URL = &url
   200  
   201  	if sessionToken != nil {
   202  		// add session token as cookie
   203  		sessionCookie := http.Cookie{
   204  			Name:  CookieSession,
   205  			Value: *sessionToken,
   206  		}
   207  		request.Header = make(map[string][]string)
   208  		request.AddCookie(&sessionCookie)
   209  	}
   210  
   211  	if sessionId != nil {
   212  		// add session id as query parameter
   213  		addQueryParam(&request, QueryParamSessionId, *sessionId)
   214  	}
   215  
   216  	return &request
   217  }
   218  
   219  func addQueryParam(req *http.Request, key, value string) {
   220  	url := req.URL
   221  	query := url.Query()
   222  	query.Add(key, value)
   223  	url.RawQuery = query.Encode()
   224  }