test_paginator.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from django.test import TestCase
  2. from misago.threads.paginator import PostsPaginator
  3. class PostsPaginatorTests(TestCase):
  4. def test_paginator(self):
  5. """pages share first and last items with each other"""
  6. items = [i + 1 for i in range(30)]
  7. paginator = PostsPaginator(items, 5)
  8. self.assertEqual(self.get_paginator_items_list(paginator), [
  9. [1, 2, 3, 4, 5, 6],
  10. [6, 7, 8, 9, 10, 11],
  11. [11, 12, 13, 14, 15, 16],
  12. [16, 17, 18, 19, 20, 21],
  13. [21, 22, 23, 24, 25, 26],
  14. [26, 27, 28, 29, 30],
  15. ])
  16. def test_paginator_orphans(self):
  17. """paginator handles orphans"""
  18. items = [i + 1 for i in range(20)]
  19. paginator = PostsPaginator(items, 8, 6)
  20. self.assertEqual(self.get_paginator_items_list(paginator), [
  21. [1, 2, 3, 4, 5, 6, 7, 8, 9],
  22. [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  23. ])
  24. paginator = PostsPaginator(items, 8, 5)
  25. self.assertEqual(paginator.num_pages, 2)
  26. self.assertEqual(self.get_paginator_items_list(paginator), [
  27. [1, 2, 3, 4, 5, 6, 7, 8, 9],
  28. [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  29. ])
  30. paginator = PostsPaginator(items, 9, 3)
  31. self.assertEqual(paginator.num_pages, 2)
  32. self.assertEqual(self.get_paginator_items_list(paginator), [
  33. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
  34. [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  35. ])
  36. # regression test for #732
  37. items = [i + 1 for i in range(24)]
  38. paginator = PostsPaginator(items, 18, 6)
  39. self.assertEqual(paginator.num_pages, 1)
  40. self.assertEqual(self.get_paginator_items_list(paginator), [
  41. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
  42. ])
  43. # extra tests for catching issues in excessively long datasets
  44. paginator = PostsPaginator([i + 1 for i in range(144)], 14, 6)
  45. last_page = self.get_paginator_items_list(paginator)[-1]
  46. self.assertEqual(last_page[-4:], [141, 142, 143, 144])
  47. paginator = PostsPaginator([i + 1 for i in range(321)], 14, 6)
  48. last_page = self.get_paginator_items_list(paginator)[-1]
  49. self.assertEqual(last_page[-4:], [318, 319, 320, 321])
  50. def get_paginator_items_list(self, paginator):
  51. items_list = []
  52. for page in paginator.page_range:
  53. items_list.append(paginator.page(page).object_list)
  54. return items_list