from uuid import uuid4 from samples.peripheral.auth import Identity from samples.peripheral.config import SampleSettings from samples.peripheral.schemas import CreateWorkOrder, UpdateWorkOrder, WorkOrder from samples.peripheral.store import PostgresStore def test_create_and_update_record_flat_order_activity(monkeypatch): store = PostgresStore(SampleSettings()) actor = Identity(str(uuid4()), str(uuid4()), True) saved = {} monkeypatch.setattr(store, "_mutate", lambda who, key, command, operation: operation(None, "normal")) def save(_conn, _who, document): saved.clear() saved.update(WorkOrder.model_validate(document).model_dump(mode="json")) return dict(saved) monkeypatch.setattr(store, "_save_work_order", save) monkeypatch.setattr(store, "_managed_document", lambda *_args: dict(saved)) created = store.create_work_order(actor, CreateWorkOrder( request_id=uuid4(), title="阀门预约复核", summary="现场复核开度", location="北区阀门", assignee="北区班组", feedback_requirements=["回传开度照片"], )) assert created["feedback_requirements"] == ["回传开度照片"] assert created["activity"][0]["kind"] == "created" assert "subtasks" not in created updated = store.update_work_order(actor, created["work_order_id"], UpdateWorkOrder( request_id=uuid4(), expected_revision=1, status="awaiting_reply", progress_note="已复核开度,等待回执确认", )) assert updated["status"] == "awaiting_reply" assert [entry["sequence"] for entry in updated["activity"]] == [1, 2] assert updated["activity"][1]["kind"] == "feedback" assert updated["activity"][1]["detail"] == "已复核开度,等待回执确认" assert "progress_note" not in updated def test_legacy_order_reads_flat_without_claiming_unrecorded_progress(): legacy = {"work_order_id": str(uuid4()), "subtasks": [{"stages": [{"status": "done"}]}]} projected = PostgresStore._active_managed_document(legacy) assert "subtasks" not in projected assert projected["feedback_requirements"] == [] assert projected["activity"] == []