main

mattermost/focalboard

Last updated at: 29/12/2023 09:45

request_parser_test.go

TLDR

The file request_parser_test.go in the auth package contains a test function TestParseAuthTokenFromRequest that tests the ParseAuthTokenFromRequest function. The test function uses different test cases to verify the behavior of the ParseAuthTokenFromRequest function.

Methods

ParseAuthTokenFromRequest

The ParseAuthTokenFromRequest function takes an HTTP request as input and extracts the authentication token and its location from the request. It supports parsing the token from the request header, cookie, or query string. The function returns the token and its location as output.

END

package auth

import (
	"net/http"
	"net/http/httptest"
	"strconv"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestParseAuthTokenFromRequest(t *testing.T) {
	cases := []struct {
		header           string
		cookie           string
		query            string
		expectedToken    string
		expectedLocation TokenLocation
	}{
		{"", "", "", "", TokenLocationNotFound},
		{"token mytoken", "", "", "mytoken", TokenLocationHeader},
		{"BEARER mytoken", "", "", "mytoken", TokenLocationHeader},
		{"", "mytoken", "", "mytoken", TokenLocationCookie},
		{"", "", "mytoken", "mytoken", TokenLocationQueryString},
	}

	for testnum, tc := range cases {
		pathname := "/test/here"
		if tc.query != "" {
			pathname += "?access_token=" + tc.query
		}
		req := httptest.NewRequest("GET", pathname, nil)
		if tc.header != "" {
			req.Header.Add(HeaderAuth, tc.header)
		}
		if tc.cookie != "" {
			req.AddCookie(&http.Cookie{
				Name:  "FOCALBOARDAUTHTOKEN",
				Value: tc.cookie,
			})
		}

		token, location := ParseAuthTokenFromRequest(req)

		require.Equal(t, tc.expectedToken, token, "Wrong token on test "+strconv.Itoa(testnum))
		require.Equal(t, tc.expectedLocation, location, "Wrong location on test "+strconv.Itoa(testnum))
	}
}