feat: add session-level publish and comment flow
This commit is contained in:
@ -11,6 +11,7 @@ from biliup_next.core.models import Task, TaskContext
|
||||
class FakeRepo:
|
||||
def __init__(self, task: Task, context: TaskContext | None = None, contexts: list[TaskContext] | None = None) -> None:
|
||||
self.task = task
|
||||
self.tasks = {task.id: task}
|
||||
self.context = context
|
||||
self.contexts = contexts or ([] if context is None else [context])
|
||||
self.task_context_upserts: list[TaskContext] = []
|
||||
@ -19,7 +20,7 @@ class FakeRepo:
|
||||
self.updated_session_bvid: tuple[str, str, str] | None = None
|
||||
|
||||
def get_task(self, task_id: str) -> Task | None:
|
||||
return self.task if task_id == self.task.id else None
|
||||
return self.tasks.get(task_id)
|
||||
|
||||
def get_task_context(self, task_id: str) -> TaskContext | None:
|
||||
return self.context if task_id == self.task.id else None
|
||||
@ -78,6 +79,56 @@ class SessionDeliveryServiceTests(unittest.TestCase):
|
||||
self.assertTrue(persisted_path.exists())
|
||||
self.assertEqual(persisted_path.read_text(encoding="utf-8"), "BVWEBHOOK123")
|
||||
|
||||
def test_receive_full_video_webhook_uses_source_title_to_expand_to_session(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
task = Task("task-1", "local_file", "/tmp/source.mp4", "task-title", "published", "2026-01-01T00:00:00+00:00", "2026-01-01T00:00:00+00:00")
|
||||
anchor = TaskContext(
|
||||
id=None,
|
||||
task_id="task-1",
|
||||
session_key="session-anchor",
|
||||
streamer="streamer",
|
||||
room_id="room",
|
||||
source_title="anchor-title",
|
||||
segment_started_at=None,
|
||||
segment_duration_seconds=None,
|
||||
full_video_bvid=None,
|
||||
created_at="2026-01-01T00:00:00+00:00",
|
||||
updated_at="2026-01-01T00:00:00+00:00",
|
||||
)
|
||||
sibling = TaskContext(
|
||||
id=None,
|
||||
task_id="task-2",
|
||||
session_key="session-anchor",
|
||||
streamer="streamer",
|
||||
room_id="room",
|
||||
source_title="sibling-title",
|
||||
segment_started_at=None,
|
||||
segment_duration_seconds=None,
|
||||
full_video_bvid=None,
|
||||
created_at="2026-01-01T00:00:00+00:00",
|
||||
updated_at="2026-01-01T00:00:00+00:00",
|
||||
)
|
||||
repo = FakeRepo(task, context=anchor, contexts=[anchor, sibling])
|
||||
repo.tasks["task-2"] = Task(
|
||||
"task-2",
|
||||
"local_file",
|
||||
"/tmp/source-2.mp4",
|
||||
"task-title-2",
|
||||
"published",
|
||||
"2026-01-01T00:00:00+00:00",
|
||||
"2026-01-01T00:00:00+00:00",
|
||||
)
|
||||
state = {"repo": repo, "settings": {"paths": {"session_dir": str(Path(tmpdir) / "session")}}}
|
||||
|
||||
result = SessionDeliveryService(state).receive_full_video_webhook(
|
||||
{"source_title": "anchor-title", "full_video_bvid": "BVWEBHOOK123"}
|
||||
)
|
||||
|
||||
self.assertEqual(result["session_key"], "session-anchor")
|
||||
self.assertEqual(result["updated_count"], 2)
|
||||
self.assertTrue(any(binding.session_key == "session-anchor" for binding in repo.session_binding_upserts))
|
||||
self.assertTrue(any(binding.source_title == "anchor-title" for binding in repo.session_binding_upserts))
|
||||
|
||||
def test_merge_session_returns_error_when_task_ids_empty(self) -> None:
|
||||
task = Task("task-1", "local_file", "/tmp/source.mp4", "task-title", "created", "2026-01-01T00:00:00+00:00", "2026-01-01T00:00:00+00:00")
|
||||
repo = FakeRepo(task)
|
||||
|
||||
Reference in New Issue
Block a user