def test_complete(self): parser = LinkHeaderParser(LINK_HEADER_COMPLETE) expected_links = [LinkHeaderField.from_string(link.strip()) for link in LINK_HEADER_COMPLETE.split(',')] expected_links.sort(key=lambda e: e.url) actual_links = parser.links[:] actual_links.sort(key=lambda e: e.url) self.assertListEqual(expected_links, actual_links)
def get_paginated_response(self, data): next_url = self.get_next_link() previous_url = self.get_previous_link() link_parts = [] # if we have a next page, then we know we have a last, as well. if next_url is not None: link_parts.extend([ LinkHeaderField(url=next_url, rel=LinkHeaderRel.next, title=str(self.page.number + 1)), LinkHeaderField(url=self.get_last_url(), rel=LinkHeaderRel.last, title=self.page.paginator.num_pages), ]) # if we have a previous page, then we know we have a first page, too. if previous_url is not None: link_parts.extend([ LinkHeaderField(url=previous_url, rel=LinkHeaderRel.prev, title=str(self.page.number - 1)), LinkHeaderField(url=self.get_first_url(), rel=LinkHeaderRel.first, title=str(1)), ]) headers = { 'X-Total-Results': self.page.paginator.count, 'X-Page-Size': self.get_page_size(self.request), 'X-Page': self.page.number } if link_parts: headers['Link'] = ", ".join([str(link) for link in link_parts]) return Response(data, headers=headers)
def test_stringification(self): field = LinkHeaderField.from_string(LINK_HEADER_NEXT) self.assertEqual(str(field), LINK_HEADER_NEXT)
def test_stringification_no_title(self): field = LinkHeaderField.from_string(LINK_HEADER_LAST) self.assertEqual(str(field), LINK_HEADER_LAST)
def test_sad_no_rel(self): self.assertRaises( MalformedLinkHeader, lambda: LinkHeaderField.from_string("<http://google.com>; meh=I am still malformed"))
def test_sad_no_url(self): self.assertRaises( MalformedLinkHeader, lambda: LinkHeaderField.from_string('Oh f**k.. I am malformed; rel="next"'))
def test_title(self): field = LinkHeaderField.from_string(LINK_HEADER_NEXT) self.assertEqual(field.title, "The Next Page")
def test_rel(self): field = LinkHeaderField.from_string(LINK_HEADER_LAST) self.assertEqual(field.rel, LinkHeaderRel.last)
def test_url(self): field = LinkHeaderField.from_string(LINK_HEADER_LAST) self.assertEqual(field.url, 'https://api.github.com/search/code?q=addClass+user%3Amozilla&page=34')