package handler import ( "net/http" "net/http/httptest" "net/url" "testing" "github.com/stretchr/testify/require" ) func buildEncodedOAuthBindUserCookie(t *testing.T, userID int64, secret string) string { t.Helper() value, err := buildOAuthBindUserCookieValue(userID, secret) require.NoError(t, err) return value } func encodedCookie(name, value string) *http.Cookie { return &http.Cookie{ Name: name, Value: encodeCookieValue(value), Path: "/", } } func findCookie(cookies []*http.Cookie, name string) *http.Cookie { for _, cookie := range cookies { if cookie.Name == name { return cookie } } return nil } func requireCookieCleared(t *testing.T, recorder *httptest.ResponseRecorder, name string) { t.Helper() cookie := findCookie(recorder.Result().Cookies(), name) require.NotNil(t, cookie) require.Equal(t, -1, cookie.MaxAge) } func decodeCookieValueForTest(t *testing.T, value string) string { t.Helper() decoded, err := decodeCookieValue(value) require.NoError(t, err) return decoded } func assertOAuthRedirectError(t *testing.T, location string, errorCode string, errorMessage string) { t.Helper() values := parseOAuthRedirectFragment(t, location) require.Equal(t, errorCode, values.Get("error")) require.Equal(t, errorMessage, values.Get("error_message")) } func parseOAuthRedirectFragment(t *testing.T, location string) url.Values { t.Helper() require.NotEmpty(t, location) parsed, err := url.Parse(location) require.NoError(t, err) rawValues := parsed.RawQuery if rawValues == "" { rawValues = parsed.Fragment } values, err := url.ParseQuery(rawValues) require.NoError(t, err) return values }