Skip to content

Commit e924224

Browse files
authored
Limit page nexts (#4)
1 parent 69492bc commit e924224

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

tests/test_testspace_api.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,42 @@ def test_get_projects_paginated(load_json, testspace_api, requests_mock):
8686
json=load_json[:1],
8787
headers={"link": ", ".join([links_string_first, links_string_last])},
8888
)
89-
response_json = testspace_api.get_projects()
89+
response_json = testspace_api.get_projects(limit=None)
9090

9191
project_names = [project["name"] for project in response_json]
9292
assert testspace_api.project in project_names
9393

9494

95+
@pytest.mark.parametrize("load_json", ["projects.json"], indirect=True)
96+
def test_get_projects_paginated_limited(load_json, testspace_api, requests_mock):
97+
url = testspace_api.url
98+
testspace_url = "https://{}/api/projects".format(url)
99+
100+
links_string_first = '<{}?page={}>; rel="{}"'.format(testspace_url, 1, "first")
101+
links_string_next = '<{}?page={}>; rel="{}"'.format(testspace_url, 2, "next")
102+
links_string_last = '<{}?page={}>; rel="{}"'.format(testspace_url, 2, "last")
103+
104+
requests_mock.get(
105+
"/api/projects",
106+
json=load_json[1:],
107+
headers={
108+
"link": ", ".join(
109+
[links_string_first, links_string_next, links_string_last]
110+
)
111+
},
112+
complete_qs=True,
113+
)
114+
requests_mock.get(
115+
"/api/projects?page=2",
116+
json=load_json[:1],
117+
headers={"link": ", ".join([links_string_first, links_string_last])},
118+
)
119+
num_projects = 1
120+
response_json = testspace_api.get_projects(limit=num_projects)
121+
122+
assert len(response_json) == num_projects
123+
124+
95125
@pytest.mark.parametrize("load_json", ["projects.json"], indirect=True)
96126
def test_get_project_name(load_json, testspace_api, requests_mock):
97127
project = testspace_api.project

testspace/testspace.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,19 +174,22 @@ def get_request(self, path=None):
174174
return response
175175

176176
def get_request_json(self, path=None, limit=30):
177-
if type(limit) is not int or limit <= 0:
177+
if limit is None:
178+
pass
179+
elif type(limit) is not int or limit <= 0:
178180
raise ValueError
179181
response = self.get_request(path)
180-
if len(response.links) == 0:
181-
return response.json()
182-
else:
182+
response_json = response.json()
183+
if type(response_json) is list:
183184
next_url = response.links.get("next", None)
184-
response_json = response.json()
185185
while next_url is not None:
186186
response = self.get_request(next_url.get("url"))
187187
next_url = response.links.get("next", None)
188188
response_json.extend(response.json())
189-
return response_json[:limit]
189+
if limit is not None and len(response_json) >= limit:
190+
break
191+
response_json = response_json[:limit]
192+
return response_json
190193

191194
def post_request(self, payload, path=None):
192195
response = self._api_request("POST", path=path, payload=payload)

0 commit comments

Comments
 (0)