"""Prompt-scaffolding tests (#960) — render, версионирование, отсутствие шаблона.""" from __future__ import annotations import pytest from app.services.llm.prompts import ( PromptNotFoundError, PromptTemplate, get_template, render, ) def test_get_known_template() -> None: tpl = get_template("system_base") assert tpl.name == "system_base" assert tpl.version == 1 assert tpl.key == "system_base@v1" def test_get_unknown_template_raises() -> None: with pytest.raises(PromptNotFoundError): get_template("does_not_exist") def test_render_known_template() -> None: out = render("system_base") assert "ассистент" in out def test_render_with_required_vars() -> None: """render подставляет переменные через str.format и валидирует required_vars.""" tpl = PromptTemplate( name="probe", version=1, template="zone={zone}", required_vars=("zone",), ) # Прямой рендер шаблона (не из реестра) — проверяем format-механику. assert tpl.template.format(zone="Ц-1") == "zone=Ц-1" def test_render_missing_required_var_raises() -> None: """Если шаблон требует переменную, а её нет → KeyError (для зарегистрированного).""" with pytest.raises(PromptNotFoundError): render("missing_template", zone="Ц-1")