from __future__ import annotations from contextlib import asynccontextmanager from types import SimpleNamespace import pytest from app.repository import Repository class FakeResult: def __init__(self, *, rows=(), scalar=None) -> None: self.rows = rows self.scalar = scalar def __iter__(self): return iter(self.rows) def scalar_one_or_none(self): return self.scalar class FakeConnection: async def execute(self, statement): sql = str(statement) if "han_app.sync_queue" in sql: return FakeResult(rows=[SimpleNamespace(status="pending", count=2)]) if "workflow_instances" in sql: assert "state AS status" in sql return FakeResult(rows=[SimpleNamespace(status="created", count=3)]) if "crm_commands" in sql: return FakeResult(rows=[SimpleNamespace(status="succeeded", count=4)]) if "webhook_inbox" in sql: return FakeResult(scalar=1.5) if "settings_versions" in sql: return FakeResult(scalar=1) raise AssertionError(f"unexpected status query: {sql}") class FakeEngine: @asynccontextmanager async def connect(self): yield FakeConnection() @pytest.mark.asyncio async def test_status_uses_common_status_alias_for_workflows() -> None: repository = object.__new__(Repository) repository.engine = FakeEngine() result = await repository.status() assert result["queue"] == {"pending": 2} assert result["workflows"] == {"created": 3} assert result["commands"] == {"succeeded": 4} assert result["webhook_lag_seconds"] == 1.5 assert result["settings_version"] == 1