98 lines
2.6 KiB
Python
98 lines
2.6 KiB
Python
"""
|
|
ⒸAngelaMos | 2025
|
|
Tests for authentication service
|
|
"""
|
|
|
|
import pytest
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models.User import User
|
|
from app.services.auth_service import auth_service
|
|
from app.core.exceptions import UserExistsError
|
|
|
|
|
|
class TestAuthService:
|
|
"""
|
|
Test authentication service basics
|
|
"""
|
|
@pytest.mark.asyncio
|
|
async def test_create_user(self, db_session: AsyncSession):
|
|
"""
|
|
Test creating a new user
|
|
"""
|
|
user = await auth_service.create_user(
|
|
session = db_session,
|
|
username = "newuser",
|
|
display_name = "New User"
|
|
)
|
|
|
|
assert user.id is not None
|
|
assert user.username == "newuser"
|
|
assert user.display_name == "New User"
|
|
assert user.is_active is True
|
|
assert user.is_verified is False
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_duplicate_user_fails(
|
|
self,
|
|
db_session: AsyncSession,
|
|
test_user: User
|
|
):
|
|
"""
|
|
Test cannot create user with duplicate username
|
|
"""
|
|
with pytest.raises(UserExistsError, match = "already exists"):
|
|
await auth_service.create_user(
|
|
session = db_session,
|
|
username = test_user.username,
|
|
display_name = "Duplicate"
|
|
)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_user_by_username(
|
|
self,
|
|
db_session: AsyncSession,
|
|
test_user: User
|
|
):
|
|
"""
|
|
Test retrieving user by username
|
|
"""
|
|
user = await auth_service.get_user_by_username(
|
|
session = db_session,
|
|
username = test_user.username
|
|
)
|
|
|
|
assert user is not None
|
|
assert user.id == test_user.id
|
|
assert user.username == test_user.username
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_nonexistent_user(self, db_session: AsyncSession):
|
|
"""
|
|
Test getting user that doesn't exist returns None
|
|
"""
|
|
user = await auth_service.get_user_by_username(
|
|
session = db_session,
|
|
username = "nonexistent"
|
|
)
|
|
|
|
assert user is None
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_user_by_id(
|
|
self,
|
|
db_session: AsyncSession,
|
|
test_user: User
|
|
):
|
|
"""
|
|
Test retrieving user by ID
|
|
"""
|
|
user = await auth_service.get_user_by_id(
|
|
session = db_session,
|
|
user_id = test_user.id
|
|
)
|
|
|
|
assert user is not None
|
|
assert user.id == test_user.id
|
|
assert user.username == test_user.username
|