diff --git a/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py b/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py index b339aaedf..a739a628a 100644 --- a/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +++ b/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py @@ -364,7 +364,7 @@ def _read_pages( pagination_complete = False initial_token = self._paginator.get_initial_token() next_page_token: Optional[Mapping[str, Any]] = ( - {"next_page_token": initial_token} if initial_token else None + {"next_page_token": initial_token} if initial_token is not None else None ) while not pagination_complete: response = self._fetch_next_page(stream_state, stream_slice, next_page_token) diff --git a/unit_tests/sources/declarative/retrievers/test_simple_retriever.py b/unit_tests/sources/declarative/retrievers/test_simple_retriever.py index 442f8fc22..0425b4e84 100644 --- a/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +++ b/unit_tests/sources/declarative/retrievers/test_simple_retriever.py @@ -810,6 +810,42 @@ def retriever_read_pages(_, __, ___): cursor.close_slice.assert_called_once_with(stream_slice, None) +def test_given_initial_token_is_zero_when_read_records_then_pass_initial_token(): + record_selector = MagicMock() + record_selector.select_records.return_value = [] + cursor = MagicMock(spec=DeclarativeCursor) + paginator = MagicMock() + paginator.get_initial_token.return_value = 0 + paginator.next_page_token.return_value = None + + retriever = SimpleRetriever( + name="stream_name", + primary_key=primary_key, + requester=MagicMock(), + paginator=paginator, + record_selector=record_selector, + stream_slicer=cursor, + cursor=cursor, + parameters={}, + config={}, + ) + stream_slice = StreamSlice(cursor_slice={}, partition={}) + + response = requests.Response() + response.status_code = 200 + response._content = "{}".encode() + + with patch.object( + SimpleRetriever, + "_fetch_next_page", + return_value=response, + ) as fetch_next_page_mock: + list(retriever.read_records(stream_slice=stream_slice, records_schema={})) + fetch_next_page_mock.assert_called_once_with( + cursor.get_stream_state(), stream_slice, {"next_page_token": 0} + ) + + def _generate_slices(number_of_slices): return [{"date": f"2022-01-0{day + 1}"} for day in range(number_of_slices)]