import tempfile
from pathlib import Path
import unittest
from verify_acceptance import inspect
class ReportGateTest(unittest.TestCase):
def test_missing_reports_cannot_pass(self):
with tempfile.TemporaryDirectory() as tmp:
result = inspect(Path(tmp), {f"A{i:02}": ["Suite#case"] for i in range(1, 21)})
self.assertFalse(result["passed"])
def test_passed_skipped_failed_and_external_reports(self):
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
for folder in ("surefire-reports", "failsafe-reports"):
(root / folder).mkdir()
(root / folder / "TEST-Suite.xml").write_text('')
manifest = {f"A{i:02}": ["Suite#case"] for i in range(1, 21)}
self.assertTrue(inspect(root, manifest)["passed"])
extra = root / "surefire-reports/TEST-Extra.xml"
extra.write_text('')
self.assertFalse(inspect(root, manifest)["passed"], "Even an unmapped skipped test must fail the gate")
extra.unlink()
for status in ("failure", "error", "skipped"):
(root / "failsafe-reports/TEST-Suite.xml").write_text(f'<{status}/>')
self.assertFalse(inspect(root, manifest)["passed"])
(root / "failsafe-reports/TEST-Suite.xml").write_text('')
self.assertEqual(["external-postgresql"], inspect(root, manifest)["environment"])
manifest["A03"] = ["Suite#missing"]
self.assertFalse(inspect(root, manifest)["passed"])
if __name__ == "__main__":
unittest.main()