import pytest from epc_api.client import EpcClient from model_data.downloader import pagenated_epc_download # Mock EPC search response mock_epc_response = { "rows": [ {"data1": "value1"}, {"data2": "value2"}, ] } class TestDownloader: @pytest.fixture def mock_client(self, mocker): # mocker is a wrapper around unittest.mock.Mock, extending with # additional features specific to pytest client = mocker.Mock(spec=EpcClient()) client.domestic.search.return_value = mock_epc_response return client def test_pagenated_epc_download_basic(self, mock_client): params = {"address": "Test Address", "postcode": "AB12CD"} page_size = len(mock_epc_response["rows"]) n_pages = 1 results = pagenated_epc_download(mock_client, params, page_size, n_pages, verbose=1) assert len(results) == page_size * n_pages assert results == mock_epc_response["rows"] mock_client.domestic.search.assert_called_with(params=params, offset_from=0, size=page_size) def test_pagenated_epc_download_multiple_pages(self, mock_client): params = {"address": "Test Address", "postcode": "AB12CD"} page_size = len(mock_epc_response["rows"]) n_pages = 2 results = pagenated_epc_download(mock_client, params, page_size, n_pages) assert len(results) == page_size * n_pages assert results == mock_epc_response["rows"] * n_pages mock_client.domestic.search.assert_called_with(params=params, offset_from=page_size, size=page_size) def test_pagenated_epc_download_search_returns_none(self, mock_client): mock_client.domestic.search.return_value = None # Mock the search method to return None params = {"address": "Test Address", "postcode": "AB12CD"} page_size = 1 n_pages = 1 results = pagenated_epc_download(mock_client, params, page_size, n_pages) assert results == []