"""回归测试: team_names.normalize NFKD 去变音导致同一俱乐部映射成两个队名。 验证: 1. München / Munich / Munchen → 同一规范名 2. Atlético / Atletico → 同一规范名 3. Köln / Koln → 同一规范名 4. Mönchengladbach / Monchengladbach / M'gladbach → 同一规范名 """ from __future__ import annotations from src.data.team_names import normalize class TestNormalizeVariants: """同一俱乐部的不同变音写法应映射到同一规范名。""" def test_bayern_munich_variants(self): """Bayern München / Munich / Munchen → 同一规范名。""" canonical = normalize("Bayern München") assert canonical == "Bayern München" assert normalize("Bayern Munich") == canonical assert normalize("Bayern Munchen") == canonical def test_atletico_madrid_variants(self): """Atlético Madrid / Atletico Madrid → 同一规范名。""" canonical = normalize("Atlético Madrid") assert canonical == "Atlético Madrid" assert normalize("Atletico Madrid") == canonical def test_koln_variants(self): """FC Köln / FC Koln → 同一规范名。""" canonical = normalize("FC Köln") assert canonical == "FC Köln" assert normalize("FC Koln") == canonical def test_monchengladbach_variants(self): """Mönchengladbach / Monchengladbach / M'gladbach → 同一规范名。""" canonical = normalize("Borussia Mönchengladbach") assert canonical == "Borussia Mönchengladbach" assert normalize("Borussia Monchengladbach") == canonical assert normalize("Borussia M'gladbach") == canonical def test_leganes_variants(self): """Leganés / Leganes → 同一规范名。""" canonical = normalize("Leganés") assert canonical == "Leganés" assert normalize("Leganes") == canonical def test_alaves_variants(self): """Deportivo Alavés / Alaves → 同一规范名。""" canonical = normalize("Deportivo Alavés") assert canonical == "Deportivo Alavés" assert normalize("Deportivo Alaves") == canonical def test_saint_etienne_variants(self): """AS Saint-Étienne / Saint-Etienne → 同一规范名。""" canonical = normalize("AS Saint-Étienne") assert canonical == "AS Saint-Étienne" assert normalize("Saint-Etienne") == canonical def test_empty_and_none(self): """空字符串应返回空。""" assert normalize("") == "" assert normalize(None) == "" def test_original_name_takes_priority(self): """原始名(带变音)应优先于 NFKD 去变音名。""" # "Bayern München" 在 map 中有键,应直接命中 # 而不是先 NFKD 成 "Bayern Munchen" 再查 result = normalize("Bayern München") assert result == "Bayern München"