Skip to content

Commit e573923

Browse files
Extend pagination related unit tests
1 parent e44ee96 commit e573923

7 files changed

Lines changed: 147 additions & 10 deletions

File tree

coriolisclient/tests/cli/test_deployments.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,12 +329,23 @@ def test_get_parser(self):
329329
parser = self.cli.get_parser('coriolis')
330330
self.assertIsInstance(parser, argparse.ArgumentParser)
331331

332-
def test_take_action(self):
332+
@mock.patch("coriolisclient.cli.utils.parse_sort_arg")
333+
def test_take_action(self, mock_parse_sort_arg):
334+
mock_parse_sort_arg.return_value = (
335+
mock.sentinel.sort_keys, mock.sentinel.sort_dirs)
336+
337+
mock_args = mock.MagicMock()
333338
mock_fun = self.mock_app.client_manager.coriolis.deployments.list
334339
mock_fun.return_value = [
335340
v1_deployments.Deployment(mock.MagicMock(), DEPLOYMENT_LIST_DATA)]
336341

337-
columns, data = self.cli.take_action(mock.MagicMock())
342+
columns, data = self.cli.take_action(mock_args)
338343

339344
self.assertEqual(deployments.DeploymentFormatter().columns, columns)
340345
self.assertEqual([DEPLOYMENT_LIST_FORMATTED_DATA], list(data))
346+
mock_fun.assert_called_once_with(
347+
marker=mock_args.marker,
348+
limit=mock_args.limit,
349+
sort_keys=mock.sentinel.sort_keys,
350+
sort_dirs=mock.sentinel.sort_dirs,
351+
)

coriolisclient/tests/cli/test_transfer_executions.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,14 +419,18 @@ def test_get_parser(
419419

420420
@mock.patch.object(transfer_executions.TransferExecutionFormatter,
421421
'list_objects')
422+
@mock.patch("coriolisclient.cli.utils.parse_sort_arg")
422423
def test_take_action(
423424
self,
425+
mock_parse_sort_arg,
424426
mock_list_objects
425427
):
428+
mock_parse_sort_arg.return_value = (
429+
mock.sentinel.sort_keys, mock.sentinel.sort_dirs)
430+
426431
args = mock.Mock()
427432
args.transfer = mock.sentinel.transfer
428433
mock_transfer_list = mock.Mock()
429-
args.sort = None
430434
self.mock_app.client_manager.coriolis.transfer_executions.list = \
431435
mock_transfer_list
432436

@@ -440,8 +444,8 @@ def test_take_action(
440444
mock.sentinel.transfer,
441445
marker=args.marker,
442446
limit=args.limit,
443-
sort_keys=[],
444-
sort_dirs=[],
447+
sort_keys=mock.sentinel.sort_keys,
448+
sort_dirs=mock.sentinel.sort_dirs,
445449
)
446450
mock_list_objects.assert_called_once_with(
447451
mock_transfer_list.return_value)

coriolisclient/tests/cli/test_transfers.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,19 +470,31 @@ def test_get_parser(self, mock_get_parser):
470470
mock_get_parser.assert_called_once_with(mock.sentinel.prog_name)
471471

472472
@mock.patch.object(transfers.TransferFormatter, 'list_objects')
473-
def test_take_action(self, mock_list_objects):
473+
@mock.patch("coriolisclient.cli.utils.parse_sort_arg")
474+
def test_take_action(self, mock_parse_sort_arg, mock_list_objects):
475+
mock_parse_sort_arg.return_value = (
476+
mock.sentinel.sort_keys, mock.sentinel.sort_dirs)
477+
474478
args = mock.Mock()
475479
args.sort = None
476-
mock_transfer = mock.Mock()
477-
self.mock_app.client_manager.coriolis.transfers.list = mock_transfer
480+
mock_transfer_list = mock.Mock()
481+
self.mock_app.client_manager.coriolis.transfers.list = (
482+
mock_transfer_list)
478483

479484
result = self.transfer.take_action(args)
480485

481486
self.assertEqual(
482487
mock_list_objects.return_value,
483488
result
484489
)
485-
mock_list_objects.assert_called_once_with(mock_transfer.return_value)
490+
mock_list_objects.assert_called_once_with(
491+
mock_transfer_list.return_value)
492+
mock_transfer_list.assert_called_once_with(
493+
marker=args.marker,
494+
limit=args.limit,
495+
sort_keys=mock.sentinel.sort_keys,
496+
sort_dirs=mock.sentinel.sort_dirs,
497+
)
486498

487499

488500
class UpdateTransferTestCase(test_base.CoriolisBaseTestCase):

coriolisclient/tests/test_base.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ def setUp(self):
279279
self.manager = base.BaseManager(mock_client)
280280

281281
def test_list(self):
282-
self.manager.client.get(mock.sentinel.url).json.return_value = {
282+
self.manager.client.get.return_value.json.return_value = {
283283
"mock_response_key": {
284284
"data": [mock.sentinel.data1, mock.sentinel.data2]}
285285
}
@@ -294,6 +294,7 @@ def test_list(self):
294294
values_key="data"
295295
)
296296

297+
self.manager.client.get.assert_called_once_with(mock.sentinel.url)
297298
self.assertEqual(
298299
[obj_class.return_value] * 2,
299300
result
@@ -303,6 +304,46 @@ def test_list(self):
303304
mock.call(self.manager, mock.sentinel.data2, loaded=True)
304305
])
305306

