feat(auth): sync Keycloak users for authorization
Generic Container CI/CD / test-build-publish (push) Failing after 33s
Server CI/CD v2 / build-test-publish-and-deploy (push) Failing after 34s

This commit is contained in:
2026-11-04 13:35:29 +08:00
parent bd8c619bfb
commit 9a9add1531
11 changed files with 716 additions and 8 deletions
@@ -0,0 +1,44 @@
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)