"""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