46 lines
1.4 KiB
Python
46 lines
1.4 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,
|
|
),
|
|
)
|