105 lines
3.2 KiB
Python
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"
|