49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
import pytest
|
||
|
||
from app.names import clean_name, next_free_name, split_name
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
"raw, expected",
|
||
[
|
||
("2026-10-01 21-33-07.mkv", "2026-10-01-21-33-07.mkv"),
|
||
("my clip\tfinal.mp4", "my-clip-final.mp4"),
|
||
(" padded.mp4 ", "padded.mp4"),
|
||
("C:\\Users\\alice\\Videos\\a b.mp4", "a-b.mp4"),
|
||
("dir/sub/x y.png", "x-y.png"),
|
||
("çılgın an #1.mp4", "çılgın-an-#1.mp4"),
|
||
("", "upload"),
|
||
(" ", "upload"),
|
||
],
|
||
)
|
||
def test_clean_name(raw, expected):
|
||
assert clean_name(raw) == expected
|
||
|
||
|
||
def test_split_name():
|
||
assert split_name("clip.mp4") == ("clip", ".mp4")
|
||
assert split_name("a.b.mkv") == ("a.b", ".mkv")
|
||
|
||
|
||
def test_split_name_edge_cases():
|
||
assert split_name("README") == ("README", "")
|
||
assert split_name(".mp4") == (".mp4", "")
|
||
|
||
|
||
def test_next_free_name_free():
|
||
assert next_free_name("clip", ".mp4", lambda n: False) == "clip.mp4"
|
||
|
||
|
||
def test_next_free_name_suffixes():
|
||
taken = {"clip.mp4", "clip-2.mp4"}
|
||
assert next_free_name("clip", ".mp4", taken.__contains__) == "clip-3.mp4"
|
||
|
||
|
||
def test_next_free_name_no_extension():
|
||
assert next_free_name("README", "", {"README"}.__contains__) == "README-2"
|
||
|
||
|
||
def test_next_free_name_gives_up():
|
||
with pytest.raises(RuntimeError):
|
||
next_free_name("x", ".mp4", lambda n: True, limit=5)
|