"""Tests de l'agrégation des minifigs par personnage.""" from pathlib import Path from lib.rebrickable.minifig_characters import aggregate_by_character, write_character_counts def test_aggregate_by_character_counts_unique_figs() -> None: """Compter les minifigs distinctes par personnage en excluant les noms vides.""" aggregates = aggregate_by_character( [ {"set_num": "123-1", "part_num": "head-a", "known_character": "Owen Grady", "fig_num": "fig-owen-1"}, {"set_num": "124-1", "part_num": "head-b", "known_character": "Owen Grady", "fig_num": "fig-owen-1"}, {"set_num": "125-1", "part_num": "head-c", "known_character": "Owen Grady", "fig_num": "fig-owen-2"}, {"set_num": "126-1", "part_num": "head-d", "known_character": "Figurant", "fig_num": "fig-guard-1"}, {"set_num": "128-1", "part_num": "head-f", "known_character": "Figurant", "fig_num": "fig-guard-1"}, {"set_num": "129-1", "part_num": "head-g", "known_character": "", "fig_num": "fig-guard-2"}, ] ) assert aggregates == [ {"known_character": "Owen Grady", "minifig_count": 2}, {"known_character": "Figurant", "minifig_count": 1}, ] def test_write_character_counts_outputs_csv(tmp_path: Path) -> None: """Écrit le CSV des comptes par personnage.""" destination = tmp_path / "counts.csv" rows = [ {"known_character": "A", "minifig_count": 2}, {"known_character": "B", "minifig_count": 1}, ] write_character_counts(destination, rows) assert destination.read_text() == "known_character,minifig_count\nA,2\nB,1\n"