diff --git a/tests/integration/test_generation_api.py b/tests/integration/test_generation_api.py index 17256c7ef..4160b8ca0 100755 --- a/tests/integration/test_generation_api.py +++ b/tests/integration/test_generation_api.py @@ -139,6 +139,38 @@ class StubGenerationTaskRepository: return [t for t in self._tasks.values() if getattr(t, "source_edit_plan_id", "") == plan_id] + def list_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + limit: int | None = None, + offset: int = 0, + ) -> list: + """按用户+状态筛选任务列表(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + # 按创建时间倒序 + items.sort(key=lambda t: t.created_at or "", reverse=True) + if offset: + items = items[offset:] + if limit is not None: + items = items[:limit] + return items + + def count_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + ) -> int: + """按用户+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + return len(items) + class StubGeneratedVideoRepository: def __init__(self, videos: dict[str, GeneratedVideo] | None = None): self._videos = videos or {} diff --git a/tests/integration/test_task_center_api.py b/tests/integration/test_task_center_api.py index a55f5b2ee..1fb37c5b2 100755 --- a/tests/integration/test_task_center_api.py +++ b/tests/integration/test_task_center_api.py @@ -104,6 +104,38 @@ class StubGenerationTaskRepository: return [t for t in self._tasks.values() if getattr(t, "source_edit_plan_id", "") == plan_id] + def list_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + limit: int | None = None, + offset: int = 0, + ) -> list: + """按用户+状态筛选任务列表(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + # 按创建时间倒序 + items.sort(key=lambda t: t.created_at or "", reverse=True) + if offset: + items = items[offset:] + if limit is not None: + items = items[:limit] + return items + + def count_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + ) -> int: + """按用户+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + return len(items) + class StubIngestJobRepository: def __init__(self, jobs: dict[str, IngestJob] | None = None): self._jobs = jobs or {} diff --git a/tests/unit/test_edit_plan_generation_api.py b/tests/unit/test_edit_plan_generation_api.py index 1479514d9..168e0da8f 100644 --- a/tests/unit/test_edit_plan_generation_api.py +++ b/tests/unit/test_edit_plan_generation_api.py @@ -198,6 +198,39 @@ class StubGenerationTaskRepository: @dataclass + + def list_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + limit: int | None = None, + offset: int = 0, + ) -> list: + """按用户+状态筛选任务列表(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + # 按创建时间倒序 + items.sort(key=lambda t: t.created_at or "", reverse=True) + if offset: + items = items[offset:] + if limit is not None: + items = items[:limit] + return items + + def count_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + ) -> int: + """按用户+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + return len(items) + class FakeUser: id: str = "user-001" email: str = "test@example.com" diff --git a/tests/unit/test_edit_plan_service.py b/tests/unit/test_edit_plan_service.py index eb9be6c2c..3177ead81 100755 --- a/tests/unit/test_edit_plan_service.py +++ b/tests/unit/test_edit_plan_service.py @@ -223,6 +223,38 @@ def _make_service(): # =========================================================================== + def list_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + limit: int | None = None, + offset: int = 0, + ) -> list: + """按用户+状态筛选任务列表(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + # 按创建时间倒序 + items.sort(key=lambda t: t.created_at or "", reverse=True) + if offset: + items = items[offset:] + if limit is not None: + items = items[:limit] + return items + + def count_by_user_filtered( + self, + user_id: str, + *, + status: str | None = None, + ) -> int: + """按用户+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.created_by_user_id == user_id] + if status: + items = [t for t in items if str(t.status) == status] + return len(items) + class TestEditPlanServiceCRUD: """计划 CRUD 测试""" diff --git a/tests/unit/test_generation_presigned_url.py b/tests/unit/test_generation_presigned_url.py index d22088206..61eea45a9 100755 --- a/tests/unit/test_generation_presigned_url.py +++ b/tests/unit/test_generation_presigned_url.py @@ -65,6 +65,22 @@ class StubGenerationTaskRepository: return 0 + def list_by_user_filtered(self, user_id, *, status=None, limit=None, offset=0): + items = [t for t in self._tasks.values() if getattr(t, 'created_by_user_id', None) == user_id] + if status: + items = [t for t in items if getattr(t, 'status', None) == status] + if offset: + items = items[offset:] + if limit is not None: + items = items[:limit] + return items + + def count_by_user_filtered(self, user_id, *, status=None): + items = [t for t in self._tasks.values() if getattr(t, 'created_by_user_id', None) == user_id] + if status: + items = [t for t in items if getattr(t, 'status', None) == status] + return len(items) + class StubGeneratedVideoRepository: def __init__(self, videos=None): self._videos = videos or {}