legco_ai_assistant/backend/app/test/test_phase4_prompt_template...

74 lines
2.6 KiB
Python

"""Tests for Phase 4.4 — Prompt template updates for per-sub-question pipeline.
Covers:
- generate template uses {context_sections} placeholder (not {context})
- Built-in fallback template uses {context_sections}
- reset_to_defaults() resets generate to the new template
"""
import os
import tempfile
import pytest
from app.core.sqlite_db import init_prompts_db, seed_default_profiles
from app.services.prompt_service import PromptService
@pytest.fixture
def prompt_service():
"""Create a PromptService backed by a temp DB with seeded profiles."""
db_dir = tempfile.mkdtemp()
db_path = os.path.join(db_dir, "test_prompts.db")
import sqlite3
conn = sqlite3.connect(db_path)
conn.row_factory = sqlite3.Row
init_prompts_db(conn)
seed_default_profiles(conn)
conn.close()
return PromptService(db_path=db_path)
def test_generate_template_uses_context_sections(prompt_service):
"""When PromptService returns the generate_per_subq template,
{context_sections} placeholder must be present."""
template = prompt_service.get_prompt_template("generate_per_subq")
assert "{context_sections}" in template
def test_builtin_generate_template_has_context_sections():
"""The per-subq seed template (_SEED_GENERATE_PER_SUBQ) uses
{context_sections}, while the flat generate uses {question}/{context}."""
from app.core.sqlite_db import _SEED_GENERATE_PER_SUBQ, _SEED_GENERATE
assert "{context_sections}" in _SEED_GENERATE_PER_SUBQ
assert "{question}" in _SEED_GENERATE
assert "{context}" in _SEED_GENERATE
def test_reset_to_defaults_includes_new_generate_template(prompt_service):
"""After calling reset_to_defaults(), generate_per_subq uses
{context_sections} and flat generate uses {question}/{context}."""
profile_name = prompt_service.get_active_profile_name()
# Modify both templates
prompt_service.update_prompt(profile_name, "generate_per_subq", "custom per-subq")
prompt_service.update_prompt(profile_name, "generate", "custom flat")
modified_per_subq = prompt_service.get_prompt_template("generate_per_subq")
assert "custom per-subq" == modified_per_subq
modified_flat = prompt_service.get_prompt_template("generate")
assert "custom flat" == modified_flat
prompt_service.reset_to_defaults(profile_name)
template_per_subq = prompt_service.get_prompt_template("generate_per_subq")
assert "{context_sections}" in template_per_subq
template_flat = prompt_service.get_prompt_template("generate")
assert "{question}" in template_flat
assert "{context}" in template_flat