from types import SimpleNamespace from unittest.mock import AsyncMock from uuid import uuid4 import pytest from app.infra.db.metadb.repositories.metadata_repository import MetadataRepository @pytest.fixture def anyio_backend(): return "asyncio" @pytest.mark.anyio async def test_keycloak_snapshot_sync_preserves_existing_authorization(): keycloak_id = uuid4() user = SimpleNamespace( keycloak_id=keycloak_id, username="old-name", email="old@example.com", role="admin", is_active=True, is_superuser=True, updated_at=None, ) session = SimpleNamespace(commit=AsyncMock(), refresh=AsyncMock()) repository = MetadataRepository(session) repository.get_user_by_keycloak_id = AsyncMock(return_value=user) result, created = await repository.sync_user_snapshot_from_keycloak( keycloak_id=keycloak_id, username="new-name", email="new@example.com", ) assert created is False assert result.username == "new-name" assert result.email == "new@example.com" assert result.role == "admin" assert result.is_active is True assert result.is_superuser is True session.commit.assert_awaited_once() session.refresh.assert_awaited_once_with(user)