Skip to content

Commit 28f9a9c

Browse files
Huanxuan Aostevemar
authored andcommitted
Add unit test for multi volume types delete
Missing unit test for multi volume types delete in volume v2 (v1 has been done), this patch add it. Change-Id: I5fe67196408157f8bdfe6399ba1e559cea3dc559
1 parent 365d4c9 commit 28f9a9c

2 files changed

Lines changed: 73 additions & 5 deletions

File tree

openstackclient/tests/unit/volume/v2/fakes.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,3 +903,23 @@ def create_types(attrs=None, count=2):
903903
volume_types.append(volume_type)
904904

905905
return volume_types
906+
907+
@staticmethod
908+
def get_types(types=None, count=2):
909+
"""Get an iterable MagicMock object with a list of faked types.
910+
911+
If types list is provided, then initialize the Mock object with the
912+
list. Otherwise create one.
913+
914+
:param List types:
915+
A list of FakeResource objects faking types
916+
:param Integer count:
917+
The number of types to be faked
918+
:return
919+
An iterable Mock object with side_effect set to a list of faked
920+
types
921+
"""
922+
if types is None:
923+
types = FakeType.create_types(count)
924+
925+
return mock.Mock(side_effect=types)

openstackclient/tests/unit/volume/v2/test_type.py

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#
1414

1515
import mock
16+
from mock import call
1617

1718
from osc_lib import exceptions
1819
from osc_lib import utils
@@ -133,31 +134,78 @@ def test_public_type_create_with_project(self):
133134

134135
class TestTypeDelete(TestType):
135136

136-
volume_type = volume_fakes.FakeType.create_one_type()
137+
volume_types = volume_fakes.FakeType.create_types(count=2)
137138

138139
def setUp(self):
139140
super(TestTypeDelete, self).setUp()
140141

141-
self.types_mock.get.return_value = self.volume_type
142+
self.types_mock.get = volume_fakes.FakeType.get_types(
143+
self.volume_types)
142144
self.types_mock.delete.return_value = None
143145

144146
# Get the command object to mock
145147
self.cmd = volume_type.DeleteVolumeType(self.app, None)
146148

147149
def test_type_delete(self):
148150
arglist = [
149-
self.volume_type.id
151+
self.volume_types[0].id
150152
]
151153
verifylist = [
152-
("volume_types", [self.volume_type.id])
154+
("volume_types", [self.volume_types[0].id])
153155
]
154156
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
155157

156158
result = self.cmd.take_action(parsed_args)
157159

158-
self.types_mock.delete.assert_called_with(self.volume_type)
160+
self.types_mock.delete.assert_called_with(self.volume_types[0])
159161
self.assertIsNone(result)
160162

163+
def test_delete_multiple_types(self):
164+
arglist = []
165+
for t in self.volume_types:
166+
arglist.append(t.id)
167+
verifylist = [
168+
('volume_types', arglist),
169+
]
170+
171+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
172+
result = self.cmd.take_action(parsed_args)
173+
174+
calls = []
175+
for t in self.volume_types:
176+
calls.append(call(t))
177+
self.types_mock.delete.assert_has_calls(calls)
178+
self.assertIsNone(result)
179+
180+
def test_delete_multiple_types_with_exception(self):
181+
arglist = [
182+
self.volume_types[0].id,
183+
'unexist_type',
184+
]
185+
verifylist = [
186+
('volume_types', arglist),
187+
]
188+
189+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
190+
191+
find_mock_result = [self.volume_types[0], exceptions.CommandError]
192+
with mock.patch.object(utils, 'find_resource',
193+
side_effect=find_mock_result) as find_mock:
194+
try:
195+
self.cmd.take_action(parsed_args)
196+
self.fail('CommandError should be raised.')
197+
except exceptions.CommandError as e:
198+
self.assertEqual('1 of 2 volume types failed to delete.',
199+
str(e))
200+
find_mock.assert_any_call(
201+
self.types_mock, self.volume_types[0].id)
202+
find_mock.assert_any_call(self.types_mock, 'unexist_type')
203+
204+
self.assertEqual(2, find_mock.call_count)
205+
self.types_mock.delete.assert_called_once_with(
206+
self.volume_types[0]
207+
)
208+
161209

162210
class TestTypeList(TestType):
163211

0 commit comments

Comments
 (0)