48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
from datetime import datetime, UTC
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
|
|
from app.db import validate_transition
|
|
from app.models import Project, WorkItem
|
|
|
|
|
|
def test_validate_transition_rules():
|
|
validate_transition("queued", "dispatched", "steve-w", None, None)
|
|
validate_transition("in_progress", "completed", "steve-w", "success", "done")
|
|
with pytest.raises(Exception):
|
|
validate_transition("queued", "dispatched", None, None, None)
|
|
with pytest.raises(Exception):
|
|
validate_transition("in_progress", "blocked", "steve-w", None, None)
|
|
|
|
|
|
def test_models_shape():
|
|
now = datetime.now(UTC).replace(microsecond=0)
|
|
project = Project(
|
|
id=uuid4(),
|
|
name="Queue",
|
|
external_ref=None,
|
|
created_at=now,
|
|
updated_at=now,
|
|
)
|
|
work = WorkItem(
|
|
id=uuid4(),
|
|
project_id=project.id,
|
|
type="code_review",
|
|
description="Review PR",
|
|
payload={"pr": 3},
|
|
priority=2,
|
|
status="queued",
|
|
assigned_agent="steve-w",
|
|
created_by="marcus-a",
|
|
created_at=now,
|
|
updated_at=now,
|
|
completed_at=None,
|
|
outcome=None,
|
|
notes=None,
|
|
dispatch_log=[],
|
|
)
|
|
assert project.name == "Queue"
|
|
assert work.priority == 2
|
|
assert work.payload == {"pr": 3}
|