sintonia/analyzer/tests/pipeline/organise_file_test.py

57 lines
1.6 KiB
Python

import shutil
from pathlib import Path
import pytest
from libretime_analyzer.pipeline.organise_file import organise_file
from ..conftest import AUDIO_FILENAME
def organise_file_args_factory(filepath: Path, dest_dir: Path):
return (
str(filepath),
str(dest_dir),
AUDIO_FILENAME,
{},
)
def test_organise_file(src_dir: Path, dest_dir: Path):
organise_file(*organise_file_args_factory(src_dir / AUDIO_FILENAME, dest_dir))
assert (dest_dir / AUDIO_FILENAME).exists()
def test_organise_file_samefile(src_dir: Path):
organise_file(*organise_file_args_factory(src_dir / AUDIO_FILENAME, src_dir))
assert (src_dir / AUDIO_FILENAME).exists()
def test_organise_file_duplicate_file(src_dir: Path, dest_dir: Path):
for i in range(1, 4):
# Make a copy so we can reuse the file
filename = f"{i}_{AUDIO_FILENAME}"
shutil.copy(src_dir / AUDIO_FILENAME, src_dir / filename)
metadata = organise_file(
*organise_file_args_factory(src_dir / filename, dest_dir)
)
full_path = Path(metadata["full_path"])
assert full_path.exists()
if i == 1:
assert full_path.name == AUDIO_FILENAME
else:
assert len(full_path.name) == len(AUDIO_FILENAME) + 1 + 36 # _ + UUID size
def test_organise_file_bad_permissions_dest_dir(src_dir: Path):
with pytest.raises(OSError):
# /sys is using sysfs on Linux, which is unwritable
organise_file(
*organise_file_args_factory(
src_dir / AUDIO_FILENAME,
Path("/sys/foobar"),
)
)