Ctrl K
ComunidadGuías…

authHeader_test.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package main

import (
	"context"
	"net/http"
	"testing"

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

func TestGetAuthorizationTokenFromRequest(t *testing.T) {
	t.Parallel()

	for _, tc := range []struct {
		name      string
		setupReq  func(*http.Request)
		tokenType authTokenType
		token     string
		ok        bool
	}{
		{
			name: "legacy raw header",
			setupReq: func(r *http.Request) {
				r.Header.Set("Authorization", "raw-token")
			},
			tokenType: authTokenTypeLegacy,
			token:     "raw-token",
			ok:        true,
		},
		{
			name: "internal prefixed header",
			setupReq: func(r *http.Request) {
				r.Header.Set("Authorization", "Token internal-token")
			},
			tokenType: authTokenTypeInternal,
			token:     "internal-token",
			ok:        true,
		},
		{
			name: "twitch prefixed header",
			setupReq: func(r *http.Request) {
				r.Header.Set("Authorization", "Twitch twitch-token")
			},
			tokenType: authTokenTypeTwitch,
			token:     "twitch-token",
			ok:        true,
		},
		{
			name: "basic auth password",
			setupReq: func(r *http.Request) {
				r.SetBasicAuth("user", "basic-token")
			},
			tokenType: authTokenTypeLegacy,
			token:     "basic-token",
			ok:        true,
		},
		{
			name: "unknown prefix",
			setupReq: func(r *http.Request) {
				r.Header.Set("Authorization", "Bearer no-thanks")
			},
			tokenType: authTokenTypeUnknown,
			token:     "",
			ok:        false,
		},
	} {
		t.Run(tc.name, func(t *testing.T) {
			t.Parallel()

			req, err := http.NewRequestWithContext(context.TODO(), http.MethodGet, "/", nil)
			require.NoError(t, err)
			tc.setupReq(req)

			tokenType, token, ok := getAuthorizationTokenFromRequest(req)
			require.Equal(t, tc.tokenType, tokenType)
			require.Equal(t, tc.token, token)
			require.Equal(t, tc.ok, ok)
		})
	}
}