diff options
author | Thomas Feldmann <mail@tfeldmann.de> | 2022-09-02 20:50:15 +0200 |
---|---|---|
committer | Thomas Feldmann <mail@tfeldmann.de> | 2022-09-02 20:50:15 +0200 |
commit | a4921343c78d2883ed20d4a476261964753c8b99 (patch) | |
tree | e8c716de41d209525c5306e97d68edbf5a4b1fa4 | |
parent | 429283704ed89ec37552780869534f47581ec287 (diff) |
add conflict resolution tests
-rw-r--r-- | organize/actions/_conflict_resolution.py | 1 | ||||
-rw-r--r-- | tests/actions/test_conflict_resolution.py | 36 |
2 files changed, 36 insertions, 1 deletions
diff --git a/organize/actions/_conflict_resolution.py b/organize/actions/_conflict_resolution.py index 65f1fbe..8d1db7c 100644 --- a/organize/actions/_conflict_resolution.py +++ b/organize/actions/_conflict_resolution.py @@ -42,6 +42,7 @@ def next_free_name(fs: FS, template: jinja2.Template, name: str, extension: str) """ counter = 1 prev_candidate = "" + extension = extension.lstrip(".") wanted = ".".join((name, extension)) if not fs.exists(wanted): return wanted diff --git a/tests/actions/test_conflict_resolution.py b/tests/actions/test_conflict_resolution.py index 287ee3a..d712149 100644 --- a/tests/actions/test_conflict_resolution.py +++ b/tests/actions/test_conflict_resolution.py @@ -1,7 +1,11 @@ import fs import pytest +from conftest import read_files -from organize.actions._conflict_resolution import next_free_name +from organize.actions._conflict_resolution import ( + next_free_name, + resolve_overwrite_conflict, +) from organize.utils import Template @@ -9,6 +13,8 @@ from organize.utils import Template "template,wanted,result", ( ("{name}-{counter}.{extension}", "file.txt", "file-1.txt"), + ("{name}-{counter}.{extension}", "file.txt", "file-1.txt"), + ("{name}-{'%02d' % counter}.{extension}", "file.txt", "file-02.txt"), ("{name}{counter}.{extension}", "file.txt", "file4.txt"), ("{name}{counter}.{extension}", "other.txt", "other.txt"), ), @@ -17,6 +23,7 @@ def test_next_free_name(template, wanted, result): with fs.open_fs("mem://") as mem: mem.touch("file.txt") mem.touch("file1.txt") + mem.touch("file-01.txt") mem.touch("file2.txt") mem.touch("file3.txt") name, ext = wanted.split(".") @@ -31,3 +38,30 @@ def test_next_free_name_exception(): tmp = Template.from_string("{name}.{extension}") with pytest.raises(ValueError): assert next_free_name(mem, tmp, "file", "txt") + + +@pytest.mark.parametrize( + "mode,result,files", + ( + ("skip", None, {"file.txt": "file", "other.txt": "other"}), + ("overwrite", "other.txt", {"file.txt": "file"}), + # ("trash", None, {"file.txt": "file", "other.txt": "other"}), + ("rename_new", "other1.txt", {"file.txt": "file", "other.txt": "other"}), + ("rename_existing", "other.txt", {"file.txt": "file", "other1.txt": "other"}), + ), +) +def test_resolve_overwrite_conflict(mode, result, files): + with fs.open_fs("mem://") as mem: + mem.writetext("file.txt", "file") + mem.writetext("other.txt", "other") + assert result == resolve_overwrite_conflict( + src_fs=mem, + src_path="file.txt", + dst_fs=mem, + dst_path="other.txt", + conflict_mode=mode, + rename_template=Template.from_string("{name}{counter}.{extension}"), + simulate=False, + print=print, + ) + assert files == read_files(mem) |