45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
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)
|