"""Плоский справочник счетов: все уровни и порядок кодов.""" import uuid from types import SimpleNamespace from unittest.mock import AsyncMock from src.api.endpoints.directories.accounts import list_accounts from src.models.enums import AccountKind, AccountRowType from src.repositories.directories import list_accounts as query_accounts async def test_accounts_are_flat_and_naturally_sorted() -> None: root_id, sub_id = uuid.uuid4(), uuid.uuid4() rows = [ SimpleNamespace( id=sub_id, code="60.10", parent_id=root_id, name="Авансы", kind=AccountKind.A, row_type=AccountRowType.subaccount, is_off_balance=False, ), SimpleNamespace( id=root_id, code="60", parent_id=None, name="Расчёты", kind=AccountKind.AP, row_type=AccountRowType.account, is_off_balance=False, ), SimpleNamespace( id=uuid.uuid4(), code="60.2", parent_id=root_id, name="Поставщики", kind=AccountKind.P, row_type=AccountRowType.subaccount, is_off_balance=False, ), ] session = SimpleNamespace(scalars=AsyncMock(return_value=SimpleNamespace(all=lambda: rows))) assert [item.code for item in await query_accounts(session)] == ["60", "60.2", "60.10"] response = await list_accounts(session) assert [item.code for item in response] == ["60", "60.2", "60.10"] assert response[0].parent_id is None assert response[2].parent_id == root_id assert response[2].id == sub_id assert [item.model_dump(mode="json")["is_debit"] for item in response] == [True, False, True] assert [item.model_dump(mode="json")["is_credit"] for item in response] == [True, True, False]