fix: resolve P0 bugs in voice library use cases and clean up obsolete tests
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled

- 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
This commit is contained in:
API文档维护Agent
2026-06-28 15:33:00 +08:00
parent a43ddb4b63
commit abe2bfab63
4 changed files with 3 additions and 125 deletions
@@ -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:
@@ -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"),
}
@@ -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
@@ -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) == []