from link_fixer import Link import os from pathlib import Path from shutil import rmtree import tarfile import unittest from unittest.mock import patch class TestLinkFixer(unittest.TestCase): tgt_dir = "test/data/tgt_dir" lnk_dir = "test/data/lnk_dir" tgt_file = "test/data/tgt_dir/tgt_file.txt" ln_non_exists = "test/data/link.txt" ln_valid = "test/data/lnk_dir/ln_valid" ln_valid_path = "../tgt_dir/tgt_file.txt" ln_broken = "test/data/lnk_dir/tgt_file.txt" ln_broken_path = "../tgt/tgt_.txt" ln_no_target = "test/data/lnk_dir/ln_no_target" tgt_invalid = "test/data/tgt" inexistent = "test/data/tgt_dir/inexistent.txt" ln_ne_error = "Error: could not access link test/data/link.txt" 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" """ 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") except Exception: sys.exit("Error: couldn't reset test data directory! Cancelling test!") with tarfile.open("test/test_data.tar", "r:*") as tar: tar.extraction_filter = getattr(tarfile, 'data_filter') tar.extractall("test") @patch('builtins.print') def test_link_fixer(self, mock_print): self.setup_test() 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") 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") 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") 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: Link.fix(self.ln_no_target, self.tgt_dir) self.assertEqual(erro.exception.code, self.ln_no_target_error) if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) runner = unittest.TextTestRunner(verbosity=2) unittest.main(verbosity=2)