wrolpi/modules/files/test/test_lib.py

125 lines
3.8 KiB
Python
Raw Normal View History

Squashed commit of the following: commit 54d06bf8045fceaa2684348d110792e6833b170c Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 16:46:14 2022 -0700 Can't delete files when WROL Mode is enabled. commit 2d91f1983aae47bdb3f6dc7fc2bd2ae642c1126a Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 16:37:42 2022 -0700 Fixing bug where files could not be deleted in series. commit eed818c50682b19de9f18da2d4daedc54408cc49 Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 16:26:31 2022 -0700 Fixing fake_now to reset now() when complete. commit 183e98cbec25784720ebaeabfac8af4a3fc87da8 Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 16:08:14 2022 -0700 Files can be deleted and downloaded. commit c5bcd25a3da041f42b9e11eae804aa359ab9e985 Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 14:41:07 2022 -0700 Files can be deleted or downloaded. commit 690b332bb4f89aa4e97ce2590b35bd4a71fefd87 Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 14:11:05 2022 -0700 File is opened in new tab when file is selected. commit ba8ead6f3185d0a398c4f89cecb5958f5e7731a3 Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 13:32:32 2022 -0700 Removing files sort because React FE sorts them itself. commit 4e04753234b11d615c5992bc08e9dd9fb7226c05 Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 13:29:52 2022 -0700 Duplicate directories are ignored. commit c2f7d7929f37655e5c2d11767a512571263b35ef Author: Roland <roland@learningselfreliance.com> Date: Sat Jan 29 12:22:38 2022 -0700 Multiple directories can be requested. commit 31678139c0799d0034d564cc1f8ae448234df90c Author: Roland <roland@learningselfreliance.com> Date: Fri Jan 28 17:21:33 2022 -0700 Files are displayed with the correct modified time. Files can be recursively viewed. commit a2d10a1dd792e518c8c6ad8f699b5d416c3d07e4 Author: Roland <roland@learningselfreliance.com> Date: Thu Jan 27 22:37:19 2022 -0700 Files can be viewed. Folders display their children.
2022-01-29 16:50:22 -07:00
from pathlib import Path
import pytest
from modules.files import lib
from wrolpi.errors import InvalidFile
def test_list_files(make_files_structure, test_directory):
files = [
'archives/bar.txt',
'archives/baz/bar.txt',
'archives/baz/foo.txt',
'archives/foo.txt',
'empty directory/',
'videos/other video.mp4',
'videos/some video.mp4',
]
make_files_structure(files)
def check_list_files(path, expected):
result = lib.list_files(path)
result = sorted(result)
assert [str(i.relative_to(test_directory)) for i in result] == expected
check_list_files([], ['archives', 'empty directory', 'videos'])
# Falsey directories are ignored.
check_list_files([None, ''], ['archives', 'empty directory', 'videos'])
check_list_files(['empty directory'], ['archives', 'empty directory', 'videos'])
check_list_files(['empty directory'], ['archives', 'empty directory', 'videos'])
# Trailing slash is ignored.
check_list_files(['empty directory/'], ['archives', 'empty directory', 'videos'])
check_list_files(['archives'], [
'archives',
'archives/bar.txt',
'archives/baz',
'archives/foo.txt',
'empty directory',
'videos',
])
check_list_files(['archives/baz'], [
'archives',
'archives/bar.txt',
'archives/baz',
'archives/baz/bar.txt',
'archives/baz/foo.txt',
'archives/foo.txt',
'empty directory',
'videos',
])
# Including duplicate directories does not change results.
check_list_files(['archives/baz', 'archives'], [
'archives',
'archives/bar.txt',
'archives/baz',
'archives/baz/bar.txt',
'archives/baz/foo.txt',
'archives/foo.txt',
'empty directory',
'videos',
])
check_list_files(['videos'], [
'archives',
'empty directory',
'videos',
'videos/other video.mp4',
'videos/some video.mp4',
])
# All files and directories are listed.
check_list_files(['videos', 'archives/baz'], [
'archives',
'archives/bar.txt',
'archives/baz',
'archives/baz/bar.txt',
'archives/baz/foo.txt',
'archives/foo.txt',
'empty directory',
'videos',
'videos/other video.mp4',
'videos/some video.mp4',
])
@pytest.mark.parametrize(
'directories,expected', [
([Path('foo')], [Path('foo')]),
([Path('foo'), Path('bar')], [Path('foo'), Path('bar')]),
([Path('foo'), Path('foo/bar'), Path('baz')], [Path('foo/bar'), Path('baz')]),
([Path('foo/bar'), Path('foo'), Path('baz')], [Path('foo/bar'), Path('baz')]),
([Path('baz'), Path('foo/bar'), Path('foo')], [Path('baz'), Path('foo/bar')]),
([Path('foo/bar'), Path('foo'), Path('foo/bar/baz')], [Path('foo/bar/baz')]),
]
)
def test_filter_parent_directories(directories, expected):
assert lib.filter_parent_directories(directories) == expected
def test_delete_file(make_files_structure, test_directory):
"""
File in the media directory can be deleted.
"""
files = [
'archives/foo.txt',
'bar.txt',
'baz/',
]
make_files_structure(files)
lib.delete_file('bar.txt')
assert (test_directory / 'archives/foo.txt').is_file()
assert not (test_directory / 'bar.txt').is_file()
assert (test_directory / 'baz').is_dir()
lib.delete_file('archives/foo.txt')
assert not (test_directory / 'archives/foo.txt').is_file()
assert not (test_directory / 'bar.txt').is_file()
with pytest.raises(InvalidFile):
lib.delete_file('baz')
with pytest.raises(InvalidFile):
lib.delete_file('does not exist')
assert (test_directory / 'baz').is_dir()