Passed
Pull Request — master (#3)
by
unknown
04:16
created

TestDiscoverClasses.test_discover_classes_exclude_abstract()   A

Complexity

Conditions 1

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nop 2
dl 0
loc 16
rs 9.95
c 0
b 0
f 0
1
import sys
2
from abc import ABC
3
from pathlib import Path
4
from unittest import TestCase
5
from unittest.mock import patch, MagicMock
6
7
from barentsz import discover_classes
8
9
sys.path.append(str(Path(__file__).parent.parent / 'test_resources'))
10
11
from examples_for_tests._private_module import PublicClass
12
from examples_for_tests.level2 import module1
13
from examples_for_tests.module1 import Class1, _PrivateClass
14
from examples_for_tests.level2.module1 import Class1 as Class1_level2
15
16
17
class TestDiscoverClasses(TestCase):
18
19
    def test_discover_classes_in_path(self):
20
        # SETUP
21
        path_to_resources = (Path(__file__).parent.parent / 'test_resources'
22
                             / 'examples_for_tests')
23
24
        # EXECUTE
25
        classes = discover_classes(path_to_resources)
26
27
        # VERIFY
28
        self.assertEqual(2, len(classes))
29
        self.assertIn(Class1, classes)
30
        self.assertIn(Class1_level2, classes)
31
32
    def test_discover_classes_in_module(self):
33
        # EXECUTE
34
        classes = discover_classes(module1)
35
36
        # VERIFY
37
        self.assertEqual(1, len(classes))
38
        self.assertIn(Class1_level2, classes)
39
40
    def test_discover_classes_in_private_modules(self):
41
        # SETUP
42
        path_to_resources = (Path(__file__).parent.parent / 'test_resources'
43
                             / 'examples_for_tests')
44
45
        # EXECUTE
46
        classes = discover_classes(path_to_resources, in_private_modules=True)
47
48
        # VERIFY
49
        self.assertEqual(3, len(classes))
50
        self.assertIn(Class1, classes)
51
        self.assertIn(Class1_level2, classes)
52
        self.assertIn(PublicClass, classes)
53
54
    def test_discover_private_classes(self):
55
        # SETUP
56
        path_to_resources = (Path(__file__).parent.parent / 'test_resources'
57
                             / 'examples_for_tests')
58
59
        # EXECUTE
60
        classes = discover_classes(path_to_resources, include_privates=True)
61
62
        # VERIFY
63
        self.assertEqual(3, len(classes))
64
        self.assertIn(Class1, classes)
65
        self.assertIn(Class1_level2, classes)
66
        self.assertIn(_PrivateClass, classes)
67
68
    def test_discover_classes_with_signature(self):
69
        # SETUP
70
        path_to_resources = (Path(__file__).parent.parent / 'test_resources'
71
                             / 'examples_for_tests')
72
73
        # EXECUTE
74
        classes = discover_classes(path_to_resources, include_privates=True, in_private_modules=True, signature=str)
75
76
        # VERIFY
77
        self.assertEqual(1, len(classes))
78
        self.assertIn(Class1, classes)
79
80
    def test_discover_classes_with_wrong_argument(self):
81
        # EXECUTE & VALIDATE
82
        with self.assertRaises(ValueError):
83
            discover_classes(123)
84
85
    def test_discover_classes_with_exclusions(self):
86
        # SETUP
87
        path_to_resources = (Path(__file__).parent.parent / 'test_resources'
88
                             / 'examples_for_tests')
89
90
        # EXECUTE
91
        classes1 = discover_classes(path_to_resources, exclude=Class1)
92
        classes2 = discover_classes(path_to_resources, exclude=[Class1])
93
94
        # VERIFY
95
        self.assertEqual(1, len(classes1))
96
        self.assertIn(Class1_level2, classes1)
97
        self.assertEqual(1, len(classes2))
98
        self.assertIn(Class1_level2, classes2)
99
100
    @patch('barentsz._discover._discover_elements')
101
    def test_discover_classes_exclude_abstract(self, mock_discover_elements: MagicMock):
102
        # SETUP
103
        class MyClass:
104
            ...
105
106
        class MyAbstractClass(ABC):
107
            ...
108
109
        mock_discover_elements.return_value = [MyClass, MyAbstractClass]
110
111
        # EXECUTE
112
        classes = discover_classes(None, exclude_abstract=True)
113
114
        # VERIFY
115
        self.assertEqual([MyClass], classes)
116