import unittest
from check_review import validate

GOOD = "- [ ] (severity: high) src/refund.py:2 : Exact-total refunds no longer call the gateway."


class ReviewContractTests(unittest.TestCase):
    def test_valid_outputs(self):
        for text in [GOOD, "No blocking issues found.", GOOD + "\n- [ ] (severity: low) src/a.py:7 : Missing optional fallback.", GOOD + "\n"]:
            with self.subTest(text=text):
                validate(text)

    def test_rejects_malformed_outputs(self):
        cases = ["", "   ", "Looks good", GOOD + "\nextra prose", GOOD + "\n\n" + GOOD,
                 GOOD.replace("high", "critical"), GOOD.replace(":2 :", ":0 :"),
                 GOOD.replace("src/refund.py", "my file.py"),
                 GOOD.replace("src/refund.py", "/etc/passwd"),
                 GOOD.replace("src/refund.py", "../outside.py"),
                 GOOD.replace("src/refund.py", r"src\refund.py"), "\n".join([GOOD] * 9),
                 GOOD.replace("high", "low") + "\n" + GOOD,
                 "No blocking issues found.\n" + GOOD,
                 "```text\n" + GOOD + "\n```", "- [ ] (severity: high) src/a.py:1 : "]
        for text in cases:
            with self.subTest(text=text), self.assertRaises(ValueError):
                validate(text)

    def test_format_does_not_prove_correctness(self):
        # This invented claim is grammatically valid; correctness needs a separate review.
        validate("- [ ] (severity: high) nonexistent.py:999 : An invented defect.")


if __name__ == "__main__":
    unittest.main()
