From 3fecffe676515e3af7c9297c300bc5b6677d4d82 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Fri, 6 Mar 2026 17:28:09 -0500 Subject: [PATCH] test: verify `language_ids.py` coverage and unknown-key fallback Problem: No tests verified that `language_ids.py` had entries for all six platforms and both core languages, or that unknown lookups returned `None` instead of raising. Solution: Add `test_language_ids_coverage` (asserts every platform has `cpp` and `python` entries with non-empty string values) and `test_language_ids_unknown_returns_none` (verifies fallback for unknown platform or language keys). --- tests/test_scrapers.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/test_scrapers.py b/tests/test_scrapers.py index c4fa6d5..25d2d80 100644 --- a/tests/test_scrapers.py +++ b/tests/test_scrapers.py @@ -1,5 +1,6 @@ import pytest +from scrapers.language_ids import LANGUAGE_IDS, get_language_id from scrapers.models import ( ContestListResult, MetadataResult, @@ -137,3 +138,21 @@ def test_scraper_metadata_error(run_scraper_offline, scraper, contest_id): assert objs assert objs[-1].get("success") is False assert objs[-1].get("error") + + +EXPECTED_PLATFORMS = {"atcoder", "codeforces", "cses", "usaco", "kattis", "codechef"} +EXPECTED_LANGUAGES = {"cpp", "python"} + + +def test_language_ids_coverage(): + assert set(LANGUAGE_IDS.keys()) == EXPECTED_PLATFORMS + for platform in EXPECTED_PLATFORMS: + for lang in EXPECTED_LANGUAGES: + lid = get_language_id(platform, lang) + assert lid is not None, f"Missing language ID: {platform}/{lang}" + assert isinstance(lid, str) and lid, f"Empty language ID: {platform}/{lang}" + + +def test_language_ids_unknown_returns_none(): + assert get_language_id("codeforces", "rust") is None + assert get_language_id("nonexistent", "cpp") is None