diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 710b7c7e5..8bf1bda3f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ This document describes changes between each past release. ------------------ - Batch endpoint now checks for and aborts any parent request if subrequest encounters 409 constraint violation (fixes #1569) +- Fix a bug where you could not reach the last records via Next-Header when deleting with pagination (fixes #1170) 9.0.0 (2018-04-25) ------------------ diff --git a/kinto/core/resource/__init__.py b/kinto/core/resource/__init__.py index c07056f6c..8ed4258cb 100644 --- a/kinto/core/resource/__init__.py +++ b/kinto/core/resource/__init__.py @@ -397,8 +397,7 @@ def collection_delete(self): self._add_timestamp_header(self.request.response, timestamp=timestamp) # Add pagination header - offset = offset + len(deleted) - if limit and len(deleted) == limit and offset < total_records: + if limit and len(deleted) == limit and total_records > 1: next_page = self._next_page_url(sorting, limit, lastrecord, offset) self.request.response.headers['Next-Page'] = next_page else: diff --git a/tests/core/resource/test_pagination.py b/tests/core/resource/test_pagination.py index 42e9ac8c8..76a70db7d 100644 --- a/tests/core/resource/test_pagination.py +++ b/tests/core/resource/test_pagination.py @@ -239,6 +239,24 @@ def test_return_total_records_in_headers_matching_deletable(self): count = headers['Total-Records'] self.assertEquals(int(count), 20) + def test_paginated_delete_second_to_last_gets_next_header(self): + self.resource.collection_get() + get_all_headers = self.last_response.headers + count = int(get_all_headers['Total-Records']) - 1 + + self.validated['querystring'] = {'_limit': 1} + headers = [] + for i in range(count): + self.resource.collection_delete() + headers.append(self.last_response.headers) + self._setup_next_page() + + self.resource.collection_delete() + headers.append(self.last_response.headers) + + self.assertIn('Next-Page', headers[count - 1]) + self.assertNotIn('Next-Page', headers[count]) + def test_token_cannot_be_reused_twice(self): self.resource.request.method = "DELETE" self.validated['querystring']['_limit'] = 3