Files

60 lines
1.8 KiB
Python

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"},
),
)