arm-core/api/tests/test_api_accounts.py

54 lines
2.0 KiB
Python

"""Плоский справочник счетов: все уровни и порядок кодов."""
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
from src.schemas.directories import FiltersForChartOfAccount
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, FiltersForChartOfAccount())
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]