From 0d5b6a643aca044ef1abd60c50424ade4fbf017b Mon Sep 17 00:00:00 2001 From: Mariano Gappa Date: Fri, 5 Jul 2024 14:31:12 +0100 Subject: [PATCH] fix: Fix pagination logic for responses on Typeform plugin. --- .../source/typeform/plugin/typeform/client.py | 2 +- .../typeform/tests/typeform/test_client.py | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/plugins/source/typeform/plugin/typeform/client.py b/plugins/source/typeform/plugin/typeform/client.py index 33b3e118b3191e..d8a2731ee340be 100644 --- a/plugins/source/typeform/plugin/typeform/client.py +++ b/plugins/source/typeform/plugin/typeform/client.py @@ -35,4 +35,4 @@ def list_form_responses(self, form_id, page=1): yield form if resp["page_count"] > page: - yield from self.list_form_responses(page + 1) + yield from self.list_form_responses(form_id, page + 1) diff --git a/plugins/source/typeform/tests/typeform/test_client.py b/plugins/source/typeform/tests/typeform/test_client.py index a01cd17d48933b..c61d02a33fe5c1 100644 --- a/plugins/source/typeform/tests/typeform/test_client.py +++ b/plugins/source/typeform/tests/typeform/test_client.py @@ -16,6 +16,9 @@ def do_GET(self): if parts[0] == "/forms": query = parse_qs(parts[1]) self._handle_forms(q=query) + elif parts[0] == "/forms/form1/responses": + query = parse_qs(parts[1]) + self._handle_forms_responses(q=query) else: self.send_response(requests.codes.not_found) self.end_headers() @@ -48,6 +51,32 @@ def _handle_forms(self, q): } self.wfile.write(json.dumps(resp).encode("utf-8")) + def _handle_forms_responses(self, q): + self.send_response(requests.codes.ok) + self.end_headers() + if q["page"] == ["1"]: + resp = { + "items": [ + { + "answers": [], + "submitted_at": "2017-09-14T22:38:22Z", + }, + ], + "page_count": 2, + } + self.wfile.write(json.dumps(resp).encode("utf-8")) + else: + resp = { + "items": [ + { + "answers": [], + "submitted_at": "2017-09-14T22:33:56Z", + }, + ], + "page_count": 2, + } + self.wfile.write(json.dumps(resp).encode("utf-8")) + def get_free_port(): s = socket.socket(socket.AF_INET, type=socket.SOCK_STREAM) @@ -81,3 +110,13 @@ def test_list_forms(self): assert len(forms) == 2 assert forms[0]["id"] == "form1" assert forms[1]["id"] == "form2" + + def test_list_forms_responses(self): + client = TypeformClient( + base_url="http://localhost:{}".format(self.mock_server_port), + access_token="fake", + ) + forms = list(client.list_form_responses("form1")) + assert len(forms) == 2 + assert forms[0]["submitted_at"] == "2017-09-14T22:38:22Z" + assert forms[1]["submitted_at"] == "2017-09-14T22:33:56Z"