"""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 template, {context_sections} placeholder must be present and old {context} removed.""" template = prompt_service.get_prompt_template("generate") assert "{context_sections}" in template assert "{context}" not in template def test_builtin_generate_template_has_context_sections(): """When no prompt_service, the built-in seed template uses {context_sections} instead of {context}.""" from app.core.sqlite_db import _SEED_GENERATE assert "{context_sections}" in _SEED_GENERATE assert "{context}" not in _SEED_GENERATE def test_reset_to_defaults_includes_new_generate_template(prompt_service): """After calling reset_to_defaults() on a profile, the generate step uses {context_sections} placeholder.""" profile_name = prompt_service.get_active_profile_name() prompt_service.update_prompt(profile_name, "generate", "custom template with {context}") modified = prompt_service.get_prompt_template("generate") assert "{context}" in modified assert "{context_sections}" not in modified prompt_service.reset_to_defaults(profile_name) template = prompt_service.get_prompt_template("generate") assert "{context_sections}" in template assert "{context}" not in template