Добавлен основные классы для сервиса авторизаци

This commit is contained in:
Ганеев Артем
2025-10-28 20:49:54 +03:00
parent def3552a67
commit 736b8031f8
26 changed files with 904 additions and 40 deletions

View File

@@ -0,0 +1,117 @@
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)
})
}