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