|
12 | 12 | # under the License. |
13 | 13 | # |
14 | 14 |
|
| 15 | +import mock |
| 16 | +from mock import call |
| 17 | + |
| 18 | +from osc_lib import exceptions |
| 19 | +from osc_lib import utils |
| 20 | + |
15 | 21 | from openstackclient.tests.unit.volume.v1 import fakes as transfer_fakes |
16 | 22 | from openstackclient.volume.v1 import volume_transfer_request |
17 | 23 |
|
@@ -97,6 +103,84 @@ def test_transfer_create_with_name(self): |
97 | 103 | self.assertEqual(self.data, data) |
98 | 104 |
|
99 | 105 |
|
| 106 | +class TestTransferDelete(TestTransfer): |
| 107 | + |
| 108 | + volume_transfers = transfer_fakes.FakeTransfer.create_transfers(count=2) |
| 109 | + |
| 110 | + def setUp(self): |
| 111 | + super(TestTransferDelete, self).setUp() |
| 112 | + |
| 113 | + self.transfer_mock.get = ( |
| 114 | + transfer_fakes.FakeTransfer.get_transfers(self.volume_transfers)) |
| 115 | + self.transfer_mock.delete.return_value = None |
| 116 | + |
| 117 | + # Get the command object to mock |
| 118 | + self.cmd = volume_transfer_request.DeleteTransferRequest( |
| 119 | + self.app, None) |
| 120 | + |
| 121 | + def test_transfer_delete(self): |
| 122 | + arglist = [ |
| 123 | + self.volume_transfers[0].id |
| 124 | + ] |
| 125 | + verifylist = [ |
| 126 | + ("transfer_request", [self.volume_transfers[0].id]) |
| 127 | + ] |
| 128 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 129 | + |
| 130 | + result = self.cmd.take_action(parsed_args) |
| 131 | + |
| 132 | + self.transfer_mock.delete.assert_called_with( |
| 133 | + self.volume_transfers[0].id) |
| 134 | + self.assertIsNone(result) |
| 135 | + |
| 136 | + def test_delete_multiple_transfers(self): |
| 137 | + arglist = [] |
| 138 | + for v in self.volume_transfers: |
| 139 | + arglist.append(v.id) |
| 140 | + verifylist = [ |
| 141 | + ('transfer_request', arglist), |
| 142 | + ] |
| 143 | + |
| 144 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 145 | + result = self.cmd.take_action(parsed_args) |
| 146 | + |
| 147 | + calls = [] |
| 148 | + for v in self.volume_transfers: |
| 149 | + calls.append(call(v.id)) |
| 150 | + self.transfer_mock.delete.assert_has_calls(calls) |
| 151 | + self.assertIsNone(result) |
| 152 | + |
| 153 | + def test_delete_multiple_transfers_with_exception(self): |
| 154 | + arglist = [ |
| 155 | + self.volume_transfers[0].id, |
| 156 | + 'unexist_transfer', |
| 157 | + ] |
| 158 | + verifylist = [ |
| 159 | + ('transfer_request', arglist), |
| 160 | + ] |
| 161 | + |
| 162 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 163 | + |
| 164 | + find_mock_result = [self.volume_transfers[0], exceptions.CommandError] |
| 165 | + with mock.patch.object(utils, 'find_resource', |
| 166 | + side_effect=find_mock_result) as find_mock: |
| 167 | + try: |
| 168 | + self.cmd.take_action(parsed_args) |
| 169 | + self.fail('CommandError should be raised.') |
| 170 | + except exceptions.CommandError as e: |
| 171 | + self.assertEqual('1 of 2 volume transfer requests failed ' |
| 172 | + 'to delete.', str(e)) |
| 173 | + |
| 174 | + find_mock.assert_any_call( |
| 175 | + self.transfer_mock, self.volume_transfers[0].id) |
| 176 | + find_mock.assert_any_call(self.transfer_mock, 'unexist_transfer') |
| 177 | + |
| 178 | + self.assertEqual(2, find_mock.call_count) |
| 179 | + self.transfer_mock.delete.assert_called_once_with( |
| 180 | + self.volume_transfers[0].id, |
| 181 | + ) |
| 182 | + |
| 183 | + |
100 | 184 | class TestTransferList(TestTransfer): |
101 | 185 |
|
102 | 186 | # The Transfers to be listed |
|
0 commit comments