"""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"