test_apipaginator.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from django.test import TestCase
  2. from django.utils.six.moves import range
  3. from ..apipaginator import ApiPaginator
  4. class MockRequest(object):
  5. def __init__(self, page=None):
  6. self.query_params = {}
  7. if page:
  8. self.query_params['page'] = page
  9. class PaginatorTests(TestCase):
  10. def test_init_paginator(self):
  11. """ApiPaginator returns type that can be initalized"""
  12. paginator = ApiPaginator(3, 1)()
  13. def test_empty_queryset(self):
  14. """pagination works for empty queryset"""
  15. paginator = ApiPaginator(6, 2)()
  16. querset = []
  17. results = paginator.paginate_queryset(querset, MockRequest())
  18. self.assertEqual(results, [])
  19. meta = paginator.get_meta()
  20. self.assertEqual(meta['count'], 0)
  21. self.assertEqual(meta['pages'], 1)
  22. self.assertEqual(meta['first'], None)
  23. self.assertEqual(meta['previous'], None)
  24. self.assertEqual(meta['next'], None)
  25. self.assertEqual(meta['last'], None)
  26. self.assertEqual(meta['before'], 0)
  27. self.assertEqual(meta['more'], 0)
  28. def test_first_page(self):
  29. """pagination works for first page of queryset"""
  30. paginator = ApiPaginator(6, 2)()
  31. querset = [i for i in range(20)]
  32. results = paginator.paginate_queryset(querset, MockRequest())
  33. self.assertEqual(results, [0, 1, 2, 3, 4, 5])
  34. meta = paginator.get_meta()
  35. self.assertEqual(meta['count'], 20)
  36. self.assertEqual(meta['pages'], 3)
  37. self.assertEqual(meta['first'], None)
  38. self.assertEqual(meta['previous'], None)
  39. self.assertEqual(meta['next'], 2)
  40. self.assertEqual(meta['last'], 3)
  41. self.assertEqual(meta['before'], 0)
  42. self.assertEqual(meta['more'], 14)
  43. response = paginator.get_paginated_response(results)
  44. self.assertEqual(response.status_code, 200)
  45. def test_next_page(self):
  46. """pagination works for next page of queryset"""
  47. paginator = ApiPaginator(6, 2)()
  48. querset = [i for i in range(20)]
  49. results = paginator.paginate_queryset(querset, MockRequest(2))
  50. self.assertEqual(results, [6, 7, 8, 9, 10, 11])
  51. meta = paginator.get_meta()
  52. self.assertEqual(meta['count'], 20)
  53. self.assertEqual(meta['pages'], 3)
  54. self.assertEqual(meta['first'], 1)
  55. self.assertEqual(meta['previous'], None)
  56. self.assertEqual(meta['next'], 3)
  57. self.assertEqual(meta['last'], 3)
  58. self.assertEqual(meta['before'], 6)
  59. self.assertEqual(meta['more'], 8)
  60. response = paginator.get_paginated_response(results)
  61. self.assertEqual(response.status_code, 200)
  62. def test_last_page(self):
  63. """pagination works for last page of queryset"""
  64. paginator = ApiPaginator(6, 2)()
  65. querset = [i for i in range(20)]
  66. results = paginator.paginate_queryset(querset, MockRequest(3))
  67. self.assertEqual(results, [12, 13, 14, 15, 16, 17, 18, 19])
  68. meta = paginator.get_meta()
  69. self.assertEqual(meta['count'], 20)
  70. self.assertEqual(meta['pages'], 3)
  71. self.assertEqual(meta['first'], 1)
  72. self.assertEqual(meta['previous'], 2)
  73. self.assertEqual(meta['next'], None)
  74. self.assertEqual(meta['last'], None)
  75. self.assertEqual(meta['before'], 12)
  76. self.assertEqual(meta['more'], 0)
  77. response = paginator.get_paginated_response(results)
  78. self.assertEqual(response.status_code, 200)