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