diff --git a/epc_data/downloader.py b/epc_data/downloader.py index b1df1f73..7dcc84ba 100644 --- a/epc_data/downloader.py +++ b/epc_data/downloader.py @@ -17,6 +17,9 @@ def pagenated_epc_download(client, params, page_size, n_pages, verbose=0, slowdo # data to be perfectly up to date if search_resp is None: break + + n_completed += 1 + results.extend(search_resp["rows"]) if n_completed == n_pages: complete = True diff --git a/epc_data/requirements.txt b/epc_data/requirements.txt index 6a8ff0d6..ad0cd707 100644 --- a/epc_data/requirements.txt +++ b/epc_data/requirements.txt @@ -5,4 +5,5 @@ pandas mypy pytest mock -pytest-cov \ No newline at end of file +pytest-cov +pytest-mock \ No newline at end of file diff --git a/epc_data/tests/test_downloader.py b/epc_data/tests/test_downloader.py new file mode 100644 index 00000000..a30f017c --- /dev/null +++ b/epc_data/tests/test_downloader.py @@ -0,0 +1,56 @@ +import pytest +from epc_api.client import EpcClient +from epc_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 == [] diff --git a/epc_data/tests/test_property.py b/epc_data/tests/test_property.py index 0ca26111..5f5ef524 100644 --- a/epc_data/tests/test_property.py +++ b/epc_data/tests/test_property.py @@ -42,7 +42,7 @@ class TestProperty: assert inst3.data == {"some": "data"} data = inst3.search_address_epc() - assert data is Non + assert data is None def test_search_address_epc(self, property_instance): # Call the method to test