From 70f610df6ad8cd6fe62bbbd36615a7f155a20d28 Mon Sep 17 00:00:00 2001 From: Lucas Biaggi Date: Thu, 21 Mar 2024 02:49:10 +0000 Subject: [PATCH] Add custom validator tests --- doorstop/core/tests/test_item_extensions.py | 55 +++++++++++++++++++ .../core/tests/validators/validator_dummy.py | 8 +++ 2 files changed, 63 insertions(+) create mode 100644 doorstop/core/tests/test_item_extensions.py create mode 100644 doorstop/core/tests/validators/validator_dummy.py diff --git a/doorstop/core/tests/test_item_extensions.py b/doorstop/core/tests/test_item_extensions.py new file mode 100644 index 000000000..2e377bc68 --- /dev/null +++ b/doorstop/core/tests/test_item_extensions.py @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: LGPL-3.0-only +# pylint: disable=C0302 + +"""Unit tests for the doorstop.core.item with extensions enabled.""" + +import os +import unittest +from types import ModuleType +from unittest.mock import patch + +from doorstop.common import import_path_as_module +from doorstop.core.tests import TESTS_ROOT, MockItem, MockSimpleDocumentExtensions + + +class TestItem(unittest.TestCase): + """Unit tests for the Item class.""" + + # pylint: disable=protected-access,no-value-for-parameter + + def setUp(self): + path = os.path.join("path", "to", "RQ001.yml") + self.item = MockItem(MockSimpleDocumentExtensions(), path) + + @patch("doorstop.settings.CACHE_PATHS", False) + def test_load_custom_validator_per_folder(self): + """Load a valid custom validator per folder.""" + path = os.path.join("path", "to", "RQ001.yml") + self.item = MockItem( + MockSimpleDocumentExtensions( + item_validator=f"{TESTS_ROOT}/validators/validator_dummy.py" + ), + path, + ) + document = self.item.document + validator = import_path_as_module(document.extensions["item_validator"]) + + self.assertEqual(isinstance(validator, ModuleType), True) + + @patch("doorstop.settings.CACHE_PATHS", False) + def test_load_custom_validator_per_folder_and_fails(self): + """Load a invalid custom validator per folder and fails with FileNotFoundError.""" + path = os.path.join("path", "to", "RQ001.yml") + self.item = MockItem( + MockSimpleDocumentExtensions( + item_validator=f"{TESTS_ROOT}/files/validator_dummy2.py" + ), + path, + ) + document = self.item.document + try: + validator = import_path_as_module(document.extensions["item_validator"]) + except FileNotFoundError: + validator = FileNotFoundError + + self.assertEqual(FileNotFoundError, validator) diff --git a/doorstop/core/tests/validators/validator_dummy.py b/doorstop/core/tests/validators/validator_dummy.py new file mode 100644 index 000000000..5aeb389ce --- /dev/null +++ b/doorstop/core/tests/validators/validator_dummy.py @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-only + +from doorstop import DoorstopError, DoorstopInfo, DoorstopWarning + + +def item_validator(item): + if item: + yield DoorstopInfo("Loaded")