1
etude_lego_jurassic_world/tests/test_enrich_sets.py

78 lines
2.7 KiB
Python

"""Tests de l'enrichissement des sets filtrés."""
from pathlib import Path
from lib.rebrickable.enrich_sets import (
build_rebrickable_set_url,
enrich_sets,
extract_set_id,
load_owned_set_ids,
parse_set_collection_root,
write_missing_sets_markdown,
)
def test_extract_set_id_removes_revision() -> None:
"""Supprime la révision de l'identifiant set_num."""
assert extract_set_id("75936-1") == "75936"
def test_build_rebrickable_set_url() -> None:
"""Construit l'URL publique Rebrickable à partir du set_num."""
assert build_rebrickable_set_url("75936-1") == "https://rebrickable.com/sets/75936-1"
def test_parse_set_collection_root_empty_returns_none() -> None:
"""Renvoie None pour une valeur vide."""
assert parse_set_collection_root(" ") is None
def test_load_owned_set_ids_handles_missing_and_collects(tmp_path: Path) -> None:
"""Retourne les sets présents sous forme de dossiers, vide si rien n'existe."""
missing_root = tmp_path / "absent"
assert load_owned_set_ids(missing_root) == set()
root = tmp_path / "collection"
root.mkdir()
(root / "75936").mkdir()
(root / "75944").mkdir()
assert load_owned_set_ids(root) == {"75936", "75944"}
def test_enrich_sets_adds_columns_and_collection(tmp_path: Path) -> None:
"""Enrichit le CSV avec set_id, URL et possession."""
source = tmp_path / "sets_filtered.csv"
destination = tmp_path / "sets_enriched.csv"
source.write_text(
"set_num,name,year,theme_id\n"
"75936-1,T. rex Rampage,2019,602\n"
"10757-1,Raptor Rescue Truck,2018,620\n"
)
enrich_sets(source, destination, {"75936"})
assert destination.read_text() == (
"set_num,name,year,theme_id,set_id,rebrickable_url,in_collection\n"
"75936-1,T. rex Rampage,2019,602,75936,https://rebrickable.com/sets/75936-1,true\n"
"10757-1,Raptor Rescue Truck,2018,620,10757,https://rebrickable.com/sets/10757-1,false\n"
)
def test_write_missing_sets_markdown(tmp_path: Path) -> None:
"""Construit un tableau Markdown des sets non possédés."""
enriched = tmp_path / "sets_enriched.csv"
markdown = tmp_path / "sets_missing.md"
enriched.write_text(
"set_num,name,year,theme_id,set_id,rebrickable_url,in_collection\n"
"75936-1,T. rex Rampage,2019,602,75936,https://rebrickable.com/sets/75936-1,true\n"
"10757-1,Raptor Rescue Truck,2018,620,10757,https://rebrickable.com/sets/10757-1,false\n"
)
write_missing_sets_markdown(enriched, markdown)
assert markdown.read_text() == (
"| set_id | year | name |\n"
"| --- | --- | --- |\n"
"| [10757](https://rebrickable.com/sets/10757-1) | 2018 | Raptor Rescue Truck |\n"
)