Files
link-fixer/test/test_link_fixer.py
2024-08-08 08:09:16 -04:00

108 lines
3.7 KiB
Python

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)