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

     1  package clerk
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  	"net/http"
     9  	"net/url"
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  func TestSessionsService_ListAll_happyPath_noParams(t *testing.T) {
    15  	client, mux, _, teardown := setup("token")
    16  	defer teardown()
    17  
    18  	expectedResponse := "[" + dummySessionJson + "]"
    19  
    20  	mux.HandleFunc("/sessions", func(w http.ResponseWriter, req *http.Request) {
    21  		testHttpMethod(t, req, "GET")
    22  		testHeader(t, req, "Authorization", "Bearer token")
    23  		fmt.Fprint(w, expectedResponse)
    24  	})
    25  
    26  	var want []Session
    27  	_ = json.Unmarshal([]byte(expectedResponse), &want)
    28  
    29  	got, _ := client.Sessions().ListAll()
    30  	if len(got) != len(want) {
    31  		t.Errorf("Was expecting %d sessions to be returned, instead got %d", len(want), len(got))
    32  	}
    33  
    34  	if !reflect.DeepEqual(got, want) {
    35  		t.Errorf("Response = %v, want %v", got, want)
    36  	}
    37  }
    38  
    39  func TestSessionsService_ListAll_pagination_and_filtering_params(t *testing.T) {
    40  	client, mux, _, teardown := setup("token")
    41  	defer teardown()
    42  
    43  	expectedResponse := "[" + dummySessionJson + "]"
    44  
    45  	mux.HandleFunc("/sessions", func(w http.ResponseWriter, req *http.Request) {
    46  		testHttpMethod(t, req, "GET")
    47  		testHeader(t, req, "Authorization", "Bearer token")
    48  
    49  		queryParams := url.Values{
    50  			"limit":     {},
    51  			"offset":    {},
    52  			"client_id": {},
    53  			"user_id":   {},
    54  			"status":    {},
    55  		}
    56  
    57  		testQuery(t, req, queryParams)
    58  		fmt.Fprint(w, expectedResponse)
    59  	})
    60  
    61  	var want []Session
    62  	_ = json.Unmarshal([]byte(expectedResponse), &want)
    63  
    64  	limit := 2
    65  	offset := 2
    66  	status := SessionStatusEnded
    67  	userId := "user_1mebQggrD3xO5JfuHk7clQ94ysA"
    68  	clientId := "client_1mebPYz8NFNA17fi7NemNXIwp1p"
    69  
    70  	got, _ := client.Sessions().ListAllWithFiltering(ListAllSessionsParams{
    71  		Limit:    &limit,
    72  		Offset:   &offset,
    73  		Status:   &status,
    74  		UserID:   &userId,
    75  		ClientID: &clientId,
    76  	})
    77  
    78  	if len(got) != len(want) {
    79  		t.Errorf("Was expecting %d sessions to be returned, instead got %d", len(want), len(got))
    80  	}
    81  
    82  	if !reflect.DeepEqual(got, want) {
    83  		t.Errorf("Response = %v, want %v", got, want)
    84  	}
    85  }
    86  
    87  func TestSessionsService_ListAll_pagination_and_filtering_empty_params(t *testing.T) {
    88  	client, mux, _, teardown := setup("token")
    89  	defer teardown()
    90  
    91  	expectedResponse := "[" + dummySessionJson + "]"
    92  
    93  	mux.HandleFunc("/sessions", func(w http.ResponseWriter, req *http.Request) {
    94  		testHttpMethod(t, req, "GET")
    95  		testHeader(t, req, "Authorization", "Bearer token")
    96  
    97  		queryParams := url.Values{}
    98  
    99  		testQuery(t, req, queryParams)
   100  		fmt.Fprint(w, expectedResponse)
   101  	})
   102  
   103  	var want []Session
   104  	_ = json.Unmarshal([]byte(expectedResponse), &want)
   105  
   106  	limit := 2
   107  	offset := 2
   108  	status := SessionStatusEnded
   109  	userId := "user_1mebQggrD3xO5JfuHk7clQ94ysA"
   110  	clientId := "client_1mebPYz8NFNA17fi7NemNXIwp1p"
   111  
   112  	got, _ := client.Sessions().ListAllWithFiltering(ListAllSessionsParams{
   113  		Limit:    &limit,
   114  		Offset:   &offset,
   115  		Status:   &status,
   116  		UserID:   &userId,
   117  		ClientID: &clientId,
   118  	})
   119  
   120  	if len(got) != len(want) {
   121  		t.Errorf("Was expecting %d sessions to be returned, instead got %d", len(want), len(got))
   122  	}
   123  
   124  	if !reflect.DeepEqual(got, want) {
   125  		t.Errorf("Response = %v, want %v", got, want)
   126  	}
   127  }
   128  
   129  func TestSessionsService_ListAll_invalidServer(t *testing.T) {
   130  	client, _ := NewClient("token")
   131  
   132  	sessions, err := client.Sessions().ListAll()
   133  	if err == nil {
   134  		t.Errorf("Expected error to be returned")
   135  	}
   136  	if sessions != nil {
   137  		t.Errorf("Was not expecting any sessions to be returned, instead got %v", sessions)
   138  	}
   139  }
   140  
   141  func TestSessionsService_Read_happyPath(t *testing.T) {
   142  	token := "token"
   143  	sessionId := "someSessionId"
   144  	expectedResponse := dummySessionJson
   145  
   146  	client, mux, _, teardown := setup(token)
   147  	defer teardown()
   148  
   149  	mux.HandleFunc("/sessions/"+sessionId, func(w http.ResponseWriter, req *http.Request) {
   150  		testHttpMethod(t, req, "GET")
   151  		testHeader(t, req, "Authorization", "Bearer "+token)
   152  		fmt.Fprint(w, expectedResponse)
   153  	})
   154  
   155  	var want Session
   156  	_ = json.Unmarshal([]byte(expectedResponse), &want)
   157  
   158  	got, _ := client.Sessions().Read(sessionId)
   159  	if !reflect.DeepEqual(*got, want) {
   160  		t.Errorf("Response = %v, want %v", *got, want)
   161  	}
   162  }
   163  
   164  func TestSessionsService_Read_invalidServer(t *testing.T) {
   165  	client, _ := NewClient("token")
   166  
   167  	session, err := client.Sessions().Read("someSessionId")
   168  	if err == nil {
   169  		t.Errorf("Expected error to be returned")
   170  	}
   171  	if session != nil {
   172  		t.Errorf("Was not expecting any session to be returned, instead got %v", session)
   173  	}
   174  }
   175  
   176  func TestSessionsService_Revoke_happyPath(t *testing.T) {
   177  	token := "token"
   178  	sessionId := "someSessionId"
   179  	expectedResponse := dummySessionJson
   180  
   181  	client, mux, _, teardown := setup(token)
   182  	defer teardown()
   183  
   184  	mux.HandleFunc("/sessions/"+sessionId+"/revoke", func(w http.ResponseWriter, req *http.Request) {
   185  		testHttpMethod(t, req, "POST")
   186  		testHeader(t, req, "Authorization", "Bearer "+token)
   187  		fmt.Fprint(w, expectedResponse)
   188  	})
   189  
   190  	var want Session
   191  	_ = json.Unmarshal([]byte(expectedResponse), &want)
   192  
   193  	got, _ := client.Sessions().Revoke(sessionId)
   194  	if !reflect.DeepEqual(*got, want) {
   195  		t.Errorf("Response = %v, want %v", *got, want)
   196  	}
   197  }
   198  
   199  func TestSessionsService_Revoke_invalidServer(t *testing.T) {
   200  	client, _ := NewClient("token")
   201  
   202  	session, err := client.Sessions().Revoke("someSessionId")
   203  	if err == nil {
   204  		t.Errorf("Expected error to be returned")
   205  	}
   206  	if session != nil {
   207  		t.Errorf("Was not expecting any session to be returned, instead got %v", session)
   208  	}
   209  }
   210  
   211  func TestSessionsService_Verify_happyPath(t *testing.T) {
   212  	token := "token"
   213  	sessionId := "someSessionId"
   214  	sessionToken := "someSessionToken"
   215  	expectedResponse := dummySessionJson
   216  
   217  	client, mux, _, teardown := setup(token)
   218  	defer teardown()
   219  
   220  	mux.HandleFunc("/sessions/"+sessionId+"/verify", func(w http.ResponseWriter, req *http.Request) {
   221  		testHttpMethod(t, req, "POST")
   222  		testHeader(t, req, "Authorization", "Bearer "+token)
   223  		fmt.Fprint(w, expectedResponse)
   224  	})
   225  
   226  	var want Session
   227  	_ = json.Unmarshal([]byte(expectedResponse), &want)
   228  
   229  	got, _ := client.Sessions().Verify(sessionId, sessionToken)
   230  	if !reflect.DeepEqual(*got, want) {
   231  		t.Errorf("Response = %v, want %v", *got, want)
   232  	}
   233  }
   234  
   235  func TestSessionsService_Verify_invalidServer(t *testing.T) {
   236  	client, _ := NewClient("token")
   237  
   238  	session, err := client.Sessions().Verify("someSessionId", "someSessionToken")
   239  	if err == nil {
   240  		t.Errorf("Expected error to be returned")
   241  	}
   242  	if session != nil {
   243  		t.Errorf("Was not expecting any session to be returned, instead got %v", session)
   244  	}
   245  }
   246  
   247  func TestSessionsService_CreateTokenFromTemplate_Success(t *testing.T) {
   248  	const dummySessionTokenJSONTemplate = `{"object": "token", "jwt": "%s"}`
   249  
   250  	token := "token"
   251  	sessionID := "sess_2bp7pawkvFUR3m3QPBm6Cwx5ghZ"
   252  	templateSlug := "someTemplateSlug"
   253  	sessionToken := "someSessionToken"
   254  	expectedResponse := fmt.Sprintf(dummySessionTokenJSONTemplate, sessionToken)
   255  
   256  	clerkClient, mux, _, teardown := setup(token)
   257  	defer teardown()
   258  
   259  	mux.HandleFunc(fmt.Sprintf("/%s/%s/token/%s", SessionsUrl, sessionID, templateSlug), func(w http.ResponseWriter, req *http.Request) {
   260  		testHttpMethod(t, req, "POST")
   261  		testHeader(t, req, "Authorization", fmt.Sprintf("Bearer %s", token))
   262  		w.WriteHeader(http.StatusOK)
   263  		_, _ = w.Write([]byte(expectedResponse))
   264  	})
   265  
   266  	var expectedSessionToken SessionToken
   267  	err := json.Unmarshal([]byte(expectedResponse), &expectedSessionToken)
   268  	assert.NoError(t, err)
   269  
   270  	received, err := clerkClient.Sessions().CreateTokenFromTemplate(sessionID, templateSlug)
   271  	require.NoError(t, err)
   272  	require.EqualValues(t, expectedSessionToken, *received)
   273  }
   274  
   275  const dummySessionJson = `{
   276          "abandon_at": 1612448988,
   277          "client_id": "client_1mebPYz8NFNA17fi7NemNXIwp1p",
   278          "expire_at": 1610461788,
   279          "id": "sess_1mebQdHlQI14cjxln4e2eXNzwzi",
   280          "last_active_at": 1609857251,
   281          "object": "session",
   282          "status": "ended",
   283          "user_id": "user_1mebQggrD3xO5JfuHk7clQ94ysA"
   284      }`