hako/internal/auth/jwt_test.go
2026-01-12 19:35:18 +01:00

78 lines
2.1 KiB
Go

package auth
import (
"testing"
"time"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)
func TestJWTService_GenerateTokenWithRole(t *testing.T) {
service := NewJWTService("test-secret", time.Hour)
userID := uuid.New()
email := "test@example.com"
role := "admin"
tokenString, expiresAt, err := service.GenerateTokenWithRole(userID, email, role)
require.NoError(t, err)
require.NotEmpty(t, tokenString)
require.True(t, expiresAt.After(time.Now()))
// Validate the token
claims, err := service.ValidateToken(tokenString)
require.NoError(t, err)
require.Equal(t, userID.String(), claims.UserID)
require.Equal(t, email, claims.Email)
require.Equal(t, role, claims.Role)
}
func TestJWTService_GenerateToken_DefaultsToUserRole(t *testing.T) {
service := NewJWTService("test-secret", time.Hour)
userID := uuid.New()
email := "test@example.com"
tokenString, _, err := service.GenerateToken(userID, email)
require.NoError(t, err)
// Validate the token
claims, err := service.ValidateToken(tokenString)
require.NoError(t, err)
require.Equal(t, userID.String(), claims.UserID)
require.Equal(t, email, claims.Email)
require.Equal(t, "user", claims.Role) // Should default to "user"
}
func TestJWTService_GenerateTokenWithRole_EmptyRoleDefaultsToUser(t *testing.T) {
service := NewJWTService("test-secret", time.Hour)
userID := uuid.New()
email := "test@example.com"
tokenString, _, err := service.GenerateTokenWithRole(userID, email, "")
require.NoError(t, err)
// Validate the token
claims, err := service.ValidateToken(tokenString)
require.NoError(t, err)
require.Equal(t, "user", claims.Role) // Should default to "user" when empty
}
func TestJWTService_ValidateToken_WithRole(t *testing.T) {
service := NewJWTService("test-secret", time.Hour)
userID := uuid.New()
email := "test@example.com"
role := "admin"
tokenString, _, err := service.GenerateTokenWithRole(userID, email, role)
require.NoError(t, err)
claims, err := service.ValidateToken(tokenString)
require.NoError(t, err)
require.Equal(t, userID.String(), claims.UserID)
require.Equal(t, email, claims.Email)
require.Equal(t, role, claims.Role)
}