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
This commit is contained in:
@@ -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) == []
|
||||
Reference in New Issue
Block a user