"""AP1.0 — Steering Foundation tests.""" from __future__ import annotations from tests.factories import provision_user_in_tenant from tests.test_initiatives_actions import ( _auth, _create_action, _create_initiative, _login, ) def test_steering_context_on_initiative_create(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) initiative_id = _create_initiative(client, token).json()["id"] res = client.get( f"/api/initiatives/{initiative_id}/steering-context", headers=_auth(token), ) assert res.status_code == 200 data = res.json() assert data["initiative_id"] == initiative_id assert data["lifecycle_state"] == "intake" assert data["method_key"] == "generic_operating" assert data["lifecycle_label"] def test_steering_snapshot_has_lifecycle(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) initiative_id = _create_initiative(client, token).json()["id"] _create_action(client, token, initiative_id) snap = client.get( f"/api/initiatives/{initiative_id}/steering-snapshot", headers=_auth(token), ) assert snap.status_code == 200 data = snap.json() assert "lifecycle_state" in data assert data.get("operating_phase_deprecated") is True assert data["lifecycle_state"] in ( "intake", "planning", "action_selection", "structure_setup", ) def test_steering_context_tenant_isolation(client): user_a = provision_user_in_tenant(tenant_role="member") token_a = _login(client, user_a) initiative_id = _create_initiative(client, token_a).json()["id"] user_b = provision_user_in_tenant(tenant_role="member") token_b = _login(client, user_b) res = client.get( f"/api/initiatives/{initiative_id}/steering-context", headers=_auth(token_b), ) assert res.status_code == 404 def test_lifecycle_transition_on_blocker_resolve(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) initiative_id = _create_initiative(client, token).json()["id"] action = _create_action( client, token, initiative_id, assigned_actor_ids=[user["actor_id"]] ).json() blocker = client.post( f"/api/initiatives/{initiative_id}/blockers", json={"title": "B", "action_id": action["id"], "set_action_blocked": True}, headers=_auth(token), ).json() client.patch( f"/api/blockers/{blocker['id']}", json={"status": "resolved"}, headers=_auth(token), ) ctx = client.get( f"/api/initiatives/{initiative_id}/steering-context", headers=_auth(token), ).json() assert ctx["lifecycle_state"] == "action_selection"