import pytest from apollo_utils.core.utils.result_types import DictResult, ListResult from apollo_utils.job.clients.utils.request_in_chunks.sync.request_in_chunks import request_in_chunks @pytest.mark.parametrize( "chunk_size,result_type,ids_list,func_results,call_count,expected_result", ( (1, DictResult, list(range(2)), [{"f1": 1}, {"f2": 2}], 2, {"f1": 1, "f2": 2}), (2, DictResult, list(range(3)), [{"a": 1, "b": "k"}, {"c": 3}], 2, {"a": 1, "b": "k", "c": 3}), (2, DictResult, list(range(5)), [{"a": 1}, {"b": "k"}, {"c": 3}], 3, {"a": 1, "b": "k", "c": 3}), (1, ListResult, list(range(3)), [[{"a": 1}, {"b": "k"}], [2], [5, 7]], 3, [{"a": 1}, {"b": "k"}, 2, 5, 7]), ), ) @pytest.mark.noapp def test_myrequest_in_chunks( mocker, chunk_size, result_type, ids_list, func_results, call_count, expected_result ): def func(ids1, *args, **kwargs): return func_results[min(ids1) // chunk_size] mock_func = mocker.Mock(side_effect=func) decorated_func = request_in_chunks( chunk_size=chunk_size, items_kwarg="ids1", result_type=result_type )(mock_func) result = decorated_func(ids1=ids_list) assert result == expected_result assert mock_func.call_count == call_count