Test Failed
Pull Request — master (#277)
by Gleyberson
01:26
created

tests.unit.commands.test_napps_api   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 293
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 192
dl 0
loc 293
rs 10
c 0
b 0
f 0
wmc 23

23 Methods

Rating   Name   Duplication   Size   Complexity  
A TestNAppsAPI.test_install_napps() 0 12 1
A TestNAppsAPI.test_install_napp() 0 9 1
A TestNAppsAPI.test_delete() 0 12 1
A TestNAppsAPI.test_uninstall() 0 13 1
A TestNAppsAPI.test_reload__any() 0 11 1
A TestNAppsAPI.test_reload__error() 0 14 1
A TestNAppsAPI.test_disable_napp() 0 9 1
A TestNAppsAPI.test_enable_napp__success() 0 8 1
A TestNAppsAPI.test_enable__all() 0 15 1
A TestNAppsAPI.test_enable__any() 0 13 1
A TestNAppsAPI.test_install() 0 13 1
A TestNAppsAPI.test_reload__all() 0 10 1
A TestNAppsAPI.test_search() 0 12 1
A TestNAppsAPI.test_enable_napp__error() 0 8 1
A TestNAppsAPI.test_create() 0 6 1
A TestNAppsAPI.test_disable__any() 0 12 1
A TestNAppsAPI.setUp() 0 3 1
A TestNAppsAPI.test_upload() 0 6 1
A TestNAppsAPI.test_prepare() 0 9 1
A TestNAppsAPI.test_list() 0 18 1
A TestNAppsAPI.test_enable_napps() 0 13 1
A TestNAppsAPI.test_disable__all() 0 14 1
A TestNAppsAPI.test_print_napps() 0 17 1
1
"""kytos.cli.commands.napps.api.NAppsAPI tests."""
2
import unittest
3
from unittest.mock import MagicMock, call, patch
4
5
from requests import HTTPError
6
7
from kytos.cli.commands.napps.api import NAppsAPI
8
9
10
# pylint: disable=too-many-public-methods
11
class TestNAppsAPI(unittest.TestCase):
12
    """Test the class NAppsAPI."""
13
14
    def setUp(self):
15
        """Execute steps before each tests."""
16
        self.napps_api = NAppsAPI()
17
18
    @patch('kytos.cli.commands.napps.api.NAppsManager')
19
    def test_disable__all(self, mock_napps_manager):
20
        """Test disable method to all napps."""
21
        napp = ('user', 'napp', 'version')
22
23
        mgr = MagicMock()
24
        mgr.get_enabled.return_value = [napp]
25
        mock_napps_manager.return_value = mgr
26
27
        args = {'all': True}
28
        self.napps_api.disable(args)
29
30
        mgr.set_napp.assert_called_with(*napp)
31
        mgr.disable.assert_called()
32
33
    @patch('kytos.cli.commands.napps.api.NAppsManager')
34
    def test_disable__any(self, mock_napps_manager):
35
        """Test disable method to any napp."""
36
        mgr = MagicMock()
37
        mock_napps_manager.return_value = mgr
38
39
        napp = ('user', 'napp', 'version')
40
        args = {'all': False, '<napp>': [napp]}
41
        self.napps_api.disable(args)
42
43
        mgr.set_napp.assert_called_with(*napp)
44
        mgr.disable.assert_called()
45
46
    def test_disable_napp(self):
47
        """Test disable_napp method."""
48
        mgr = MagicMock()
49
        mgr.is_enabled.side_effect = [True, False]
50
51
        self.napps_api.disable_napp(mgr)
52
        self.napps_api.disable_napp(mgr)
53
54
        mgr.disable.assert_called_once()
55
56
    @patch('kytos.cli.commands.napps.api.NAppsManager')
57
    def test_enable__all(self, mock_napps_manager):
58
        """Test enable method to all napps."""
59
        napp = ('user', 'napp', 'version')
60
61
        mgr = MagicMock()
62
        mgr.is_enabled.return_value = False
63
        mgr.get_disabled.return_value = [napp]
64
        mock_napps_manager.return_value = mgr
65
66
        args = {'all': True}
67
        self.napps_api.enable(args)
68
69
        mgr.set_napp.assert_called_with(*napp)
70
        mgr.enable.assert_called()
71
72
    @patch('kytos.cli.commands.napps.api.NAppsManager')
73
    def test_enable__any(self, mock_napps_manager):
74
        """Test enable method to any napp."""
75
        mgr = MagicMock()
76
        mgr.is_enabled.return_value = False
77
        mock_napps_manager.return_value = mgr
78
79
        napp = ('user', 'napp', 'version')
80
        args = {'all': False, '<napp>': [napp]}
81
        self.napps_api.enable(args)
82
83
        mgr.set_napp.assert_called_with(*napp)
84
        mgr.enable.assert_called()
85
86
    def test_enable_napp__success(self):
87
        """Test enable_napp method to success case."""
88
        mgr = MagicMock()
89
        mgr.is_enabled.return_value = False
90
91
        self.napps_api.enable_napp(mgr)
92
93
        mgr.enable.assert_called()
94
95
    def test_enable_napp__error(self):
96
        """Test enable_napp method to error case."""
97
        mgr = MagicMock()
98
        mgr.is_enabled.return_value = True
99
100
        self.napps_api.enable_napp(mgr)
101
102
        mgr.enable.assert_not_called()
103
104
    @patch('kytos.cli.commands.napps.api.NAppsManager')
105
    @patch('kytos.cli.commands.napps.api.NAppsAPI.enable_napp')
106
    def test_enable_napps(self, *args):
107
        """Test enable_napps method."""
108
        (mock_enable_napp, mock_napps_manager) = args
109
        mgr = MagicMock()
110
        mock_napps_manager.return_value = mgr
111
112
        napp = ('user', 'napp', 'version')
113
        self.napps_api.enable_napps([napp])
114
115
        mgr.set_napp.assert_called_with(*napp)
116
        mock_enable_napp.assert_called_with(mgr)
117
118
    @patch('kytos.cli.commands.napps.api.NAppsManager.create_napp')
119
    def test_create(self, mock_create_napp):
120
        """Test create method."""
121
        self.napps_api.create({})
122
123
        mock_create_napp.assert_called()
124
125
    @patch('kytos.cli.commands.napps.api.NAppsManager.upload')
126
    def test_upload(self, mock_upload):
127
        """Test upload method."""
128
        self.napps_api.upload({})
129
130
        mock_upload.assert_called()
131
132
    @patch('kytos.cli.commands.napps.api.NAppsManager')
133
    def test_uninstall(self, mock_napps_manager):
134
        """Test uninstall method."""
135
        mgr = MagicMock()
136
        mgr.is_installed.return_value = True
137
        mock_napps_manager.return_value = mgr
138
139
        napp = ('user', 'napp', 'version')
140
        args = {'<napp>': [napp]}
141
        self.napps_api.uninstall(args)
142
143
        mgr.set_napp.assert_called_with(*napp)
144
        mgr.remote_uninstall.assert_called()
145
146
    @patch('kytos.cli.commands.napps.api.NAppsManager')
147
    def test_install(self, mock_napps_manager):
148
        """Test install method."""
149
        mgr = MagicMock()
150
        mgr.is_installed.return_value = False
151
        mock_napps_manager.return_value = mgr
152
153
        napp = ('user', 'napp', 'version')
154
        args = {'<napp>': [napp]}
155
        self.napps_api.install(args)
156
157
        mgr.set_napp.assert_called_with(*napp)
158
        mgr.remote_install.assert_called()
159
160
    @patch('kytos.cli.commands.napps.api.NAppsManager')
161
    def test_install_napps(self, mock_napps_manager):
162
        """Test prepare method."""
163
        mgr = MagicMock()
164
        mgr.is_installed.return_value = False
165
        mock_napps_manager.return_value = mgr
166
167
        napp = ('user', 'napp', 'version')
168
        self.napps_api.install_napps([napp])
169
170
        mgr.set_napp.assert_called_with(*napp)
171
        mgr.remote_install.assert_called()
172
173
    @patch('kytos.cli.commands.napps.api.NAppsManager')
174
    def test_install_napp(self, mock_napps_manager):
175
        """Test install_napp method."""
176
        mgr = MagicMock()
177
        mock_napps_manager.return_value = mgr
178
179
        self.napps_api.install_napp(mgr)
180
181
        mgr.remote_install.assert_called()
182
183
    @patch('kytos.cli.commands.napps.api.NAppsManager.search')
184
    @patch('kytos.cli.commands.napps.api.NAppsAPI._print_napps')
185
    def test_search(self, *args):
186
        """Test search method."""
187
        (mock_print, mock_search) = args
188
        mock_search.return_value = [{'username': 'kytos', 'name': 'mef_eline',
189
                                     'description': '', 'tags': ['A', 'B']}]
190
191
        args = {'<pattern>': '^[a-z]+'}
192
        self.napps_api.search(args)
193
194
        mock_print.assert_called_with({(('kytos', 'mef_eline'), '')})
195
196
    @patch('builtins.print')
197
    @patch('kytos.cli.commands.napps.api.NAppsManager')
198
    def test_print_napps(self, *args):
199
        """Test _print_napps method."""
200
        (mock_napps_manager, mock_print) = args
201
        napps = [('kytos', 'mef_eline')]
202
203
        mgr = MagicMock()
204
        mgr.get_enabled.return_value = napps
205
        mgr.get_installed.return_value = napps
206
        mock_napps_manager.return_value = mgr
207
208
        # pylint: disable=protected-access
209
        self.napps_api._print_napps({(('kytos', 'mef_eline'), 'desc')})
210
        # pylint: enable=protected-access
211
212
        mock_print.assert_has_calls([call(' [ie]  | kytos/mef_eline | desc')])
213
214
    @patch('kytos.cli.commands.napps.api.NAppsManager')
215
    @patch('kytos.cli.commands.napps.api.NAppsAPI.print_napps')
216
    def test_list(self, *args):
217
        """Test list method."""
218
        (mock_print, mock_napps_manager) = args
219
        napps = [('kytos', 'mef_eline')]
220
221
        mgr = MagicMock()
222
        mgr.get_version.return_value = '123'
223
        mgr.get_description.return_value = 'desc'
224
        mgr.get_enabled.return_value = napps
225
        mgr.get_installed.return_value = napps
226
        mock_napps_manager.return_value = mgr
227
228
        self.napps_api.list({})
229
230
        expected = [('[ie]', 'kytos/mef_eline:123', 'desc')]
231
        mock_print.assert_called_with(expected)
232
233
    @patch('kytos.cli.commands.napps.api.NAppsManager')
234
    def test_delete(self, mock_napps_manager):
235
        """Test delete method."""
236
        mgr = MagicMock()
237
        mock_napps_manager.return_value = mgr
238
239
        napp = ('user', 'napp', 'version')
240
        args = {'<napp>': [napp]}
241
        self.napps_api.delete(args)
242
243
        mgr.set_napp.assert_called_with(*napp)
244
        mgr.delete.assert_called()
245
246
    @patch('kytos.cli.commands.napps.api.NAppsManager')
247
    def test_prepare(self, mock_napps_manager):
248
        """Test prepare method."""
249
        mgr = MagicMock()
250
        mock_napps_manager.return_value = mgr
251
252
        self.napps_api.prepare(None)
253
254
        mgr.prepare.assert_called()
255
256
    @patch('kytos.cli.commands.napps.api.NAppsManager')
257
    def test_reload__all(self, mock_napps_manager):
258
        """Test reload method to all napps."""
259
        mgr = MagicMock()
260
        mock_napps_manager.return_value = mgr
261
262
        args = {'all': True}
263
        self.napps_api.reload(args)
264
265
        mgr.reload.assert_called()
266
267
    @patch('kytos.cli.commands.napps.api.NAppsManager')
268
    def test_reload__any(self, mock_napps_manager):
269
        """Test reload method to any napp."""
270
        mgr = MagicMock()
271
        mock_napps_manager.return_value = mgr
272
273
        napps = ['A', 'B', 'C']
274
        args = {'all': False, '<napp>': napps}
275
        self.napps_api.reload(args)
276
277
        mgr.reload.assert_called_with(napps)
278
279
    @patch('kytos.cli.commands.napps.api.LOG')
280
    @patch('kytos.cli.commands.napps.api.NAppsManager')
281
    def test_reload__error(self, *args):
282
        """Test reload method to error case."""
283
        (mock_napps_manager, mock_logger) = args
284
        response = MagicMock(status_code=500, content='{"error": "info"}')
285
        mgr = MagicMock()
286
        mgr.reload.side_effect = HTTPError(response=response)
287
        mock_napps_manager.return_value = mgr
288
289
        args = {'all': True}
290
        self.napps_api.reload(args)
291
292
        self.assertEqual(mock_logger.error.call_count, 1)
293