Files
auth-service/internal/service/auth_test.go

118 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
})
}