Добавлен основные классы для сервиса авторизаци
This commit is contained in:
117
internal/service/auth_test.go
Normal file
117
internal/service/auth_test.go
Normal 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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user