import pytest from core.system_prompt import get_system_prompt from core.config import OLLAMA_MODELS, OPENAI_MODELS MODELS = ["qwen3.5:cloud"] @pytest.fixture(params=MODELS) def prompt(request): return get_system_prompt(request.param) @pytest.fixture(params=MODELS) def prompt_lower(request): return get_system_prompt(request.param).lower() class TestPromptContainsModelName: def test_model_name_appears_in_prompt(self, prompt, request): model = request.node.callspec.params["prompt"] assert model in prompt class TestRequiredSections: def test_has_role_section(self, prompt_lower): assert "role" in prompt_lower def test_has_operational_constraints(self, prompt_lower): assert "constraint" in prompt_lower or "not allowed" in prompt_lower or "do not" in prompt_lower def test_has_workflow_steps(self, prompt_lower): assert "step" in prompt_lower or "workflow" in prompt_lower def test_has_error_recovery(self, prompt_lower): assert "error" in prompt_lower or "not found" in prompt_lower def test_has_response_format(self, prompt_lower): assert "format" in prompt_lower or "response" in prompt_lower class TestSupportedDomains: def test_courts_mentioned(self, prompt_lower): assert "court" in prompt_lower or "súd" in prompt_lower or "sud" in prompt_lower def test_judges_mentioned(self, prompt_lower): assert "judge" in prompt_lower or "sudca" in prompt_lower or "sudcovia" in prompt_lower def test_decisions_mentioned(self, prompt_lower): assert "decision" in prompt_lower or "rozhodnut" in prompt_lower def test_contracts_mentioned(self, prompt_lower): assert "contract" in prompt_lower or "zmluv" in prompt_lower def test_civil_proceedings_mentioned(self, prompt_lower): assert "civil" in prompt_lower or "obcian" in prompt_lower or "pojednavan" in prompt_lower def test_admin_proceedings_mentioned(self, prompt_lower): assert "admin" in prompt_lower or "spravne" in prompt_lower or "správne" in prompt_lower class TestConstraints: def test_no_legal_advice_constraint(self, prompt_lower): assert "legal advisor" in prompt_lower or "not a lawyer" in prompt_lower or "legal advice" in prompt_lower def test_api_only_constraint(self, prompt_lower): assert "api" in prompt_lower def test_slovak_language_requirement(self, prompt_lower): assert "slovak" in prompt_lower or "slovensk" in prompt_lower def test_no_raw_json_rule(self, prompt_lower): assert "json" in prompt_lower or "technical" in prompt_lower def test_no_speculate_rule(self, prompt_lower): assert "speculate" in prompt_lower or "infer" in prompt_lower or "gaps" in prompt_lower class TestPaginationRules: def test_page_starts_at_zero_mentioned(self, prompt_lower): assert "page" in prompt_lower and "0" in prompt_lower def test_autocomplete_preferred_mentioned(self, prompt_lower): assert "autocomplete" in prompt_lower class TestDateRules: def test_date_format_dd_mm_yyyy_mentioned(self, prompt): assert "DD.MM.YYYY" in prompt or "dd.mm.yyyy" in prompt.lower() def test_civil_date_field_mentioned(self, prompt_lower): assert "pojednavaniaod" in prompt_lower or "pojednavania" in prompt_lower def test_decision_date_field_mentioned(self, prompt_lower): assert "vydaniaod" in prompt_lower or "vydania" in prompt_lower class TestIDNormalizationRules: def test_sud_prefix_mentioned(self, prompt_lower): assert "sud_" in prompt_lower def test_sudca_prefix_mentioned(self, prompt_lower): assert "sudca_" in prompt_lower def test_spravnekonanie_prefix_mentioned(self, prompt_lower): assert "spravnekonanie_" in prompt_lower or "spravne" in prompt_lower class TestPromptLength: def test_prompt_is_not_empty(self, prompt): assert len(prompt.strip()) > 0 def test_prompt_has_minimum_length(self, prompt): assert len(prompt) > 500 def test_prompt_has_reasonable_max_length(self, prompt): assert len(prompt) < 50_000