Test Failed
Push — master ( cea608...9ea46a )
by Beraldo
04:17 queued 01:53
created

build.tests.models.test_evc_base   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 214
Duplicated Lines 75.7 %

Importance

Changes 0
Metric Value
eloc 166
dl 162
loc 214
rs 10
c 0
b 0
f 0
wmc 23

11 Methods

Rating   Name   Duplication   Size   Complexity  
A TestEVC.test_without_uni_a() 0 7 2
A TestEVC.test_update_uni_z() 15 15 2
A TestEVC.test_circuit_representation() 0 10 1
A TestEVC.test_update_name() 15 15 2
A TestEVC.test_attributes_empty() 0 7 2
A TestEVC.test_update_uni_a() 15 15 2
A TestEVC.test_with_invalid_uni_z() 11 11 2
A TestEVC.test_without_uni_z() 10 10 2
B TestEVC.test_as_dict() 64 64 5
A TestEVC.test_with_invalid_uni_a() 10 10 2
A TestEVC.test_comparison_method() 22 22 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
"""Module to test the EVCBase class."""
2
import sys
3
from unittest import TestCase
4
5
from kytos.core.interface import UNI
6
7
# pylint: disable=wrong-import-position
8
sys.path.insert(0, '/var/lib/kytos/napps/..')
9
# pylint: enable=wrong-import-position
10
11
from napps.kytos.mef_eline.models import EVC  # NOQA
12
from napps.kytos.mef_eline.tests.helpers import get_uni_mocked  # NOQA
13
14
15
class TestEVC(TestCase):  # pylint: disable=too-many-public-methods
16
    """Tests to verify EVC class."""
17
18
    def test_attributes_empty(self):
19
        """Test if the EVC raises an error with name is required."""
20
        attributes = {}
21
        error_message = "name is required."
22
        with self.assertRaises(ValueError) as handle_error:
23
            EVC(**attributes)
24
        self.assertEqual(str(handle_error.exception), error_message)
25
26
    def test_without_uni_a(self):
27
        """Test if the EVC raises and error with UNI A is required."""
28
        attributes = {"name": "circuit_name"}
29
        error_message = "uni_a is required."
30
        with self.assertRaises(ValueError) as handle_error:
31
            EVC(**attributes)
32
        self.assertEqual(str(handle_error.exception), error_message)
