You've already forked etude_lego_jurassic_world
Corrige l'alias Franklin Webb et régénère les frises
This commit is contained in:
72
tests/test_minifig_character_collages.py
Normal file
72
tests/test_minifig_character_collages.py
Normal file
@@ -0,0 +1,72 @@
|
||||
"""Tests des frises chronologiques de minifigs par personnage."""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from PIL import Image
|
||||
|
||||
from lib.plots.minifig_character_collages import build_character_collages
|
||||
from lib.rebrickable.minifig_character_sets import build_character_sets, group_by_character
|
||||
from lib.rebrickable.resources import sanitize_name
|
||||
|
||||
|
||||
def create_image(path: Path, color: tuple[int, int, int], size: tuple[int, int]) -> None:
|
||||
"""Crée une image unie pour les besoins de tests."""
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
Image.new("RGB", size, color).save(path)
|
||||
|
||||
|
||||
def test_build_character_sets_and_collages(tmp_path: Path) -> None:
|
||||
"""Construit les apparitions par personnage puis les frises associées."""
|
||||
minifigs_rows = [
|
||||
{"set_num": "1000-1", "known_character": "Alice", "fig_num": "fig-1"},
|
||||
{"set_num": "1000-1", "known_character": "Alice", "fig_num": "fig-1"},
|
||||
{"set_num": "1001-1", "known_character": "Bob", "fig_num": "fig-2"},
|
||||
{"set_num": "1002-1", "known_character": "Bob", "fig_num": "fig-3"},
|
||||
{"set_num": "1004-1", "known_character": "Claire Dearing", "fig_num": "fig-5"},
|
||||
{"set_num": "1003-1", "known_character": "Figurant", "fig_num": "fig-4"},
|
||||
]
|
||||
sets_lookup = {
|
||||
"1000-1": {"set_id": "1000", "year": "2020"},
|
||||
"1001-1": {"set_id": "1001", "year": "2021"},
|
||||
"1002-1": {"set_id": "1002", "year": "2022"},
|
||||
"1003-1": {"set_id": "1003", "year": "2023"},
|
||||
"1004-1": {"set_id": "1004", "year": "2024"},
|
||||
}
|
||||
|
||||
character_sets = build_character_sets(minifigs_rows, sets_lookup, excluded_characters=["Figurant"])
|
||||
assert character_sets == [
|
||||
{"known_character": "Alice", "set_num": "1000-1", "set_id": "1000", "year": "2020", "fig_num": "fig-1"},
|
||||
{"known_character": "Bob", "set_num": "1001-1", "set_id": "1001", "year": "2021", "fig_num": "fig-2"},
|
||||
{"known_character": "Bob", "set_num": "1002-1", "set_id": "1002", "year": "2022", "fig_num": "fig-3"},
|
||||
{"known_character": "Claire Dearing", "set_num": "1004-1", "set_id": "1004", "year": "2024", "fig_num": "fig-5"},
|
||||
]
|
||||
|
||||
resources_dir = tmp_path / "resources"
|
||||
for entry in character_sets:
|
||||
image_path = resources_dir / entry["set_id"] / sanitize_name(entry["known_character"]) / "minifig.jpg"
|
||||
if "Claire" in entry["known_character"]:
|
||||
continue
|
||||
create_image(image_path, (120, 80, 60), (10, 10))
|
||||
|
||||
destination_dir = tmp_path / "output"
|
||||
missing_minifigs = {
|
||||
str(resources_dir / "1004" / sanitize_name("Claire Dearing") / "minifig.jpg"),
|
||||
}
|
||||
generated = build_character_collages(
|
||||
group_by_character(character_sets),
|
||||
resources_dir,
|
||||
destination_dir,
|
||||
missing_paths=missing_minifigs,
|
||||
image_height=20,
|
||||
label_height=10,
|
||||
spacing=2,
|
||||
)
|
||||
|
||||
assert len(generated) == 3
|
||||
alice = Image.open(destination_dir / f"{sanitize_name('Alice')}.png")
|
||||
bob = Image.open(destination_dir / f"{sanitize_name('Bob')}.png")
|
||||
claire = Image.open(destination_dir / f"{sanitize_name('Claire Dearing')}.png")
|
||||
assert alice.size == (20, 30)
|
||||
assert bob.size == (42, 30)
|
||||
assert claire.size == (20, 30)
|
||||
assert claire.getpixel((5, 10)) == (220, 220, 220)
|
||||
Reference in New Issue
Block a user