aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_base.py
blob: b7c1e00378ccdc39ffae2144105ccda0053a6fbf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import logging
import unittest
import unittest.mock


from tests.base import LoggingTestCase


class LoggingTestCaseTests(unittest.TestCase):
    """Tests for the LoggingTestCase."""

    @classmethod
    def setUpClass(cls):
        cls.log = logging.getLogger(__name__)

    def test_assert_not_logs_does_not_raise_with_no_logs(self):
        """Test if LoggingTestCase.assertNotLogs does not raise when no logs were emitted."""
        try:
            with LoggingTestCase.assertNotLogs(self, level=logging.DEBUG):
                pass
        except AssertionError:
            self.fail("`self.assertNotLogs` raised an AssertionError when it should not!")

    @unittest.mock.patch("tests.base.LoggingTestCase.assertNotLogs")
    def test_the_test_function_assert_not_logs_does_not_raise_with_no_logs(self, assertNotLogs):
        """Test if test_assert_not_logs_does_not_raise_with_no_logs captures exception correctly."""
        assertNotLogs.return_value = iter([None])
        assertNotLogs.side_effect = AssertionError

        message = "`self.assertNotLogs` raised an AssertionError when it should not!"
        with self.assertRaises(AssertionError, msg=message):
            self.test_assert_not_logs_does_not_raise_with_no_logs()

    def test_assert_not_logs_raises_correct_assertion_error_when_logs_are_emitted(self):
        """Test if LoggingTestCase.assertNotLogs raises AssertionError when logs were emitted."""
        msg_regex = (
            r"1 logs of DEBUG or higher were triggered on root:\n"
            r'<LogRecord: tests\.test_base, [\d]+, .+/tests/test_base\.py, [\d]+, "Log!">'
        )
        with self.assertRaisesRegex(AssertionError, msg_regex):
            with LoggingTestCase.assertNotLogs(self, level=logging.DEBUG):
                self.log.debug("Log!")

    def test_assert_not_logs_reraises_unexpected_exception_in_managed_context(self):
        """Test if LoggingTestCase.assertNotLogs reraises an unexpected exception."""
        with self.assertRaises(ValueError, msg="test exception"):
            with LoggingTestCase.assertNotLogs(self, level=logging.DEBUG):
                raise ValueError("test exception")

    def test_assert_not_logs_restores_old_logging_settings(self):
        """Test if LoggingTestCase.assertNotLogs reraises an unexpected exception."""
        old_handlers = self.log.handlers[:]
        old_level = self.log.level
        old_propagate = self.log.propagate

        with LoggingTestCase.assertNotLogs(self, level=logging.DEBUG):
            pass

        self.assertEqual(self.log.handlers, old_handlers)
        self.assertEqual(self.log.level, old_level)
        self.assertEqual(self.log.propagate, old_propagate)