1
etude_lego_jurassic_world/tests/test_sticker_parts.py

105 lines
3.2 KiB
Python

"""Tests de l'extraction des planches d'autocollants."""
import csv
from pathlib import Path
from lib.rebrickable.sticker_parts import build_sticker_parts, write_sticker_parts
def write_csv(path: Path, headers: list[str], rows: list[list[str]]) -> None:
"""Écrit un CSV simple."""
with path.open("w", newline="") as csv_file:
writer = csv.writer(csv_file)
writer.writerow(headers)
writer.writerows(rows)
def test_build_sticker_parts_filters_category_and_spares(tmp_path: Path) -> None:
"""Ne conserve que les autocollants (catégorie 58) hors rechanges."""
parts_filtered = tmp_path / "parts_filtered.csv"
write_csv(
parts_filtered,
[
"part_num",
"color_rgb",
"is_translucent",
"set_num",
"set_id",
"year",
"quantity_in_set",
"is_spare",
"is_minifig_part",
],
[
["st1", "AAAAAA", "false", "1000-1", "1000", "2020", "1", "false", "false"],
["st1", "AAAAAA", "false", "1000-1", "1000", "2020", "2", "true", "false"],
["br1", "BBBBBB", "false", "1000-1", "1000", "2020", "5", "false", "false"],
["st2", "CCCCCC", "false", "2000-1", "2000", "2021", "3", "false", "false"],
],
)
parts_catalog = tmp_path / "parts.csv"
write_csv(
parts_catalog,
["part_num", "name", "part_cat_id", "part_material"],
[
["st1", "Sticker Sheet 1", "58", "Plastic"],
["st2", "Sticker Sheet 2", "58", "Plastic"],
["br1", "Brick", "1", "Plastic"],
],
)
sets_enriched = tmp_path / "sets_enriched.csv"
write_csv(
sets_enriched,
["set_num", "set_id", "name", "year", "in_collection"],
[
["1000-1", "1000", "Set A", "2020", "true"],
["2000-1", "2000", "Set B", "2021", "false"],
],
)
stickers = build_sticker_parts(parts_filtered, parts_catalog, sets_enriched)
assert stickers == [
{
"set_num": "1000-1",
"set_id": "1000",
"year": "2020",
"name": "Set A",
"part_num": "st1",
"part_name": "Sticker Sheet 1",
"quantity": "1",
},
{
"set_num": "2000-1",
"set_id": "2000",
"year": "2021",
"name": "Set B",
"part_num": "st2",
"part_name": "Sticker Sheet 2",
"quantity": "3",
},
]
def test_write_sticker_parts_outputs_csv(tmp_path: Path) -> None:
"""Sérialise la liste des autocollants par set."""
destination = tmp_path / "sticker_parts.csv"
rows = [
{
"set_num": "123-1",
"set_id": "123",
"year": "2020",
"name": "Set",
"part_num": "st1",
"part_name": "Sticker",
"quantity": "1",
}
]
write_sticker_parts(destination, rows)
assert destination.exists()
content = destination.read_text().strip().splitlines()
assert content[0] == "set_num,set_id,year,name,part_num,part_name,quantity"
assert content[1] == "123-1,123,2020,Set,st1,Sticker,1"