todotxt-sub/test.py

108 lines
3.8 KiB
Python
Executable File

#!/usr/bin/env python3
import unittest
import sub
import os
TEST_DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_data")
class TestGetSub(unittest.TestCase):
def test_no_sub(self):
self.assertEqual(sub.getSub("(Z) gibberish"), None)
def test_sub_at_bol(self):
self.assertEqual(sub.getSub("sub/:test gibberish"), ["sub", "test"])
def test_sub_at_eol(self):
self.assertEqual(sub.getSub("(Z) gibberish sub/:test"), ["sub", "test"])
def test_sub_mid_line(self):
self.assertEqual(sub.getSub("(Z) sub/:test gibberish"), ["sub", "test"])
def test_sub_missing_folder(self):
self.assertEqual(sub.getSub("(Z) gibberish /:test"), None)
def test_sub_missing_file(self):
self.assertEqual(sub.getSub("(Z) sub/: gibberish"), None)
def setup_environment(path):
os.environ["TODO_DIR"] = os.path.join(TEST_DATA_DIR, path)
os.environ["TODO_FILE"] = os.path.join(TEST_DATA_DIR, path, "todo.txt")
os.environ["DONE_FILE"] = os.path.join(TEST_DATA_DIR, path, "done.txt")
os.environ["REPORT_FILE"] = os.path.join(TEST_DATA_DIR, path, "report.txt")
os.environ["TODOTXT_CFG_FILE"] = os.path.join(TEST_DATA_DIR, "todo.cfg")
class TestShowSub(unittest.TestCase):
def test_show(self):
setup_environment("test1")
output = sub.showSub("(Z) gibberish sub/:test1.txt\n", color=False)
self.assertEqual(output, "1 this is test 1\n")
class TestShowAll(unittest.TestCase):
def test_show_all_one(self):
self.show_all_tester("test1", "1 (Z) gibberish sub/:test1.txt\n 1 this is test 1\n--\nTODO: 1 of 1 tasks shown\n")
def test_show_all_two(self):
self.show_all_tester("test2", "1 (Z) gibberish sub/:test1.txt\n 1 this is test 1\n2 (Z) more gibberish sub/:test2.txt\n 1 this is test 2\n--\nTODO: 2 of 2 tasks shown\n")
def show_all_tester(self, path, expected_output):
from io import StringIO
setup_environment(path)
out = StringIO()
sub.showAll(out=out, color=False)
output = out.getvalue()
self.assertEqual(output, expected_output)
class TestAdd(unittest.TestCase):
def setUp(self):
import shutil
if os.path.exists(os.path.join(TEST_DATA_DIR, "test_add")):
shutil.rmtree(os.path.join(TEST_DATA_DIR, "test_add"))
os.mkdir(os.path.join(TEST_DATA_DIR, "test_add"))
setup_environment("test_add")
def test_add_sub(self):
with open(os.path.join(TEST_DATA_DIR, "test_add/todo.txt"), "w") as f:
f.write("(Z) gibberish")
sub.addSub(1, "sub", False)
out = sub.getSub(sub.getItem(1))
self.assertTrue(out is not None)
fileExists = os.path.isfile(os.path.join(os.getenv("TODO_DIR"), out[0], out[1]))
self.assertTrue(fileExists)
def test_add_existing_sub(self):
with open(os.path.join(TEST_DATA_DIR, "test_add/todo.txt"), "w") as f:
f.write("(Z) gibberish sub:/test1.txt\n")
with self.assertRaises(SystemExit):
sub.addSub(1, "sub", False)
class TestEdit(unittest.TestCase):
def test_edit(self):
from unittest.mock import MagicMock
import subprocess
subprocess.call = MagicMock()
setup_environment("test1")
os.environ["EDITOR"] = "test"
sub.editSub(1)
subName = sub.getSub(sub.getItem(1))
subprocess.call.assert_called_with(["test", os.path.join(TEST_DATA_DIR, "test1", subName[0], subName[1])])
def test_edit_EDITOR_unset(self):
from unittest.mock import MagicMock
import subprocess
subprocess.call = MagicMock()
setup_environment("test1")
os.environ["EDITOR"] = ""
subName = sub.getSub(sub.getItem(1))
with self.assertRaises(SystemExit):
sub.editSub(1)
if __name__ == '__main__':
unittest.main()