Files
han-app/VM2_services/codebase/services/bitrix-sync/tests/test_repository.py
T

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