import shutil from pathlib import Path import pytest from photools3.metadata_writer import ( MetadataWriter, _is_prefixed, _prefixed, ) from test.test_photo import PATHS_DNG_EXAMPLES @pytest.fixture def make_dng_file(tmp_path): def _make(src: Path) -> Path: dst = tmp_path / f"copy_{src.name}" shutil.copy(src, dst) return dst return _make @pytest.fixture def metadata_writer_on_existing(make_dng_file): metadata_writer = MetadataWriter(make_dng_file(PATHS_DNG_EXAMPLES[0])) metadata_writer.write_caption( "Let's pretend this is the caption of the original image", include_prefix=False, ) return metadata_writer @pytest.mark.parametrize("pic", PATHS_DNG_EXAMPLES) def test_read_metadata(make_dng_file, pic): """primitive test for `MetadataWriter`""" file_path = make_dng_file(pic) result = MetadataWriter(file_path) assert result def test_prefixed(): txt = "bla_bla" txt_prefixed = _prefixed(txt) assert txt_prefixed == "photools: bla_bla" def test_is_prefixed(): txt_prefixed = "photools: some text" txt_not_prefixed = "prefix is missing here" txt_false_prefix = "some_perfix: but not the right one" assert _is_prefixed(txt_prefixed) assert not _is_prefixed(txt_not_prefixed) assert not _is_prefixed(txt_false_prefix) @pytest.mark.parametrize("pic", PATHS_DNG_EXAMPLES) def test_read_metadata_sidecar_path(make_dng_file, pic): file_path = make_dng_file(pic) metadata_writer = MetadataWriter(file_path) assert isinstance(metadata_writer.sidecar_path, Path) assert str(metadata_writer.sidecar_path).lower().endswith(".dng.xmp") # file does not exits yet, only the name assert not metadata_writer.sidecar_path.exists() @pytest.mark.parametrize("pic", PATHS_DNG_EXAMPLES) def test_set_caption(make_dng_file, pic): metadata_writer = MetadataWriter(make_dng_file(pic)) assert not metadata_writer.sidecar_path.exists() # sidecar does not exist yet ... metadata_writer.write_caption("This is a test") assert metadata_writer.sidecar_path.exists() # ... but now! result = metadata_writer.get_caption() assert result assert result == "photools: This is a test" def test_set_caption_on_existing(metadata_writer_on_existing): assert ( metadata_writer_on_existing.get_caption() == "Let's pretend this is the caption of the original image" ) metadata_writer_on_existing.write_caption("Another caption") assert ( metadata_writer_on_existing.get_caption() == "Let's pretend this is the caption of the original image. photools: Another caption" ) metadata_writer_on_existing.write_caption("Updated caption") assert ( metadata_writer_on_existing.get_caption() == "Let's pretend this is the caption of the original image. photools: Updated caption" ) metadata_writer_on_existing.write_caption("Don't do this!", override=False) assert ( metadata_writer_on_existing.get_caption() == "Let's pretend this is the caption of the original image. photools: Updated caption" ) @pytest.mark.parametrize("pic", PATHS_DNG_EXAMPLES) def test_set_keywords(make_dng_file, pic): metadata_writer = MetadataWriter(make_dng_file(pic)) metadata_writer.write_keywords(["hund", "katze", "maus"]) result = metadata_writer.get_keywords() assert result assert isinstance(result, list) assert "photools: hund" in result assert "photools: katze" in result assert "photools: maus" in result def test_set_keywords_on_existing(): # TODO ...