diff --git a/test_amateurfunk_anki.py b/test_amateurfunk_anki.py index 3fdf7ba..ad86a07 100644 --- a/test_amateurfunk_anki.py +++ b/test_amateurfunk_anki.py @@ -489,5 +489,29 @@ class TestAnkiBuild(unittest.TestCase): self.assertEqual(first.read_bytes(), second.read_bytes(), first.name) +class TestRealExplanationsFile(unittest.TestCase): + """Validate the repo's actual explanations.json against the live catalog. + + The other tests are hermetic by design: they exercise the schema + validator on synthetic fixtures so the validator's own logic is + tested without coupling to editorial data. That leaves a gap — a + real malformed entry or stale key in the repo's explanations.json + would not show up in `python3 -m unittest`. This test closes it + when the fetched catalog is present, and skips otherwise so an + unfetched checkout still runs the rest of the suite. + """ + + def test_repo_explanations_pass_schema_and_match_catalog(self): + repo = Path(__file__).resolve().parent + explanations_path = repo / "explanations.json" + catalogs = sorted((repo / "data").glob("*/fragenkatalog*.json")) + if not explanations_path.exists() or not catalogs: + self.skipTest("explanations.json or fetched catalog not available") + explanations = aa.load_explanations(explanations_path) + catalog = json.loads(catalogs[-1].read_text("utf-8")) + categories = aa.collect_categories(catalog) + aa._check_explanation_keys_against_catalog(explanations, categories) + + if __name__ == "__main__": unittest.main()