"""Tests for edition/variant tagging on wikis that cover two editions at once.""" from __future__ import annotations import pytest from wikikb import config, variant # Ordered most-specific-first, exactly as a profile declares it. _KCD = (("kcd2", "KCD2"), ("kcd1", "KCD")) @pytest.fixture(autouse=True) def _variants(monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setattr(config, "VARIANTS", _KCD) @pytest.mark.parametrize( ("title", "categories", "expected"), [ ("Alchemy/KCD2", [], "kcd2"), # title suffix ("Common longsword", ["KCD2: Weapons"], "kcd2"), # bare title, category only ("Lockpicking", ["KCD: Skills"], "kcd1"), # "KCD main quests" has no colon: a "KCD:"-prefix test would miss it, and a # naive "KCD" test would also match every KCD2 category. ("Awakening", ["KCD main quests"], "kcd1"), ("Weapons", ["KCD: Items", "KCD2: Weapons"], "both"), ("Moravia", ["Countries"], "unknown"), ], ) def test_classify(title: str, categories: list[str], expected: str) -> None: assert variant.classify(title, categories) == expected def test_classify_without_configured_variants(monkeypatch: pytest.MonkeyPatch) -> None: # Most wikis cover one subject; tagging is off unless a profile declares it. monkeypatch.setattr(config, "VARIANTS", ()) assert variant.classify("Alchemy/KCD2", ["KCD2: Skills"]) == "unknown" def test_matches_excludes_only_the_other_edition() -> None: assert variant.matches("kcd2", "kcd2") assert variant.matches("both", "kcd2") assert variant.matches("unknown", "kcd2") # untagged pages stay in scope assert not variant.matches("kcd1", "kcd2") def test_matches_any_scope() -> None: for name in ("kcd1", "kcd2", "both", "unknown"): assert variant.matches(name, "any")