307+
def test_list_with_dict_query(self):
308+
self.manager.client.get.return_value.json.return_value = {
309+
"mock_response_key": {"data": []}
310+
}
311+
testutils.get_wrapped_function(self.manager._list)(
312+
self.manager,
313+
url="test-url",
314+
response_key="mock_response_key",
315+
obj_class=mock.Mock(),
316+
json=None,
317+
values_key="data",
318+
query={
319+
"some_filter": "some_value",
320+
"some_other_filter": "some_other_value"
321+
}
322+
)
323+
self.manager.client.get.assert_called_once_with(
324+
"test-url?some_filter=some_value&"
325+
"some_other_filter=some_other_value")
326+
327+
def test_list_with_tuple_list_query(self):
328+
self.manager.client.get.return_value.json.return_value = {
329+
"mock_response_key": {"data": []}
330+
}
331+
testutils.get_wrapped_function(self.manager._list)(
332+
self.manager,
333+
url="test-url",
334+
response_key="mock_response_key",
335+
obj_class=mock.Mock(),
336+
json=None,
337+
values_key="data",
338+
query=[
339+
("some_filter", "some_value"),
340+
("some_other_filter", "some_other_value"),
341+
]
342+
)
343+
self.manager.client.get.assert_called_once_with(
344+
"test-url?some_filter=some_value&"
345+
"some_other_filter=some_other_value")
346+
306347
def test_list_json(self):
307348
(self.manager.client.post(mock.sentinel.url, json=True).json.
308349
return_value) = [mock.sentinel.data]

coriolisclient/tests/v1/test_deployments.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,27 @@ def test_list(self):
7777
mock_list.assert_called_once_with(
7878
'/deployments/detail', 'deployments', query=[])
7979

80+
def test_list_with_pagination(self):
81+
with mock.patch.object(self.deployments, '_list') as mock_list:
82+
result = self.deployments.list(
83+
detail=True,
84+
marker=mock.sentinel.marker,
85+
limit=mock.sentinel.limit,
86+
sort_keys=[mock.sentinel.sort_key0, mock.sentinel.sort_key1],
87+
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],
88+
)
89+
exp_query = [
90+
("marker", mock.sentinel.marker),
91+
("limit", mock.sentinel.limit),
92+
("sort_key", mock.sentinel.sort_key0),
93+
("sort_key", mock.sentinel.sort_key1),
94+
("sort_dir", mock.sentinel.sort_dir0),
95+
("sort_dir", mock.sentinel.sort_dir1),
96+
]
97+
self.assertEqual(mock_list.return_value, result)
98+
mock_list.assert_called_once_with(
99+
'/deployments/detail', 'deployments', query=exp_query)
100+
80101
def test_get(self):
81102
deployment = mock.Mock(uuid=DEPLOYMENT_ID)
82103
with mock.patch.object(self.deployments, '_get') as mock_get:

coriolisclient/tests/v1/test_transfer_executions.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,31 @@ def test_list(self, mock_list):
5252
'/transfers/%s/executions' % mock.sentinel.transfer, "executions",
5353
query=[])
5454

55+
@mock.patch.object(transfer_executions.TransferExecutionManager, "_list")
56+
def test_list_with_pagination(self, mock_list):
57+
result = self.transfer_execution.list(
58+
mock.sentinel.transfer,
59+
marker=mock.sentinel.marker,
60+
limit=mock.sentinel.limit,
61+
sort_keys=[mock.sentinel.sort_key0, mock.sentinel.sort_key1],
62+
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],
63+
)
64+
exp_query = [
65+
("marker", mock.sentinel.marker),
66+
("limit", mock.sentinel.limit),
67+
("sort_key", mock.sentinel.sort_key0),
68+
("sort_key", mock.sentinel.sort_key1),
69+
("sort_dir", mock.sentinel.sort_dir0),
70+
("sort_dir", mock.sentinel.sort_dir1),
71+
]
72+
self.assertEqual(
73+
mock_list.return_value,
74+
result
75+
)
76+
mock_list.assert_called_once_with(
77+
'/transfers/%s/executions' % mock.sentinel.transfer, "executions",
78+
query=exp_query)
79+
5580
@mock.patch.object(transfer_executions.TransferExecutionManager, "_get")
5681
def test_get(self, mock_get):
5782
result = self.transfer_execution.get(

coriolisclient/tests/v1/test_transfers.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,29 @@ def test_list(self, mock_list):
8787
)
8888
mock_list.assert_called_once_with("/transfers", "transfers", query=[])
8989

90+
@mock.patch.object(transfers.TransferManager, "_list")
91+
def test_list_with_pagination(self, mock_list):
92+
result = self.transfer.list(
93+
detail=False,
94+
marker=mock.sentinel.marker,
95+
limit=mock.sentinel.limit,
96+
sort_keys=[mock.sentinel.sort_key0, mock.sentinel.sort_key1],
97+
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],)
98+
exp_query = [
99+
("marker", mock.sentinel.marker),
100+
("limit", mock.sentinel.limit),
101+
("sort_key", mock.sentinel.sort_key0),
102+
("sort_key", mock.sentinel.sort_key1),
103+
("sort_dir", mock.sentinel.sort_dir0),
104+
("sort_dir", mock.sentinel.sort_dir1),
105+
]
106+
self.assertEqual(
107+
mock_list.return_value,
108+
result
109+
)
110+
mock_list.assert_called_once_with(
111+
"/transfers", "transfers", query=exp_query)
112+
90113
@mock.patch.object(transfers.TransferManager, "_list")
91114
def test_list_details(self, mock_list):
92115
result = self.transfer.list(detail=True)

0 commit comments

Comments
 (0)