Spaces:
Running
Running
| """tests/unit/test_assessment_parse.py — @@ASSESSMENT block parsing.""" | |
| from app.assessment_parse import parse_assessment | |
| def test_parses_full_block(): | |
| text = ( | |
| "Your situation fits the Convention on political opinion grounds.\n" | |
| "A nearby country with an active RSD process would suit you.\n" | |
| "@@ASSESSMENT\n" | |
| "grounds: Political opinion | Membership of a particular social group\n" | |
| "risk: high\n" | |
| "countries: Kenya | Uganda\n" | |
| "@@END" | |
| ) | |
| visible, result = parse_assessment(text) | |
| assert "@@ASSESSMENT" not in visible | |
| assert visible.startswith("Your situation fits") | |
| assert result.grounds == ["Political opinion", "Membership of a particular social group"] | |
| assert result.risk == "high" | |
| assert result.countries == ["Kenya", "Uganda"] | |
| def test_missing_block_returns_text_and_empty_result(): | |
| visible, result = parse_assessment("Just reasoning, no block.") | |
| assert visible == "Just reasoning, no block." | |
| assert result.countries == [] | |
| assert result.risk is None | |
| def test_invalid_risk_becomes_none(): | |
| _, result = parse_assessment("x\n@@ASSESSMENT\nrisk: catastrophic\ncountries: Kenya\n@@END") | |
| assert result.risk is None | |
| assert result.countries == ["Kenya"] | |
| def test_block_without_end_marker(): | |
| _, result = parse_assessment("x\n@@ASSESSMENT\nrisk: low\ncountries: Uganda") | |
| assert result.risk == "low" | |
| assert result.countries == ["Uganda"] | |
| def test_prose_summary_drift_is_stripped_and_parsed(): | |
| # The small model sometimes writes a prose summary + a stray @@END instead of | |
| # the @@ASSESSMENT block. None of it may leak onto the screen. | |
| text = ( | |
| "Let me walk through my thinking.\n\n" | |
| "The appropriate classification is economic_or_other.\n\n" | |
| "**Summary of my assessment**\n" | |
| "- case_type: economic_or_other\n" | |
| "- grounds: none (economic reasons not covered)\n" | |
| "- risk: low (no immediate danger, but instability exists)\n" | |
| "- countries: Turkey, Pakistan, Iran (labor-migration examples)\n" | |
| "@@END" | |
| ) | |
| visible, result = parse_assessment(text) | |
| assert "@@END" not in visible | |
| assert "Summary of my assessment" not in visible | |
| assert "case_type:" not in visible | |
| assert visible.endswith("economic_or_other.") | |
| assert result.case_type == "economic_or_other" | |
| assert result.grounds == [] # "none" is not a literal ground | |
| assert result.risk == "low" | |
| assert result.countries == ["Turkey", "Pakistan", "Iran"] | |
| def test_stray_end_marker_alone_is_removed(): | |
| visible, _ = parse_assessment("My reasoning is complete.\n@@END") | |
| assert visible == "My reasoning is complete." | |