TorbatYar/backend/services/accounting/app/tests/test_architecture.py
Mortezakoohjani 12c8615615 Ship enterprise Accounting FE/API with CRUD parity and production wiring.
Adds accounting-service PATCH/archive, fiscal helpers, COA templates and setup status, plus SuperApp Accounting UI (DS, scoreboard, masters, vouchers, ledger, ops modules) with session refresh and HTTPS public API URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 15:26:43 +03:30

46 lines
1.6 KiB
Python

"""Architecture tests — module boundary enforcement."""
import importlib
import pkgutil
import pytest
def test_no_direct_journal_creation_outside_posting_engine():
"""ADR-010: JournalEntry creation must go through PostingEngine."""
from app.services.posting_engine import PostingEngine
assert hasattr(PostingEngine, "post_voucher")
assert hasattr(PostingEngine, "reverse_voucher")
def test_all_models_have_tenant_id():
from app.core.database import Base
import app.models # noqa: F401
skip = {"alembic_version"}
for table in Base.metadata.tables.values():
if table.name in skip:
continue
assert "tenant_id" in table.columns, f"{table.name} missing tenant_id"
def test_permissions_defined():
from app.permissions.definitions import ALL_PERMISSIONS
assert "accounting.view" in ALL_PERMISSIONS
assert "purchase_accounting.post" in ALL_PERMISSIONS
assert "assets.depreciate" in ALL_PERMISSIONS
assert "payroll.calculate" in ALL_PERMISSIONS
assert "reports.view" in ALL_PERMISSIONS
assert "audit.view" in ALL_PERMISSIONS
def test_events_defined():
from app.events.types import AccountingEventType
assert AccountingEventType.GOODS_RECEIVED.value == "goods.received"
assert AccountingEventType.ASSET_DEPRECIATED.value == "asset.depreciated"
assert AccountingEventType.PAYROLL_POSTED.value == "payroll.posted"
assert AccountingEventType.BALANCE_SHEET_GENERATED.value == "balance_sheet.generated"
assert AccountingEventType.AUDIT_RECORD_CREATED.value == "audit_record.created"