def test_paginate_lt_maxresults_multipage(): """ Number of runs is less than max_results, but multiple pages are necessary to get all runs """ tokenized_runs = PagedList([create_run() for _ in range(10)], "token") no_token_runs = PagedList([create_run()], "") max_results = 50 max_per_page = 10 mocked_lambda = mock.Mock(side_effect=[tokenized_runs, tokenized_runs, no_token_runs]) TOTAL_RUNS = 21 paginated_runs = _paginate(mocked_lambda, max_per_page, max_results) assert len(paginated_runs) == TOTAL_RUNS
def test_paginate_gt_maxresults_onepage(): """" Number of runs that fit search criteria is greater than max_results. Only one page expected. Expected to only get max_results number of results back. """ runs = [create_run() for _ in range(10)] tokenized_runs = PagedList(runs, "abc") max_results = 10 max_per_page = 20 mocked_lambda = mock.Mock(return_value=tokenized_runs) paginated_runs = _paginate(mocked_lambda, max_per_page, max_results) mocked_lambda.assert_called_once_with(max_results, None) assert len(paginated_runs) == 10
def test_paginate_lt_maxresults_onepage_nonetoken(): """ Number of runs is less than max_results and fits on one page. The token passed back on the last page is None, not the emptystring """ runs = [create_run() for _ in range(5)] tokenized_runs = PagedList(runs, None) max_results = 50 max_per_page = 10 mocked_lambda = mock.Mock(return_value=tokenized_runs) paginated_runs = _paginate(mocked_lambda, max_per_page, max_results) mocked_lambda.assert_called_once() assert len(paginated_runs) == 5
def test_paginate_lt_maxresults_onepage(): """ Number of runs is less than max_results and fits on one page, so we only need to fetch one page. """ runs = [create_run() for _ in range(5)] tokenized_runs = PagedList(runs, "") max_results = 50 max_per_page = 10 mocked_lambda = mock.Mock(return_value=tokenized_runs) paginated_runs = _paginate(mocked_lambda, max_per_page, max_results) mocked_lambda.assert_called_once() assert len(paginated_runs) == 5
def test_paginate_gt_maxresults_multipage(): """ Number of runs that fit search criteria is greater than max_results. Multiple pages expected. Expected to only get max_results number of results back. """ # should ask for and return the correct number of max_results full_page_runs = PagedList([create_run() for _ in range(8)], "abc") partial_page = PagedList([create_run() for _ in range(4)], "def") max_results = 20 max_per_page = 8 mocked_lambda = mock.Mock(side_effect=[full_page_runs, full_page_runs, partial_page]) paginated_runs = _paginate(mocked_lambda, max_per_page, max_results) calls = [mock.call(8, None), mock.call(8, "abc"), mock.call(20 % 8, "abc")] mocked_lambda.assert_has_calls(calls) assert len(paginated_runs) == 20
def test_paginate_eq_maxresults_token(): """ Runs returned are equal to max_results which are equal to a full number of pages. The server might send a token back, or they might not (depending on if they know if more runs exist). In this example, a token IS sent back. Expected behavior is to NOT query for more pages. """ runs = [create_run() for _ in range(10)] tokenized_runs = PagedList(runs, "abc") blank_runs = PagedList([], "") max_results = 10 max_per_page = 10 mocked_lambda = mock.Mock(side_effect=[tokenized_runs, blank_runs]) paginated_runs = _paginate(mocked_lambda, max_per_page, max_results) mocked_lambda.assert_called_once() assert len(paginated_runs) == 10