33
34 View Code Duplication
    def test_with_invalid_uni_a(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
35
        """Test if the EVC raises and error with invalid UNI A."""
36
        attributes = {
37
            "name": "circuit_name",
38
            "uni_a": get_uni_mocked(tag_value=82)
39
        }
40
        error_message = "VLAN tag 82 is not available in uni_a"
41
        with self.assertRaises(ValueError) as handle_error:
42
            EVC(**attributes)
43
        self.assertEqual(str(handle_error.exception), error_message)
44
45 View Code Duplication
    def test_without_uni_z(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
46
        """Test if the EVC raises and error with UNI Z is required."""
47
        attributes = {
48
            "name": "circuit_name",
49
            "uni_a": get_uni_mocked(is_valid=True)
50
        }
51
        error_message = "uni_z is required."
52
        with self.assertRaises(ValueError) as handle_error:
53
            EVC(**attributes)
54
        self.assertEqual(str(handle_error.exception), error_message)
55
56 View Code Duplication
    def test_with_invalid_uni_z(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
57
        """Test if the EVC raises and error with UNI Z is required."""
58
        attributes = {
59
            "name": "circuit_name",
60
            "uni_a": get_uni_mocked(is_valid=True),
61
            "uni_z": get_uni_mocked(tag_value=83)
62
        }
63
        error_message = "VLAN tag 83 is not available in uni_z"
64
        with self.assertRaises(ValueError) as handle_error:
65
            EVC(**attributes)
66
        self.assertEqual(str(handle_error.exception), error_message)
67
68 View Code Duplication
    def test_update_name(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
69
        """Test if raises and error when trying to update the name."""
70
        attributes = {
71
            "name": "circuit_name",
72
            "uni_a": get_uni_mocked(is_valid=True),
73
            "uni_z": get_uni_mocked(is_valid=True)
74
        }
75
        update_dict = {
76
            "name": "circuit_name_2"
77
        }
78
        error_message = "name can't be be updated."
79
        with self.assertRaises(ValueError) as handle_error:
80
            evc = EVC(**attributes)
81
            evc.update(**update_dict)
82
        self.assertEqual(str(handle_error.exception), error_message)
83
84 View Code Duplication
    def test_update_uni_a(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
85
        """Test if raises and error when trying to update the uni_a."""
86
        attributes = {
87
            "name": "circuit_name",
88
            "uni_a": get_uni_mocked(is_valid=True),
89
            "uni_z": get_uni_mocked(is_valid=True)
90
        }
91
        update_dict = {
92
            "uni_a": get_uni_mocked(is_valid=True)
93
        }
94
        error_message = "uni_a can't be be updated."
95
        with self.assertRaises(ValueError) as handle_error:
96
            evc = EVC(**attributes)
97
            evc.update(**update_dict)
98
        self.assertEqual(str(handle_error.exception), error_message)
99
100 View Code Duplication
    def test_update_uni_z(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
101
        """Test if raises and error when trying to update the uni_z."""
102
        attributes = {
103
            "name": "circuit_name",
104
            "uni_a": get_uni_mocked(is_valid=True),
105
            "uni_z": get_uni_mocked(is_valid=True)
106
        }
107
        update_dict = {
108
            "uni_z": get_uni_mocked(is_valid=True)
109
        }
110
        error_message = "uni_z can't be be updated."
111
        with self.assertRaises(ValueError) as handle_error:
112
            evc = EVC(**attributes)
113
            evc.update(**update_dict)
114
        self.assertEqual(str(handle_error.exception), error_message)
115
116
    def test_circuit_representation(self):
117
        """Test the method __repr__."""
118
        attributes = {
119
            "name": "circuit_name",
120
            "uni_a": get_uni_mocked(is_valid=True),
121
            "uni_z": get_uni_mocked(is_valid=True)
122
        }
123
        evc = EVC(**attributes)
124
        expected_value = f'EVC({evc.id}, {evc.name})'
125
        self.assertEqual(str(evc), expected_value)
126
127 View Code Duplication
    def test_comparison_method(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
128
        """Test the method __eq__."""
129
        attributes = {
130
            "name": "circuit_name",
131
            "uni_a": get_uni_mocked(is_valid=True),
132
            "uni_z": get_uni_mocked(is_valid=True)
133
        }
134
        evc1 = EVC(**attributes)
135
        evc2 = EVC(**attributes)
136
137
        attributes = {
138
            "name": "circuit_name_2",
139
            "uni_a": get_uni_mocked(is_valid=True),
140
            "uni_z": get_uni_mocked(is_valid=True)
141
        }
142
        evc3 = EVC(**attributes)
143
        evc4 = EVC(**attributes)
144
145
        self.assertEqual(evc1 == evc2, True)
146
        self.assertEqual(evc1 == evc3, False)
147
        self.assertEqual(evc2 == evc3, False)
148
        self.assertEqual(evc3 == evc4, True)
149
150 View Code Duplication
    def test_as_dict(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
151
        """Test the method as_dict."""
152
        attributes = {
153
            "id": "custom_id",
154
            "name": "custom_name",
155
            "uni_a": get_uni_mocked(is_valid=True),
156
            "uni_z": get_uni_mocked(is_valid=True),
157
            "start_date": '2018-08-21T18:44:54',
158
            "end_date": '2018-08-21T18:44:55',
159
            'primary_links': [],
160
            'request_time': '2018-08-21T19:10:41',
161
            'creation_time': '2018-08-21T18:44:54',
162
            'owner': "my_name",
163
            'circuit_scheduler': [],
164
            'enabled': True,
165
            'priority': 2
166
        }
167
        evc = EVC(**attributes)
168
169
        expected_dict = {
170
            'id': 'custom_id',
171
            'name': 'custom_name',
172
            'uni_a': attributes['uni_a'].as_dict(),
173
            'uni_z': attributes['uni_z'].as_dict(),
174
            'start_date': '2018-08-21T18:44:54',
175
            'end_date': '2018-08-21T18:44:55',
176
            'bandwidth': 0,
177
            'primary_links': [],
178
            'backup_links': [],
179
            'current_path': [],
180
            'primary_path': [],
181
            'backup_path': [],
182
            'dynamic_backup_path': False,
183
            '_requested': {
184
                           "id": "custom_id",
185
                           "name": "custom_name",
186
                           "uni_a": attributes['uni_a'].as_dict(),
187
                           "uni_z": attributes['uni_z'].as_dict(),
188
                           "start_date": '2018-08-21T18:44:54',
189
                           "end_date": '2018-08-21T18:44:55',
190
                           'primary_links': [],
191
                           'request_time': '2018-08-21T19:10:41',
192
                           'creation_time': '2018-08-21T18:44:54',
193
                           'owner': "my_name",
194
                           'circuit_scheduler': [],
195
                           'enabled': True,
196
                           'priority': 2
197
            },
198
            'request_time': '2018-08-21T19:10:41',
199
            'creation_time': '2018-08-21T18:44:54',
200
            'owner': 'my_name',
201
            'circuit_scheduler': [],
202
            'active': False,
203
            'enabled': True,
204
            'priority': 2
205
        }
206
        actual_dict = evc.as_dict()
207
        for name, value in expected_dict.items():
208
            actual = actual_dict.get(name)
209
            if name == '_requested':
210
                for requested_name, requested_value in value.items():
211
                    if isinstance(requested_value, UNI):
212
                        value[requested_name] = requested_value.as_dict()
213
            self.assertEqual(value, actual)
214