|
13 | 13 | # |
14 | 14 |
|
15 | 15 | import mock |
| 16 | +from mock import call |
16 | 17 |
|
17 | 18 | from osc_lib import exceptions |
18 | 19 | from osc_lib import utils |
@@ -133,31 +134,78 @@ def test_public_type_create_with_project(self): |
133 | 134 |
|
134 | 135 | class TestTypeDelete(TestType): |
135 | 136 |
|
136 | | - volume_type = volume_fakes.FakeType.create_one_type() |
| 137 | + volume_types = volume_fakes.FakeType.create_types(count=2) |
137 | 138 |
|
138 | 139 | def setUp(self): |
139 | 140 | super(TestTypeDelete, self).setUp() |
140 | 141 |
|
141 | | - self.types_mock.get.return_value = self.volume_type |
| 142 | + self.types_mock.get = volume_fakes.FakeType.get_types( |
| 143 | + self.volume_types) |
142 | 144 | self.types_mock.delete.return_value = None |
143 | 145 |
|
144 | 146 | # Get the command object to mock |
145 | 147 | self.cmd = volume_type.DeleteVolumeType(self.app, None) |
146 | 148 |
|
147 | 149 | def test_type_delete(self): |
148 | 150 | arglist = [ |
149 | | - self.volume_type.id |
| 151 | + self.volume_types[0].id |
150 | 152 | ] |
151 | 153 | verifylist = [ |
152 | | - ("volume_types", [self.volume_type.id]) |
| 154 | + ("volume_types", [self.volume_types[0].id]) |
153 | 155 | ] |
154 | 156 | parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
155 | 157 |
|
156 | 158 | result = self.cmd.take_action(parsed_args) |
157 | 159 |
|
158 | | - self.types_mock.delete.assert_called_with(self.volume_type) |
| 160 | + self.types_mock.delete.assert_called_with(self.volume_types[0]) |
159 | 161 | self.assertIsNone(result) |
160 | 162 |
|
| 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 | + |
161 | 209 |
|
162 | 210 | class TestTypeList(TestType): |
163 | 211 |
|
|
0 commit comments