You've already forked etude_lego_jurassic_world
Liste les nouveaux personnages par année
This commit is contained in:
@@ -5,16 +5,20 @@ from pathlib import Path
|
||||
from lib.rebrickable.minifig_characters import (
|
||||
aggregate_by_character,
|
||||
aggregate_by_gender,
|
||||
aggregate_new_character_sets,
|
||||
aggregate_new_characters_by_year,
|
||||
aggregate_variations_and_totals,
|
||||
aggregate_character_spans,
|
||||
aggregate_presence_by_year,
|
||||
load_sets_enriched,
|
||||
write_character_counts,
|
||||
write_new_character_sets_csv,
|
||||
write_new_character_sets_markdown,
|
||||
write_new_characters_by_year,
|
||||
write_character_variations_totals,
|
||||
write_gender_counts,
|
||||
)
|
||||
from lib.rebrickable.minifig_character_sets import load_sets
|
||||
|
||||
|
||||
def test_aggregate_by_character_counts_unique_figs() -> None:
|
||||
@@ -143,11 +147,11 @@ def test_aggregate_new_characters_by_year_limits_range(tmp_path: Path) -> None:
|
||||
"""Compter les nouveaux personnages par année en respectant la plage."""
|
||||
sets_path = tmp_path / "sets_enriched.csv"
|
||||
sets_path.write_text(
|
||||
"set_num,year\n"
|
||||
"123-1,2015\n"
|
||||
"124-1,2016\n"
|
||||
"125-1,2017\n"
|
||||
"126-1,2014\n"
|
||||
"set_num,name,year,theme_id,num_parts,img_url,set_id,rebrickable_url,in_collection\n"
|
||||
"123-1,Set A,2015,0,0,,-,http://r/123-1,true\n"
|
||||
"124-1,Set B,2016,0,0,,-,http://r/124-1,true\n"
|
||||
"125-1,Set C,2017,0,0,,-,http://r/125-1,true\n"
|
||||
"126-1,Set D,2014,0,0,,-,http://r/126-1,true\n"
|
||||
)
|
||||
sets_years = load_sets_enriched(sets_path)
|
||||
minifigs_rows = [
|
||||
@@ -172,6 +176,59 @@ def test_aggregate_new_characters_by_year_limits_range(tmp_path: Path) -> None:
|
||||
]
|
||||
|
||||
|
||||
def test_aggregate_new_character_sets_returns_intro_sets(tmp_path: Path) -> None:
|
||||
"""Lister les personnages introduits avec les sets de l'année d'introduction."""
|
||||
sets_path = tmp_path / "sets_enriched.csv"
|
||||
sets_path.write_text(
|
||||
"set_num,name,year,theme_id,num_parts,img_url,set_id,rebrickable_url,in_collection\n"
|
||||
"123-1,Set A,2015,0,0,,123,http://r/123-1,true\n"
|
||||
"124-1,Set B,2015,0,0,,124,http://r/124-1,true\n"
|
||||
"125-1,Set C,2016,0,0,,125,http://r/125-1,true\n"
|
||||
)
|
||||
sets_lookup = load_sets(sets_path)
|
||||
minifigs_rows = [
|
||||
{"set_num": "123-1", "known_character": "Owen Grady", "fig_num": "fig-owen-1", "part_num": "head-a"},
|
||||
{"set_num": "124-1", "known_character": "Owen Grady", "fig_num": "fig-owen-2", "part_num": "head-b"},
|
||||
{"set_num": "125-1", "known_character": "Owen Grady", "fig_num": "fig-owen-3", "part_num": "head-c"},
|
||||
{"set_num": "125-1", "known_character": "Ellie Sattler", "fig_num": "fig-ellie-1", "part_num": "head-d"},
|
||||
]
|
||||
|
||||
rows = aggregate_new_character_sets(
|
||||
minifigs_rows,
|
||||
sets_lookup,
|
||||
excluded_characters=["Figurant"],
|
||||
start_year=2015,
|
||||
end_year=2016,
|
||||
)
|
||||
|
||||
assert rows == [
|
||||
{
|
||||
"year": "2015",
|
||||
"known_character": "Owen Grady",
|
||||
"set_num": "123-1",
|
||||
"set_id": "123",
|
||||
"set_name": "Set A",
|
||||
"rebrickable_url": "http://r/123-1",
|
||||
},
|
||||
{
|
||||
"year": "2015",
|
||||
"known_character": "Owen Grady",
|
||||
"set_num": "124-1",
|
||||
"set_id": "124",
|
||||
"set_name": "Set B",
|
||||
"rebrickable_url": "http://r/124-1",
|
||||
},
|
||||
{
|
||||
"year": "2016",
|
||||
"known_character": "Ellie Sattler",
|
||||
"set_num": "125-1",
|
||||
"set_id": "125",
|
||||
"set_name": "Set C",
|
||||
"rebrickable_url": "http://r/125-1",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def test_write_character_counts_outputs_csv(tmp_path: Path) -> None:
|
||||
"""Écrit le CSV des comptes par personnage."""
|
||||
destination = tmp_path / "counts.csv"
|
||||
@@ -224,6 +281,42 @@ def test_write_new_characters_by_year_outputs_csv(tmp_path: Path) -> None:
|
||||
assert destination.read_text() == "year,new_characters\n2015,3\n2016,1\n"
|
||||
|
||||
|
||||
def test_write_new_character_sets_markdown_outputs_md(tmp_path: Path) -> None:
|
||||
"""Écrit le Markdown listant les nouveaux personnages et leurs sets."""
|
||||
destination = tmp_path / "new_characters.md"
|
||||
rows = [
|
||||
{
|
||||
"year": "2015",
|
||||
"known_character": "Owen Grady",
|
||||
"set_num": "123-1",
|
||||
"set_id": "123",
|
||||
"set_name": "Set A",
|
||||
"rebrickable_url": "http://r/123-1",
|
||||
},
|
||||
{
|
||||
"year": "2016",
|
||||
"known_character": "Ellie Sattler",
|
||||
"set_num": "125-1",
|
||||
"set_id": "125",
|
||||
"set_name": "Set C",
|
||||
"rebrickable_url": "http://r/125-1",
|
||||
},
|
||||
]
|
||||
|
||||
write_new_character_sets_markdown(destination, rows)
|
||||
|
||||
assert destination.read_text() == (
|
||||
"##### 2015\n\n"
|
||||
"- Owen Grady\n"
|
||||
" - [123](http://r/123-1) - Set A\n"
|
||||
"\n"
|
||||
"##### 2016\n\n"
|
||||
"- Ellie Sattler\n"
|
||||
" - [125](http://r/125-1) - Set C\n"
|
||||
"\n"
|
||||
)
|
||||
|
||||
|
||||
def test_aggregate_presence_by_year_excludes_figurants(tmp_path: Path) -> None:
|
||||
"""Calcule le total annuel en excluant les figurants."""
|
||||
sets_path = tmp_path / "sets_enriched.csv"
|
||||
|
||||
Reference in New Issue
Block a user