diff --git a/tests/test_glossary_cmd.py b/tests/test_glossary_cmd.py new file mode 100644 index 0000000..86f7048 --- /dev/null +++ b/tests/test_glossary_cmd.py @@ -0,0 +1,98 @@ +import unittest +import argparse +import tempfile +from chatmastermind.configuration import Config +from chatmastermind.commands.glossary import ( + Glossary, + GlossaryCmdError, + glossary_cmd, + get_glossary_file_path, + create_glossary, + print_glossary, + list_glossaries +) + + +class TestGlossaryCmd(unittest.TestCase): + + def setUp(self) -> None: + # create DB and cache + self.db_dir = tempfile.TemporaryDirectory() + self.cache_dir = tempfile.TemporaryDirectory() + self.glossaries_dir = tempfile.TemporaryDirectory() + # create configuration + self.config = Config() + self.config.cache = self.cache_dir.name + self.config.db = self.db_dir.name + self.config.glossaries = self.glossaries_dir.name + # create a mock argparse.Namespace + self.args = argparse.Namespace( + create=True, + list=False, + print=False, + name='new_glossary', + file=None, + source_lang='en', + target_lang='de', + description=False, + ) + + def test_glossary_create_no_glossaries_err(self) -> None: + self.config.glossaries = None + with self.assertRaises(GlossaryCmdError) as err: + create_glossary(self.args, self.config) + self.assertIn(str(err.exception).lower(), "glossaries directory missing") + + def test_glossary_create_no_name_err(self) -> None: + self.args.name = None + with self.assertRaises(GlossaryCmdError) as err: + create_glossary(self.args, self.config) + self.assertIn(str(err.exception).lower(), "missing glossary name") + + def test_glossary_create_no_source_lang_err(self) -> None: + self.args.source_lang = None + with self.assertRaises(GlossaryCmdError) as err: + create_glossary(self.args, self.config) + self.assertIn(str(err.exception).lower(), "missing source language") + + def test_glossary_create_no_target_lang_err(self) -> None: + self.args.target_lang = None + with self.assertRaises(GlossaryCmdError) as err: + create_glossary(self.args, self.config) + self.assertIn(str(err.exception).lower(), "missing target language") + + def test_glossary_print_no_name_err(self) -> None: + self.args.name = None + with self.assertRaises(GlossaryCmdError) as err: + print_glossary(self.args, self.config) + self.assertIn(str(err.exception).lower(), "missing glossary name") + + def test_glossary_list_no_glossaries_err(self) -> None: + self.config.glossaries = None + with self.assertRaises(GlossaryCmdError) as err: + list_glossaries(self.args, self.config) + self.assertIn(str(err.exception).lower(), "glossaries directory missing") + + def test_glossary_create(self) -> None: + self.args.create = True + self.args.list = False + self.args.print = False + glossary_cmd(self.args, self.config) + expected_path = get_glossary_file_path(self.args.name, self.config) + glo = Glossary.from_file(expected_path) + self.assertEqual(glo.name, self.args.name) + expected_path.unlink() + + def test_glossary_create_twice_err(self) -> None: + self.args.create = True + self.args.list = False + self.args.print = False + glossary_cmd(self.args, self.config) + expected_path = get_glossary_file_path(self.args.name, self.config) + glo = Glossary.from_file(expected_path) + self.assertEqual(glo.name, self.args.name) + # create glossary with the same name again + with self.assertRaises(GlossaryCmdError) as err: + create_glossary(self.args, self.config) + self.assertIn(str(err.exception).lower(), "already exists") + expected_path.unlink()