dodil/erp-brick-payments

DODIL ERP brick: payments

tests/test_scenarios.py

"""The scenario catalogue covers every scenario in the spec (module.yaml tests.scenarios) and runs in process."""
import pathlib
import sys

sys.path.insert(0, str(pathlib.Path(__file__).parent / "scenarios"))

import catalogue  # noqa: E402
import pytest  # noqa: E402

SPEC = ["SC-PAY-01", "SC-PAY-02", "SC-PAY-03", "SC-PAY-04", "SC-PAY-05", "SC-PAY-06", "SC-PAY-07", "SC-PAY-08", "SC-PAY-09"]


def test_the_catalogue_covers_the_spec():
    assert [sc.id for sc in catalogue.CAT.scenarios] == SPEC


def test_the_catalogue_runs_in_process():
    """The whole composition in process: storage wires, every scenario and every generated probe PASSES - including the
    wildcard probes (`*:*:*` and `pay:*:*` run every person use case and no machine one)."""
    pytest.importorskip("brick_bp", reason="brick-business-partner is not installed")
    from erp_platform.scenarios.inprocess import InProcessRunner
    catalogue.install()
    runner = InProcessRunner(catalogue.CAT)
    runner.start()
    try:
        results = runner.run_all()
    finally:
        runner.stop()
    assert [(r.id, r.outcome, r.message[:400]) for r in results if r.outcome != "passed"] == []
    ids = {r.id for r in results}
    assert set(SPEC) <= ids
    assert {"PROBE-PERM-CASHIER", "PROBE-PERM-COLLECTOR", "PROBE-PERM-APPROVER", "PROBE-PERM-SALES", "PROBE-PERM-SYSTEM",
            "PROBE-PERM-ANONYMOUS", "PROBE-WILD-STAR", "PROBE-WILD-PAY", "PROBE-WILD-MALFORMED"} <= ids


def test_the_scenarios_roles_are_the_bricks_default_roles_plus_the_partner_steward_and_a_cashier_who_may_write_settings():
    import yaml
    here = pathlib.Path(__file__).resolve().parent
    shipped = yaml.safe_load((here.parent / "src" / "brick_payments" / "roles.yaml").read_text())
    scenarios = yaml.safe_load((here / "scenarios" / "roles.yaml").read_text())
    assert {k: v for k, v in scenarios["roles"].items() if k not in ("partner_steward", "cashier_admin")} == shipped["roles"]
    assert scenarios["service_clients"] == shipped["service_clients"]