152 lines
6.9 KiB
Python
152 lines
6.9 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
from unittest.mock import AsyncMock
|
|
|
|
from opc.core.models import ExecutionCheckpoint, Task
|
|
from opc.plugins.office_ui.snapshot_builder import (
|
|
_attach_or_create_checkpoint_card,
|
|
_build_snapshot_checkpoint_meta,
|
|
_checkpoint_meta_targets_task,
|
|
_message_can_host_checkpoint_meta,
|
|
)
|
|
from opc.plugins.office_ui.ws_handler import WSHandler
|
|
|
|
|
|
class DeliveryFeedbackCardDedupTests(unittest.IsolatedAsyncioTestCase):
|
|
async def test_snapshot_delivery_feedback_meta_carries_waiting_task_id(self) -> None:
|
|
checkpoint = ExecutionCheckpoint(
|
|
checkpoint_id="cp-delivery",
|
|
project_id="p1",
|
|
session_id="delivery-session",
|
|
task_id="delivery-task",
|
|
checkpoint_type="company_delivery_feedback",
|
|
payload={
|
|
"waiting_task_id": "delivery-task",
|
|
"work_item_projection_id": "chief_analyst::delivery",
|
|
"work_item_turn_type": "deliver",
|
|
"feedback_scope": "final",
|
|
"prompt": "Please review.",
|
|
"delivery_package": {"executive_summary": "Ready for review."},
|
|
"delivery_revision": 4,
|
|
"owner_directive_revision": 4,
|
|
"latest_user_directive": "Make the PPT visual.",
|
|
"waiting_work_item_id": "wi-delivery",
|
|
"result_content": "Current delivery content.",
|
|
},
|
|
)
|
|
engine = SimpleNamespace(
|
|
get_latest_pending_checkpoint_for_session=AsyncMock(return_value=checkpoint),
|
|
)
|
|
task = Task(id="delivery-task", title="Delivery", project_id="p1", session_id="delivery-session")
|
|
|
|
metadata = await _build_snapshot_checkpoint_meta(engine, task)
|
|
|
|
assert metadata is not None
|
|
self.assertEqual(metadata["checkpoint_type"], "company_delivery_feedback")
|
|
self.assertEqual(metadata["checkpoint_id"], "cp-delivery")
|
|
self.assertEqual(metadata["waiting_task_id"], "delivery-task")
|
|
self.assertEqual(metadata["task_id"], "delivery-task")
|
|
self.assertEqual(metadata["delivery_revision"], 4)
|
|
self.assertEqual(metadata["owner_directive_revision"], 4)
|
|
self.assertEqual(metadata["latest_user_directive"], "Make the PPT visual.")
|
|
self.assertEqual(metadata["waiting_work_item_id"], "wi-delivery")
|
|
self.assertEqual(metadata["result_content"], "Current delivery content.")
|
|
self.assertEqual(metadata["summary"], "Ready for review.")
|
|
self.assertEqual([option["id"] for option in metadata["options"]], ["approve", "ignore", "feedback"])
|
|
|
|
def test_ws_delivery_feedback_meta_uses_current_result_payload(self) -> None:
|
|
checkpoint = ExecutionCheckpoint(
|
|
checkpoint_id="cp-delivery-current",
|
|
project_id="p1",
|
|
session_id="delivery-session",
|
|
task_id="delivery-task",
|
|
checkpoint_type="company_delivery_feedback",
|
|
payload={
|
|
"waiting_task_id": "delivery-task",
|
|
"waiting_work_item_id": "wi-delivery",
|
|
"work_item_projection_id": "chief_analyst::delivery",
|
|
"work_item_turn_type": "deliver",
|
|
"feedback_scope": "final",
|
|
"prompt": "Please review.",
|
|
"result_content": "This round produced the picture-first PPT.",
|
|
"delivery_revision": 5,
|
|
"owner_directive_revision": 5,
|
|
},
|
|
)
|
|
|
|
metadata = WSHandler._build_delivery_feedback_meta(WSHandler.__new__(WSHandler), checkpoint)
|
|
|
|
self.assertEqual(metadata["summary"], "This round produced the picture-first PPT.")
|
|
self.assertEqual(metadata["delivery_revision"], 5)
|
|
self.assertEqual(metadata["waiting_work_item_id"], "wi-delivery")
|
|
self.assertEqual([option["id"] for option in metadata["options"]], ["approve", "ignore", "feedback"])
|
|
|
|
def test_snapshot_compensation_creates_card_when_no_assistant_message_exists(self) -> None:
|
|
messages = [
|
|
{
|
|
"message_id": "user-only",
|
|
"channel_id": "session:delivery-task",
|
|
"sender": "user",
|
|
"content": "Please revise.",
|
|
"metadata": {},
|
|
},
|
|
]
|
|
|
|
_attach_or_create_checkpoint_card(
|
|
messages,
|
|
channel_id="session:delivery-task",
|
|
checkpoint_meta={
|
|
"checkpoint_type": "company_delivery_feedback",
|
|
"checkpoint_id": "cp-delivery-current",
|
|
"waiting_task_id": "delivery-task",
|
|
"summary": "Current delivery is ready.",
|
|
"prompt": "Review the current delivery.",
|
|
},
|
|
)
|
|
|
|
self.assertEqual(len(messages), 2)
|
|
self.assertEqual(messages[-1]["message_id"], "checkpoint::cp-delivery-current")
|
|
self.assertEqual(messages[-1]["metadata"]["checkpoint_id"], "cp-delivery-current")
|
|
|
|
def test_delivery_feedback_checkpoint_targets_only_waiting_task(self) -> None:
|
|
waiting_task = Task(id="delivery-task", title="Delivery", project_id="p1")
|
|
parent_task = Task(id="root-task", title="Root", project_id="p1")
|
|
metadata = {
|
|
"checkpoint_type": "company_delivery_feedback",
|
|
"checkpoint_id": "cp-delivery",
|
|
"waiting_task_id": "delivery-task",
|
|
}
|
|
|
|
self.assertTrue(_checkpoint_meta_targets_task(metadata, waiting_task))
|
|
self.assertFalse(_checkpoint_meta_targets_task(metadata, parent_task))
|
|
self.assertTrue(WSHandler._checkpoint_metadata_targets_task(metadata, waiting_task))
|
|
self.assertFalse(WSHandler._checkpoint_metadata_targets_task(metadata, parent_task))
|
|
|
|
def test_delivery_feedback_checkpoint_skips_mirrors_and_worker_notifications(self) -> None:
|
|
metadata = {
|
|
"checkpoint_type": "company_delivery_feedback",
|
|
"checkpoint_id": "cp-delivery",
|
|
"waiting_task_id": "delivery-task",
|
|
}
|
|
delivery_message = {
|
|
"sender": "chief_analyst",
|
|
"metadata": {"transcript_kind": "child_task_result"},
|
|
}
|
|
parent_mirror = {
|
|
"sender": "chief_analyst",
|
|
"metadata": {"transcript_kind": "child_result"},
|
|
}
|
|
worker_notification = {
|
|
"sender": "system",
|
|
"metadata": {"kind": "worker_notification"},
|
|
}
|
|
|
|
self.assertTrue(_message_can_host_checkpoint_meta(delivery_message, metadata))
|
|
self.assertFalse(_message_can_host_checkpoint_meta(parent_mirror, metadata))
|
|
self.assertFalse(_message_can_host_checkpoint_meta(worker_notification, metadata))
|
|
self.assertTrue(WSHandler._message_can_host_checkpoint_metadata(delivery_message, metadata))
|
|
self.assertFalse(WSHandler._message_can_host_checkpoint_metadata(parent_mirror, metadata))
|
|
self.assertFalse(WSHandler._message_can_host_checkpoint_metadata(worker_notification, metadata))
|