46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""Characterize variant grouping (donor: _strip_variant_markers, _is_variant,
|
|
_variant_key, build_variant_groups)."""
|
|
from pathlib import Path
|
|
|
|
import photo_analyzer as pa
|
|
from conftest import write_fixture
|
|
|
|
|
|
def test_strip_variant_markers_goldens():
|
|
cases = {
|
|
"_MG_1432": "_MG_1432",
|
|
"_MG_1432-bearbeitet": "_MG_1432",
|
|
"_MG_1432 (640x427)": "_MG_1432",
|
|
"_MG_1432 (640x427)-bearbeitet": "_MG_1432",
|
|
"IMG (1920 x 1080)": "IMG",
|
|
"party_Bearbeitet": "party",
|
|
"no-markers-here": "no-markers-here",
|
|
}
|
|
for stem, expected in cases.items():
|
|
assert pa._strip_variant_markers(stem) == expected, stem
|
|
|
|
|
|
def test_is_variant():
|
|
assert pa._is_variant(Path("/a/x (640x427).jpg"))
|
|
assert pa._is_variant(Path("/a/x-bearbeitet.jpg"))
|
|
assert not pa._is_variant(Path("/a/x.jpg"))
|
|
|
|
|
|
def test_variant_key_folder_scoped_case_insensitive():
|
|
assert pa._variant_key(Path("/a/IMG (640x427).jpg")) == ("/a", "img")
|
|
assert pa._variant_key(Path("/b/IMG.jpg")) != pa._variant_key(Path("/a/IMG.jpg"))
|
|
|
|
|
|
def test_build_variant_groups_primary_is_largest_unmarked(tmp_path):
|
|
# base (small), edited (large): primary must be the UNMARKED base even
|
|
# though the edited file is bigger.
|
|
base = write_fixture("fx-blocks-03", tmp_path / "pic.jpg", quality=30)
|
|
edited = write_fixture("fx-blocks-01", tmp_path / "pic-bearbeitet.jpg", quality=95)
|
|
resized = write_fixture("fx-blocks-03", tmp_path / "pic (640x480).jpg", quality=30)
|
|
lone = write_fixture("fx-blocks-02", tmp_path / "other.jpg")
|
|
assert edited.stat().st_size > base.stat().st_size
|
|
|
|
groups = pa.build_variant_groups([base, edited, resized, lone])
|
|
assert groups == {str(base): sorted([str(edited), str(resized)])}
|
|
assert str(lone) not in groups, "standalone files form no group"
|