package service import ( "authorization/internal/config" "testing" "time" "github.com/golang-jwt/jwt" "github.com/stretchr/testify/assert" ) func TestAuthService_ParseToken(t *testing.T) { // Настройка тестового сервиса service := &AuthService{ tokenConfigs: config.TokenConfig{ AccessToken: config.TokenSettings{ TTLInMinutes: 15, SecretWord: "test-secret-key", }, }, } t.Run("Valid token", func(t *testing.T) { // Создаем валидный токен claims := &tokenClaims{ StandardClaims: jwt.StandardClaims{ ExpiresAt: time.Now().Add(15 * time.Minute).Unix(), IssuedAt: time.Now().Unix(), }, UserId: 1, UserRole: "admin", TokenType: "access", } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte("test-secret-key")) assert.NoError(t, err) // Парсим токен role, err := service.ParseToken(tokenString) // Проверяем результат assert.NoError(t, err) assert.Equal(t, "admin", role) }) t.Run("Expired token", func(t *testing.T) { // Создаем истекший токен (истек 1 час назад) claims := &tokenClaims{ StandardClaims: jwt.StandardClaims{ ExpiresAt: time.Now().Add(-1 * time.Hour).Unix(), IssuedAt: time.Now().Add(-2 * time.Hour).Unix(), }, UserId: 1, UserRole: "admin", TokenType: "access", } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte("test-secret-key")) assert.NoError(t, err) // Парсим истекший токен role, err := service.ParseToken(tokenString) // Проверяем, что получили ошибку assert.Error(t, err) assert.Empty(t, role) // Проверяем, что это именно ошибка истечения срока if ve, ok := err.(*jwt.ValidationError); ok { assert.True(t, ve.Errors&jwt.ValidationErrorExpired != 0, "Expected token expired error") } }) t.Run("Invalid signature", func(t *testing.T) { // Создаем токен с другим секретным ключом claims := &tokenClaims{ StandardClaims: jwt.StandardClaims{ ExpiresAt: time.Now().Add(15 * time.Minute).Unix(), IssuedAt: time.Now().Unix(), }, UserId: 1, UserRole: "admin", TokenType: "access", } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString([]byte("wrong-secret-key")) assert.NoError(t, err) // Пытаемся парсить токен с неправильной подписью role, err := service.ParseToken(tokenString) // Проверяем, что получили ошибку assert.Error(t, err) assert.Empty(t, role) }) t.Run("Malformed token", func(t *testing.T) { // Пытаемся парсить невалидный токен role, err := service.ParseToken("invalid.token.string") // Проверяем, что получили ошибку assert.Error(t, err) assert.Empty(t, role) }) t.Run("Empty token", func(t *testing.T) { // Пытаемся парсить пустой токен role, err := service.ParseToken("") // Проверяем, что получили ошибку assert.Error(t, err) assert.Empty(t, role) }) }