diff --git a/tests/integration/test_generation_api.py b/tests/integration/test_generation_api.py index c4192d439..e516dd0d4 100755 --- a/tests/integration/test_generation_api.py +++ b/tests/integration/test_generation_api.py @@ -170,6 +170,38 @@ class StubGenerationTaskRepository: items = [t for t in items if str(t.status) == status] return len(items) + def list_by_project_filtered( + self, + project_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.project_id == project_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_project_filtered( + self, + project_id: str, + *, + status: str | None = None, + ) -> int: + """按项目+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.project_id == project_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): diff --git a/tests/integration/test_task_center_api.py b/tests/integration/test_task_center_api.py index 7a94f5122..24772bd5e 100755 --- a/tests/integration/test_task_center_api.py +++ b/tests/integration/test_task_center_api.py @@ -135,6 +135,38 @@ class StubGenerationTaskRepository: items = [t for t in items if str(t.status) == status] return len(items) + def list_by_project_filtered( + self, + project_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.project_id == project_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_project_filtered( + self, + project_id: str, + *, + status: str | None = None, + ) -> int: + """按项目+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.project_id == project_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): diff --git a/tests/unit/test_edit_plan_generation_api.py b/tests/unit/test_edit_plan_generation_api.py index d94248d71..85a1b3e03 100644 --- a/tests/unit/test_edit_plan_generation_api.py +++ b/tests/unit/test_edit_plan_generation_api.py @@ -225,6 +225,38 @@ class StubGenerationTaskRepository: items = [t for t in items if str(t.status) == status] return len(items) + def list_by_project_filtered( + self, + project_id: str, + *, + status: str | None = None, + limit: int | None = None, + offset: int = 0, + ) -> list: + """按项目+状态筛选任务列表(stub实现)。""" + items = [t for t in self._store.values() if t.project_id == project_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_project_filtered( + self, + project_id: str, + *, + status: str | None = None, + ) -> int: + """按项目+状态筛选计数(stub实现)。""" + items = [t for t in self._store.values() if t.project_id == project_id] + if status: + items = [t for t in items if str(t.status) == status] + return len(items) + # ── Fixtures ────────────────────────────────────────────────────────────────── diff --git a/tests/unit/test_edit_plan_service.py b/tests/unit/test_edit_plan_service.py index 6b52d5e83..f67335642 100755 --- a/tests/unit/test_edit_plan_service.py +++ b/tests/unit/test_edit_plan_service.py @@ -232,6 +232,38 @@ class StubGenerationTaskRepository: items = [t for t in items if str(t.status) == status] return len(items) + def list_by_project_filtered( + self, + project_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.project_id == project_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_project_filtered( + self, + project_id: str, + *, + status: str | None = None, + ) -> int: + """按项目+状态筛选计数(stub实现)。""" + items = [t for t in self._tasks.values() if t.project_id == project_id] + if status: + items = [t for t in items if str(t.status) == status] + return len(items) + # --------------------------------------------------------------------------- # Service factory diff --git a/tests/unit/test_generation_presigned_url.py b/tests/unit/test_generation_presigned_url.py index 725fc4da2..e4453cbf1 100755 --- a/tests/unit/test_generation_presigned_url.py +++ b/tests/unit/test_generation_presigned_url.py @@ -80,6 +80,22 @@ class StubGenerationTaskRepository: items = [t for t in items if getattr(t, "status", None) == status] return len(items) + def list_by_project_filtered(self, project_id, *, status=None, limit=None, offset=0): + items = [t for t in self._tasks.values() if getattr(t, "project_id", None) == project_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_project_filtered(self, project_id, *, status=None): + items = [t for t in self._tasks.values() if getattr(t, "project_id", None) == project_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):