mirror of https://github.com/CIRCL/PyCIRCLean
Add tests for force_ext and groomer
parent
814f7b84a1
commit
fcbf2e6574
|
@ -7,6 +7,7 @@ import unittest.mock as mock
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from kittengroomer import FileBase, KittenGroomerBase
|
from kittengroomer import FileBase, KittenGroomerBase
|
||||||
|
from kittengroomer.helpers import ImplementationRequired
|
||||||
|
|
||||||
skip = pytest.mark.skip
|
skip = pytest.mark.skip
|
||||||
xfail = pytest.mark.xfail
|
xfail = pytest.mark.xfail
|
||||||
|
@ -14,7 +15,6 @@ fixture = pytest.fixture
|
||||||
|
|
||||||
|
|
||||||
class TestFileBase:
|
class TestFileBase:
|
||||||
# Fixtures
|
|
||||||
|
|
||||||
@fixture(scope='class')
|
@fixture(scope='class')
|
||||||
def src_dir_path(self, tmpdir_factory):
|
def src_dir_path(self, tmpdir_factory):
|
||||||
|
@ -24,13 +24,6 @@ class TestFileBase:
|
||||||
def dest_dir_path(self, tmpdir_factory):
|
def dest_dir_path(self, tmpdir_factory):
|
||||||
return tmpdir_factory.mktemp('dest').strpath
|
return tmpdir_factory.mktemp('dest').strpath
|
||||||
|
|
||||||
@fixture
|
|
||||||
def symlink_file_path(self, tmpdir, tmpfile_path):
|
|
||||||
symlink_path = tmpdir.join('symlinked')
|
|
||||||
symlink_path = symlink_path.strpath
|
|
||||||
os.symlink(tmpfile_path, symlink_path)
|
|
||||||
return symlink_path
|
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def tmpfile_path(self, tmpdir):
|
def tmpfile_path(self, tmpdir):
|
||||||
file_path = tmpdir.join('test.txt')
|
file_path = tmpdir.join('test.txt')
|
||||||
|
@ -38,10 +31,11 @@ class TestFileBase:
|
||||||
return file_path.strpath
|
return file_path.strpath
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def tmpfile(self, src_dir_path, dst_dir_path):
|
def symlink_file_path(self, tmpdir, tmpfile_path):
|
||||||
file_path = os.path.join(src_dir_path, 'test.txt')
|
symlink_path = tmpdir.join('symlinked')
|
||||||
file_path.write('testing')
|
symlink_path = symlink_path.strpath
|
||||||
return FileBase(file_path, dst_dir_path)
|
os.symlink(tmpfile_path, symlink_path)
|
||||||
|
return symlink_path
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def text_file(self):
|
def text_file(self):
|
||||||
|
@ -186,6 +180,11 @@ class TestFileBase:
|
||||||
text_file.add_description('thing')
|
text_file.add_description('thing')
|
||||||
assert text_file.get_property('description_string') == ['thing']
|
assert text_file.get_property('description_string') == ['thing']
|
||||||
|
|
||||||
|
def test_add_description_not_string(self, text_file):
|
||||||
|
"""Adding a description that isn't a string should raise an error."""
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
text_file.add_description(123)
|
||||||
|
|
||||||
def test_add_new_error(self, text_file):
|
def test_add_new_error(self, text_file):
|
||||||
"""Adding a new error should add it to the dict of errors."""
|
"""Adding a new error should add it to the dict of errors."""
|
||||||
text_file.add_error(Exception, 'thing')
|
text_file.add_error(Exception, 'thing')
|
||||||
|
@ -203,21 +202,44 @@ class TestFileBase:
|
||||||
assert text_file.filename == 'DANGEROUS_{}_DANGEROUS'.format(filename)
|
assert text_file.filename == 'DANGEROUS_{}_DANGEROUS'.format(filename)
|
||||||
|
|
||||||
def test_normal_file_mark_dangerous_add_description(self, text_file):
|
def test_normal_file_mark_dangerous_add_description(self, text_file):
|
||||||
|
"""Marking a file as dangerous and passing in a description should add
|
||||||
|
that description to the file."""
|
||||||
text_file.make_dangerous('thing')
|
text_file.make_dangerous('thing')
|
||||||
assert text_file.get_property('description_string') == ['thing']
|
assert text_file.get_property('description_string') == ['thing']
|
||||||
|
|
||||||
def test_dangerous_file_mark_dangerous(self, text_file):
|
def test_dangerous_file_mark_dangerous(self, text_file):
|
||||||
|
"""Marking a dangerous file as dangerous should do nothing, and the
|
||||||
|
file should remain dangerous."""
|
||||||
text_file.make_dangerous()
|
text_file.make_dangerous()
|
||||||
text_file.make_dangerous()
|
text_file.make_dangerous()
|
||||||
assert text_file.is_dangerous is True
|
assert text_file.is_dangerous is True
|
||||||
|
|
||||||
def test_force_ext_change(self):
|
def test_force_ext_change_filepath(self, text_file):
|
||||||
pass
|
"""Force_ext should modify the path of the file to end in the
|
||||||
|
new extension."""
|
||||||
|
text_file.force_ext('.test')
|
||||||
|
assert text_file.dst_path.endswith('.test')
|
||||||
|
|
||||||
def test_force_ext_correct(self):
|
def test_force_ext_add_dot(self, text_file):
|
||||||
pass
|
"""Force_ext should add a dot to an extension given without one."""
|
||||||
|
text_file.force_ext('test')
|
||||||
|
assert text_file.dst_path.endswith('.test')
|
||||||
|
|
||||||
|
def test_force_ext_change_extension_attr(self, text_file):
|
||||||
|
"""Force_ext should modify the extension attribute"""
|
||||||
|
text_file.force_ext('.thing')
|
||||||
|
assert text_file.extension == '.thing'
|
||||||
|
|
||||||
|
def test_force_ext_no_change(self, text_file):
|
||||||
|
"""Force_ext should do nothing if the current extension is the same
|
||||||
|
as the new extension."""
|
||||||
|
text_file.force_ext('.txt')
|
||||||
|
assert text_file.extension == '.txt'
|
||||||
|
assert '.txt.txt' not in text_file.dst_path
|
||||||
|
|
||||||
def test_safe_copy(self, src_dir_path, dest_dir_path):
|
def test_safe_copy(self, src_dir_path, dest_dir_path):
|
||||||
|
"""Calling safe_copy should copy the file from the correct path to
|
||||||
|
the correct destination path."""
|
||||||
file_path = os.path.join(src_dir_path, 'test.txt')
|
file_path = os.path.join(src_dir_path, 'test.txt')
|
||||||
with open(file_path, 'w+') as file:
|
with open(file_path, 'w+') as file:
|
||||||
file.write('')
|
file.write('')
|
||||||
|
@ -239,6 +261,7 @@ class TestFileBase:
|
||||||
class TestLogging:
|
class TestLogging:
|
||||||
|
|
||||||
def test_computehash(self):
|
def test_computehash(self):
|
||||||
|
"""Computehash should return the correct sha256 hash of a given file."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -253,17 +276,36 @@ class TestKittenGroomerBase:
|
||||||
return tmpdir_factory.mktemp('dest').strpath
|
return tmpdir_factory.mktemp('dest').strpath
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def generic_groomer(self, src_dir_path, dest_dir_path):
|
def groomer(self, src_dir_path, dest_dir_path):
|
||||||
return KittenGroomerBase(src_dir_path, dest_dir_path)
|
return KittenGroomerBase(src_dir_path, dest_dir_path)
|
||||||
|
|
||||||
def test_list_all_files_includes_file(self, tmpdir):
|
def test_list_all_files_includes_file(self, tmpdir, groomer):
|
||||||
|
"""Calling list_all_files should include files in the given path."""
|
||||||
file = tmpdir.join('test.txt')
|
file = tmpdir.join('test.txt')
|
||||||
file.write('testing')
|
file.write('testing')
|
||||||
files = KittenGroomerBase.list_all_files(KittenGroomerBase, tmpdir.strpath)
|
files = groomer.list_all_files(tmpdir.strpath)
|
||||||
assert file.strpath in files
|
assert file.strpath in files
|
||||||
|
|
||||||
def test_list_all_files_excludes_dir(self, tmpdir):
|
def test_list_all_files_excludes_dir(self, tmpdir, groomer):
|
||||||
|
"""Calling list_all_files shouldn't include directories in the given
|
||||||
|
path."""
|
||||||
testdir = tmpdir.join('testdir')
|
testdir = tmpdir.join('testdir')
|
||||||
os.mkdir(testdir.strpath)
|
os.mkdir(testdir.strpath)
|
||||||
files = KittenGroomerBase.list_all_files(KittenGroomerBase, tmpdir.strpath)
|
files = groomer.list_all_files(tmpdir.strpath)
|
||||||
assert testdir.strpath not in files
|
assert testdir.strpath not in files
|
||||||
|
|
||||||
|
def test_safe_remove(self, groomer, src_dir_path):
|
||||||
|
"""Calling safe_remove should not raise an Exception if trying to
|
||||||
|
remove a file that doesn't exist."""
|
||||||
|
groomer.safe_remove(os.path.join(src_dir_path, 'thing'))
|
||||||
|
|
||||||
|
def test_safe_mkdir_file_exists(self, groomer, dest_dir_path):
|
||||||
|
"""Calling safe_mkdir should not overwrite an existing directory."""
|
||||||
|
filepath = os.path.join(dest_dir_path, 'thing')
|
||||||
|
os.mkdir(filepath)
|
||||||
|
groomer.safe_mkdir(filepath)
|
||||||
|
|
||||||
|
def test_processdir_not_implemented(self, groomer):
|
||||||
|
"""Calling processdir should raise an Implementation Required error."""
|
||||||
|
with pytest.raises(ImplementationRequired):
|
||||||
|
groomer.processdir('.', '.')
|
||||||
|
|
Loading…
Reference in New Issue