"""Unit tests for Control Plane next-step guidance.""" from target_revenue.service import guidance def test_dashboard_empty_operator_recommends_register(): steps = guidance.dashboard_guidance( rights="operator", phase_count=0, pending_proposals=0, root_path="/ui", ) assert steps[0]["key"] == "register_phase" assert steps[0]["priority"] == "recommended" assert steps[0]["href"] == "/ui/phases/new" def test_dashboard_with_phase_opens_first(): steps = guidance.dashboard_guidance( rights="viewer", phase_count=1, pending_proposals=0, root_path="/ui", first_phase_id="trsl:phase:demo", ) assert steps[0]["key"] == "open_phase" assert "trsl:phase:demo" in steps[0]["href"] def test_phase_empty_ledger_recommends_credit_or_remission(): metrics = { "facts": { "is_converted": False, "cumulative_development_credit": 0, "cumulative_remission_credit": 0, "initial_target_currency": "EUR", }, "forecasts": {"remission_if_applied_now": 12.5, "next_scheduled_remission_at": None}, } steps = guidance.phase_guidance( rights="operator", root_path="/ui", phase_id="trsl:phase:demo", metrics=metrics, ledger_len=0, extension_count=1, has_attestation=False, ) keys = [s["key"] for s in steps] assert "apply_remission" in keys assert keys[0] == "apply_remission" # material remission first def test_phase_converted_done_hint(): metrics = { "facts": {"is_converted": True, "cumulative_development_credit": 1, "cumulative_remission_credit": 0}, "forecasts": {}, } steps = guidance.phase_guidance( rights="operator", root_path="/ui", phase_id="trsl:phase:demo", metrics=metrics, ledger_len=2, extension_count=1, has_attestation=True, ) assert steps[0]["key"] == "converted" assert steps[0]["priority"] == "done_hint" def test_lifecycle_checklist_progress(): metrics = { "facts": { "is_converted": False, "cumulative_development_credit": 10, "cumulative_remission_credit": 0, } } items = guidance.phase_lifecycle_checklist( ledger_len=1, metrics=metrics, has_attestation=False ) by_id = {i["id"]: i["done"] for i in items} assert by_id["declared"] is True assert by_id["activity"] is True assert by_id["dev_credit"] is True assert by_id["remission"] is False assert by_id["converted"] is False