58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
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
|