6e00c9d3c3
Deploy / Build Production Runtime Images (push) Has been skipped
Deploy / Deploy Production (push) Has been skipped
Deploy / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 18s
Deploy / Deploy Staging (push) Successful in 1s
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
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(
|
|
workspace_id="workspace-1",
|
|
project_id="project-1",
|
|
text="普通标题",
|
|
category="default",
|
|
created_by_user_id="user-1",
|
|
)
|
|
favorite = repository.create(
|
|
workspace_id="workspace-1",
|
|
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",
|
|
workspace_id="workspace-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,
|
|
SimpleNamespace(strategy_id="title-1", workspace_id="workspace-1", project_id="project-1"),
|
|
)
|
|
|
|
updated = session.query(ProjectTitleModel).filter(ProjectTitleModel.id == "title-1").first()
|
|
assert updated.usage_count == 3
|