All tests pass!
This commit is contained in:
@@ -1,10 +1,21 @@
|
||||
from link_fixer import Link
|
||||
import logging
|
||||
import os
|
||||
from pathlib import Path
|
||||
from shutil import rmtree
|
||||
import sys
|
||||
import tarfile
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
import warnings
|
||||
|
||||
logger = logging.getLogger('linkfixer')
|
||||
logging.basicConfig(
|
||||
format = '%(asctime)s %(module)s %(levelname)s: %(message)s',
|
||||
level=logging.DEBUG,
|
||||
stream = sys.stdout
|
||||
)
|
||||
|
||||
|
||||
|
||||
class TestLinkFixer(unittest.TestCase):
|
||||
|
||||
@@ -25,40 +36,8 @@ class TestLinkFixer(unittest.TestCase):
|
||||
ln_gd_error = "Error: link test/data/lnk_dr/ln_valid is not broken. Abort."
|
||||
ln_ns_error = "Error: link test/data/tgt_dir/tgt_file.txt is not a link at all. Abort."
|
||||
tgt_invalid_error = "Error: target dir test/data/tgt does not seem to exist or be a directory. Abort."
|
||||
ln_no_target_error = "Error: no match for link target in test/data/tgt_dir"
|
||||
ln_no_target_warning = "No match for link target in test/data/tgt_dir. Link test/data/lnk_dir/ln_no_target not modified."
|
||||
|
||||
|
||||
"""
|
||||
def reset_dir(self, dir_path):
|
||||
if not dir_path.is_dir():
|
||||
if dir_path.exists():
|
||||
dir_path.unlink()
|
||||
os.mkdir(dir_path)
|
||||
return
|
||||
|
||||
def reset_file(self, file_path):
|
||||
if not file_path.is_file():
|
||||
if file_path.exists():
|
||||
filepath.unlink()
|
||||
open(file_path, 'a').close()
|
||||
|
||||
def setup_test(self):
|
||||
|
||||
self.reset_dir(self.tgt_dir)
|
||||
self.reset_dir(self.lnk_dir)
|
||||
self.reset_file(self.tgt_file)
|
||||
self.reset_file(self.inexistent)
|
||||
|
||||
|
||||
if self.ln_valid.exists() or self.ln_valid.is_symlink():
|
||||
self.ln_valid.unlink()
|
||||
self.ln_valid.symlink_to(self.ln_valid_path)
|
||||
|
||||
if self.ln_broken.exists() or self.ln_broken.is_symlink():
|
||||
self.ln_broken.unlink()
|
||||
self.ln_broken.symlink_to(self.ln_broken_path)
|
||||
self.inexistent.unlink()
|
||||
"""
|
||||
def setup_test(self):
|
||||
try:
|
||||
rmtree("test/data")
|
||||
@@ -69,40 +48,56 @@ class TestLinkFixer(unittest.TestCase):
|
||||
tar.extractall("test")
|
||||
|
||||
|
||||
@patch('builtins.print')
|
||||
def test_link_fixer(self, mock_print):
|
||||
def test_non_existing_link(self):
|
||||
self.setup_test()
|
||||
|
||||
print("Test for inexistent link")
|
||||
#print("Test for inexistent link")
|
||||
with self.assertRaises(SystemExit) as err:
|
||||
Link.fix(self.ln_non_exists, self.tgt_dir)
|
||||
self.assertEqual(err.exception_code, self.ln_ne_error)
|
||||
|
||||
print("Test for non-broken link")
|
||||
|
||||
def test_non_broken_link(self):
|
||||
self.setup_test()
|
||||
#print("Test for non-broken link")
|
||||
with self.assertRaises(SystemExit) as err:
|
||||
Link.fix(self.ln_valid, self.tgt_dir)
|
||||
self.assertEqual(err.exception.code, self.ln_gd_error)
|
||||
|
||||
print("Test for non-link link")
|
||||
|
||||
def test_not_a_link(self):
|
||||
self.setup_test()
|
||||
#print("Test for non-link link")
|
||||
with self.assertRaises(SystemExit) as err:
|
||||
Link.fix(self.tgt_file, self.tgt_dir)
|
||||
self.assertEqual(err.exception.code, self.ln_ns_error)
|
||||
|
||||
print("Test for invalid target")
|
||||
|
||||
def test_invalid_target(self):
|
||||
self.setup_test()
|
||||
#print("Test for invalid target")
|
||||
with self.assertRaises(SystemExit) as err:
|
||||
Link.fix(self.ln_valid, self.tgt_invalid)
|
||||
self.assertEqual(err.exception.code, self.tgt_invalid_error)
|
||||
|
||||
print("Test for unfound target")
|
||||
with self.assertRaises(SystemExit) as err:
|
||||
def test_unfound_target(self):
|
||||
self.setup_test()
|
||||
#print("Test for unfound target")
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
Link.fix(self.ln_no_target, self.tgt_dir)
|
||||
self.assertEqual(erro.exception.code, self.ln_no_target_error)
|
||||
assert len(w) == 1
|
||||
self.assertEqual(str(w[-1].message), self.ln_no_target_warning)
|
||||
|
||||
|
||||
def test_fix_link(self):
|
||||
self.setup_test()
|
||||
Link.fix(self.ln_broken, self.tgt_dir)
|
||||
self.assertEqual(Path(self.ln_broken).resolve(), Path(self.tgt_file).resolve())
|
||||
|
||||
|
||||
def test_fix_linkdir(self):
|
||||
self.setup_test()
|
||||
Link.fix(self.lnk_dir, self.tgt_dir)
|
||||
self.assertEqual(Path(self.ln_broken).resolve(), Path(self.tgt_file).resolve())
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
runner = unittest.TextTestRunner(verbosity=2)
|
||||
unittest.main(verbosity=2)
|
||||
#runner = unittest.TestLinkFixer(verbosity=2)
|
||||
unittest.main(verbosity=0)
|
||||
@@ -47,7 +47,7 @@ class TestSearchFile(unittest.TestCase):
|
||||
@unittest.mock.patch("search_file.input", create=True)
|
||||
def test_search_file(self, mock_input):
|
||||
search_file.input.side_effect=["1"]
|
||||
with self.assertRaises(FileNotFoundError):
|
||||
with self.assertRaises(Exception):
|
||||
search_file.search_file("inexistent.txt", self.data_dir)
|
||||
search_result = search_all_match(self.target, self.data_dir)
|
||||
self.assertTrue(search_result, self.data_dir+"/match1.txt")
|
||||
|
||||
Reference in New Issue
Block a user