summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Feldmann <mail@tfeldmann.de>2022-09-02 20:50:15 +0200
committerThomas Feldmann <mail@tfeldmann.de>2022-09-02 20:50:15 +0200
commita4921343c78d2883ed20d4a476261964753c8b99 (patch)
treee8c716de41d209525c5306e97d68edbf5a4b1fa4
parent429283704ed89ec37552780869534f47581ec287 (diff)
add conflict resolution tests
-rw-r--r--organize/actions/_conflict_resolution.py1
-rw-r--r--tests/actions/test_conflict_resolution.py36
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)