From abe2bfab632aedeb9979232dcb0047e1715c7257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?API=E6=96=87=E6=A1=A3=E7=BB=B4=E6=8A=A4Agent?= Date: Sun, 28 Jun 2026 15:33:00 +0800 Subject: [PATCH] fix: resolve P0 bugs in voice library use cases and clean up obsolete tests - Fix voice_id field mapping in CreateVoiceLibraryUseCase (line 60) - Fix voice_id field mapping in UpdateVoiceLibraryUseCase (lines 88-89) - Delete obsolete test files for removed ProjectTitle modules - Remove edit_plans.py reference from architecture boundaries test --- .../application/voice_library/use_cases.py | 6 +- tests/unit/test_architecture_boundaries.py | 1 - tests/unit/test_project_title_generation.py | 71 ------------------- tests/unit/test_project_title_repository.py | 50 ------------- 4 files changed, 3 insertions(+), 125 deletions(-) delete mode 100644 tests/unit/test_project_title_generation.py delete mode 100644 tests/unit/test_project_title_repository.py diff --git a/packages/application/voice_library/use_cases.py b/packages/application/voice_library/use_cases.py index f03021d79..2c3ae5b58 100644 --- a/packages/application/voice_library/use_cases.py +++ b/packages/application/voice_library/use_cases.py @@ -57,7 +57,7 @@ class CreateVoiceLibraryUseCase: name=command.name, text=command.text, voice_provider=command.voice_provider, - voice_id=command.id, + voice_id=command.voice_id, voice_name=command.voice_name, audio_url=command.audio_url, duration=command.duration, @@ -85,8 +85,8 @@ class UpdateVoiceLibraryUseCase: existing.text = command.text if command.voice_provider is not None: existing.voice_provider = command.voice_provider - if command.id is not None: - existing.voice_id = command.id + if command.voice_id is not None: + existing.voice_id = command.voice_id if command.voice_name is not None: existing.voice_name = command.voice_name if command.audio_url is not None: diff --git a/tests/unit/test_architecture_boundaries.py b/tests/unit/test_architecture_boundaries.py index 016a8f8e5..4828e5f42 100644 --- a/tests/unit/test_architecture_boundaries.py +++ b/tests/unit/test_architecture_boundaries.py @@ -3,7 +3,6 @@ from pathlib import Path ALLOWED_API_ADAPTER_IMPORTS = { Path("apps/api/app/dependencies.py"), Path("apps/api/app/db.py"), - Path("apps/api/app/api/routes/edit_plans.py"), } diff --git a/tests/unit/test_project_title_generation.py b/tests/unit/test_project_title_generation.py deleted file mode 100644 index b9b3877ea..000000000 --- a/tests/unit/test_project_title_generation.py +++ /dev/null @@ -1,71 +0,0 @@ -import sys -from datetime import datetime, timezone -from pathlib import Path -from types import SimpleNamespace - -sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "api")) -sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "worker")) - -from app.api.routes.generation_tasks import _select_title_id -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker -from worker_app.core.title_usage import mark_title_used_for_generation - -from packages.adapters.sqlalchemy_impl.models import Base, ProjectTitleModel -from packages.adapters.sqlalchemy_impl.project_title_repository import SQLAlchemyProjectTitleRepository - - -def _session_and_repository(): - engine = create_engine("sqlite:///:memory:") - Base.metadata.create_all(engine) - session = sessionmaker(bind=engine)() - return session, SQLAlchemyProjectTitleRepository(session) - - -def test_select_title_prefers_favorite_then_lowest_usage(): - _, repository = _session_and_repository() - normal = repository.create( - project_id="project-1", - text="普通标题", - category="default", - created_by_user_id="user-1", - ) - favorite = repository.create( - project_id="project-1", - text="常用标题", - category="default", - favorite=True, - created_by_user_id="user-1", - ) - normal.usage_count = 0 - favorite.usage_count = 10 - repository.update(normal) - repository.update(favorite) - - assert _select_title_id(repository, "project-1") == favorite.id - - -def test_mark_title_used_after_generation_completion(): - session, _ = _session_and_repository() - now = datetime.now(timezone.utc) - title = ProjectTitleModel( - id="title-1", - project_id="project-1", - text="生成标题", - category="default", - favorite=False, - usage_count=2, - is_active=True, - created_by_user_id="user-1", - created_at=now, - updated_at=now, - ) - session.add(title) - session.commit() - - mark_title_used_for_generation( - session, - ) - - updated = session.query(ProjectTitleModel).filter(ProjectTitleModel.id == "title-1").first() - assert updated.usage_count == 3 diff --git a/tests/unit/test_project_title_repository.py b/tests/unit/test_project_title_repository.py deleted file mode 100644 index bd07fbbf3..000000000 --- a/tests/unit/test_project_title_repository.py +++ /dev/null @@ -1,50 +0,0 @@ -import sys -from pathlib import Path - -sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "api")) - -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker - -from packages.adapters.sqlalchemy_impl.models import Base -from packages.adapters.sqlalchemy_impl.project_title_repository import SQLAlchemyProjectTitleRepository - - -def _repository(): - engine = create_engine("sqlite:///:memory:") - Base.metadata.create_all(engine) - session = sessionmaker(bind=engine)() - return SQLAlchemyProjectTitleRepository(session) - - -def test_project_title_repository_creates_and_lists_titles(): - repository = _repository() - - title = repository.create( - project_id="project-1", - text=" 3 分钟看懂产品亮点 ", - category="marketing", - favorite=True, - created_by_user_id="user-1", - ) - - assert title.text == "3 分钟看懂产品亮点" - assert title.category == "marketing" - assert title.favorite is True - assert title.usage_count == 0 - assert title.is_active is True - assert repository.list_by_project("project-1") == [title] - - -def test_project_title_repository_filters_inactive_titles(): - repository = _repository() - title = repository.create( - project_id="project-1", - text="停用标题", - category="default", - created_by_user_id="user-1", - ) - title.is_active = False - repository.update(title) - - assert repository.list_by_project("project-1", active_only=True) == []