core/tests/test_validations.py

73 lines
2.6 KiB
Python
Raw Normal View History

2025-02-09 19:26:50 +00:00
from datetime import datetime, timedelta
2025-02-11 09:00:35 +00:00
import pytest
2025-02-09 19:26:50 +00:00
from pydantic import ValidationError
from auth.validations import (
AuthInput,
2025-02-11 09:00:35 +00:00
AuthResponse,
2025-02-09 19:26:50 +00:00
OAuthInput,
2025-02-11 09:00:35 +00:00
TokenPayload,
UserLoginInput,
UserRegistrationInput,
2025-02-09 19:26:50 +00:00
)
2025-02-11 09:00:35 +00:00
2025-02-09 19:26:50 +00:00
class TestAuthValidations:
def test_auth_input(self):
"""Test basic auth input validation"""
# Valid case
2025-02-11 09:00:35 +00:00
auth = AuthInput(user_id="123", username="testuser", token="1234567890abcdef1234567890abcdef")
2025-02-09 19:26:50 +00:00
assert auth.user_id == "123"
assert auth.username == "testuser"
# Invalid cases
with pytest.raises(ValidationError):
AuthInput(user_id="", username="test", token="x" * 32)
2025-02-11 09:00:35 +00:00
2025-02-09 19:26:50 +00:00
with pytest.raises(ValidationError):
AuthInput(user_id="123", username="t", token="x" * 32)
def test_user_registration(self):
"""Test user registration validation"""
# Valid case
2025-02-11 09:00:35 +00:00
user = UserRegistrationInput(email="test@example.com", password="SecurePass123!", name="Test User")
2025-02-09 19:26:50 +00:00
assert user.email == "test@example.com"
assert user.name == "Test User"
# Test email validation
with pytest.raises(ValidationError) as exc:
2025-02-11 09:00:35 +00:00
UserRegistrationInput(email="invalid-email", password="SecurePass123!", name="Test")
2025-02-09 19:26:50 +00:00
assert "Invalid email format" in str(exc.value)
# Test password validation
with pytest.raises(ValidationError) as exc:
2025-02-11 09:00:35 +00:00
UserRegistrationInput(email="test@example.com", password="weak", name="Test")
2025-02-09 19:26:50 +00:00
assert "String should have at least 8 characters" in str(exc.value)
def test_token_payload(self):
"""Test token payload validation"""
now = datetime.utcnow()
exp = now + timedelta(hours=1)
2025-02-11 09:00:35 +00:00
payload = TokenPayload(user_id="123", username="testuser", exp=exp, iat=now)
2025-02-09 19:26:50 +00:00
assert payload.user_id == "123"
assert payload.username == "testuser"
assert payload.scopes == [] # Default empty list
def test_auth_response(self):
"""Test auth response validation"""
# Success case
2025-02-11 09:00:35 +00:00
success_resp = AuthResponse(success=True, token="valid_token", user={"id": "123", "name": "Test"})
2025-02-09 19:26:50 +00:00
assert success_resp.success is True
assert success_resp.token == "valid_token"
# Error case
2025-02-11 09:00:35 +00:00
error_resp = AuthResponse(success=False, error="Invalid credentials")
2025-02-09 19:26:50 +00:00
assert error_resp.success is False
assert error_resp.error == "Invalid credentials"
# Invalid case - отсутствует обязательное поле token при success=True
with pytest.raises(ValidationError):
2025-02-11 09:00:35 +00:00
AuthResponse(success=True, user={"id": "123", "name": "Test"})