package middlewares import ( "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" "go.uber.org/zap" ) func TestGenerateTokenPair(t *testing.T) { InitJWT("test-secret", 15, 24, "test-issuer") pair, err := GenerateTokenPair(42, "demo") if err != nil { t.Fatal(err) } access, err := ParseToken(pair.AccessToken) if err != nil { t.Fatal(err) } refresh, err := ParseToken(pair.RefreshToken) if err != nil { t.Fatal(err) } if access.TokenType != TokenTypeAccess || refresh.TokenType != TokenTypeRefresh { t.Fatalf("unexpected token types: %s, %s", access.TokenType, refresh.TokenType) } if access.ID == "" || refresh.ID == "" || access.ID == refresh.ID { t.Fatal("tokens must have distinct IDs") } } func TestJWTAuthFailureUsesHTTP200(t *testing.T) { Logger = zap.NewNop() gin.SetMode(gin.TestMode) router := gin.New() router.GET("/private", JWTAuth(), func(c *gin.Context) { c.Status(http.StatusNoContent) }) recorder := httptest.NewRecorder() router.ServeHTTP(recorder, httptest.NewRequest(http.MethodGet, "/private", nil)) if recorder.Code != http.StatusOK { t.Fatalf("HTTP status = %d, want 200", recorder.Code) } } func TestBearerToken(t *testing.T) { if token, err := BearerToken("Bearer abc"); err != nil || token != "abc" { t.Fatalf("BearerToken() = %q, %v", token, err) } if _, err := BearerToken("abc"); err == nil { t.Fatal("BearerToken() accepted malformed header") } }