You've already forked etude_lego_jurassic_world
Premiers éléments de l'étude
This commit is contained in:
83
tests/test_stats.py
Normal file
83
tests/test_stats.py
Normal file
@@ -0,0 +1,83 @@
|
||||
"""Tests des statistiques calculées sur les sets LEGO filtrés."""
|
||||
|
||||
from lib.rebrickable.stats import compute_basic_stats, write_stats_csv
|
||||
|
||||
|
||||
def test_compute_basic_stats_returns_expected_values(tmp_path) -> None:
|
||||
"""Calcule les statistiques principales sur un échantillon maîtrisé."""
|
||||
themes = [
|
||||
{"id": "602", "name": "Jurassic World", "parent_id": ""},
|
||||
{"id": "274", "name": "Jurassic Park III", "parent_id": "273"},
|
||||
]
|
||||
all_sets = [
|
||||
{"set_num": "123-1", "name": "A", "year": "2020", "theme_id": "602", "num_parts": "100", "img_url": ""},
|
||||
{"set_num": "124-1", "name": "B", "year": "2021", "theme_id": "602", "num_parts": "200", "img_url": ""},
|
||||
{"set_num": "125-1", "name": "C", "year": "2021", "theme_id": "274", "num_parts": "300", "img_url": ""},
|
||||
]
|
||||
filtered_sets = [
|
||||
{"set_num": "123-1", "name": "A", "year": "2020", "theme_id": "602", "num_parts": "100", "img_url": ""},
|
||||
{"set_num": "124-1", "name": "B", "year": "2021", "theme_id": "602", "num_parts": "200", "img_url": ""},
|
||||
]
|
||||
enriched_sets = [
|
||||
{
|
||||
"set_num": "123-1",
|
||||
"name": "A",
|
||||
"year": "2020",
|
||||
"theme_id": "602",
|
||||
"num_parts": "100",
|
||||
"img_url": "",
|
||||
"set_id": "123",
|
||||
"rebrickable_url": "",
|
||||
"in_collection": "true",
|
||||
},
|
||||
{
|
||||
"set_num": "124-1",
|
||||
"name": "B",
|
||||
"year": "2021",
|
||||
"theme_id": "602",
|
||||
"num_parts": "200",
|
||||
"img_url": "",
|
||||
"set_id": "124",
|
||||
"rebrickable_url": "",
|
||||
"in_collection": "false",
|
||||
},
|
||||
]
|
||||
|
||||
stats = compute_basic_stats(themes, all_sets, filtered_sets, enriched_sets)
|
||||
|
||||
assert stats == [
|
||||
("Nombre total de sets (catalogue complet)", "3"),
|
||||
("Nombre total de thèmes (catalogue complet)", "2"),
|
||||
("Nombre de sets après filtrage (thèmes ciblés)", "2"),
|
||||
("Nombre moyen de sets par thème (catalogue complet)", "1.50"),
|
||||
("Pourcentage des sets filtrés vs total", "66.67%"),
|
||||
("Taux de possession (thèmes filtrés)", "50.00%"),
|
||||
("Sets dans la collection", "1"),
|
||||
("Sets manquants pour la collection", "1"),
|
||||
("Nombre moyen de pièces par set (thèmes filtrés)", "150.00"),
|
||||
("Médiane de pièces par set (thèmes filtrés)", "150.00"),
|
||||
("Nombre moyen de sets commercialisés par an (thèmes filtrés)", "1.00"),
|
||||
("Total de pièces pour les thèmes filtrés", "300"),
|
||||
("Total de pièces des sets possédés", "100"),
|
||||
("Pourcentage de pièces possédées (thèmes filtrés)", "33.33%"),
|
||||
("Nombre de thèmes filtrés", "1"),
|
||||
("Première année de sortie (thèmes filtrés)", "2020"),
|
||||
("Dernière année de sortie (thèmes filtrés)", "2021"),
|
||||
("Année la plus prolifique (thèmes filtrés)", "2020 (1 sets)"),
|
||||
("Set avec le plus de pièces (thèmes filtrés)", "124-1 - B (200 pièces)"),
|
||||
("Set avec le moins de pièces (thèmes filtrés)", "123-1 - A (100 pièces)"),
|
||||
("Set le plus ancien (thèmes filtrés)", "123-1 - A (2020)"),
|
||||
("Set le plus récent (thèmes filtrés)", "124-1 - B (2021)"),
|
||||
("Nombre moyen de pièces des sets possédés", "100.00"),
|
||||
("Nombre moyen de pièces des sets manquants", "200.00"),
|
||||
]
|
||||
|
||||
|
||||
def test_write_stats_csv_outputs_two_columns(tmp_path) -> None:
|
||||
"""Écrit un CSV simple avec libellé et valeur."""
|
||||
destination = tmp_path / "stats.csv"
|
||||
stats = [("A", "1"), ("B", "2")]
|
||||
|
||||
write_stats_csv(destination, stats)
|
||||
|
||||
assert destination.read_text() == "libelle,valeur\nA,1\nB,2\n"
|
||||
Reference in New Issue
Block a user