import pytest from app.domain.models import CommandRequest, WorkflowCommand, WorkflowStage from app.domain.workflow import InvalidTransitionError, WorkflowConflictError, apply_command from app.repositories.memory import create_demo_project def test_confirm_plan_advances_revision_and_stage() -> None: project = create_demo_project() updated = apply_command( project, CommandRequest( command=WorkflowCommand.CONFIRM_PLAN, expected_revision=project.revision, payload={"ceiling_height_mm": 2900}, ), ) assert updated.stage == WorkflowStage.BLOCKOUT assert updated.revision == project.revision + 1 assert updated.plan.ceiling_height_mm == 2900 def test_stale_revision_is_rejected() -> None: project = create_demo_project() with pytest.raises(WorkflowConflictError): apply_command( project, CommandRequest( command=WorkflowCommand.CONFIRM_PLAN, expected_revision=project.revision - 1, ), ) def test_invalid_command_is_rejected() -> None: project = create_demo_project() with pytest.raises(InvalidTransitionError): apply_command( project, CommandRequest( command=WorkflowCommand.REQUEST_RENDER, expected_revision=project.revision, ), ) def test_unknown_region_is_rejected() -> None: project = create_demo_project() project.stage = WorkflowStage.REGION_SELECTION with pytest.raises(InvalidTransitionError): apply_command( project, CommandRequest( command=WorkflowCommand.SELECT_REGION, expected_revision=project.revision, payload={"region_id": "missing-region"}, ), )