test_paginator.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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],
  10. [5, 6, 7, 8, 9],
  11. [9, 10, 11, 12, 13],
  12. [13, 14, 15, 16, 17],
  13. [17, 18, 19, 20, 21],
  14. [21, 22, 23, 24, 25],
  15. [25, 26, 27, 28, 29],
  16. [29, 30],
  17. ])
  18. def test_paginator_orphans(self):
  19. """paginator handles orphans"""
  20. items = [i + 1 for i in range(16)]
  21. paginator = PostsPaginator(items, 8, 6)
  22. self.assertEqual(self.get_paginator_items_list(paginator), [
  23. [1, 2, 3, 4, 5, 6, 7, 8],
  24. [8, 9, 10, 11, 12, 13, 14, 15, 16],
  25. ])
  26. paginator = PostsPaginator(items, 4, 4)
  27. self.assertEqual(self.get_paginator_items_list(paginator), [
  28. [1, 2, 3, 4],
  29. [4, 5, 6, 7],
  30. [7, 8, 9, 10],
  31. [10, 11, 12, 13, 14, 15, 16],
  32. ])
  33. paginator = PostsPaginator(items, 5, 3)
  34. self.assertEqual(self.get_paginator_items_list(paginator), [
  35. [1, 2, 3, 4, 5],
  36. [5, 6, 7, 8, 9],
  37. [9, 10, 11, 12, 13, 14, 15, 16],
  38. ])
  39. paginator = PostsPaginator(items, 6, 2)
  40. self.assertEqual(self.get_paginator_items_list(paginator), [
  41. [1, 2, 3, 4, 5, 6],
  42. [6, 7, 8, 9, 10, 11],
  43. [11, 12, 13, 14, 15, 16],
  44. ])
  45. paginator = PostsPaginator(items, 7, 1)
  46. self.assertEqual(self.get_paginator_items_list(paginator), [
  47. [1, 2, 3, 4, 5, 6, 7],
  48. [7, 8, 9, 10, 11, 12, 13],
  49. [13, 14, 15, 16],
  50. ])
  51. paginator = PostsPaginator(items, 7, 3)
  52. self.assertEqual(self.get_paginator_items_list(paginator), [
  53. [1, 2, 3, 4, 5, 6, 7],
  54. [7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
  55. ])
  56. paginator = PostsPaginator(items, 10, 6)
  57. self.assertEqual(self.get_paginator_items_list(paginator), [items])
  58. # regression test for #732
  59. items = [i + 1 for i in range(24)]
  60. paginator = PostsPaginator(items, 18, 6)
  61. self.assertEqual(paginator.num_pages, 1)
  62. self.assertEqual(self.get_paginator_items_list(paginator), [items])
  63. # extra tests for catching issues in excessively long datasets
  64. paginator = PostsPaginator([i + 1 for i in range(144)], 14, 6)
  65. last_page = self.get_paginator_items_list(paginator)[-1]
  66. self.assertEqual(last_page[-4:], [141, 142, 143, 144])
  67. paginator = PostsPaginator([i + 1 for i in range(321)], 14, 6)
  68. last_page = self.get_paginator_items_list(paginator)[-1]
  69. self.assertEqual(last_page[-4:], [318, 319, 320, 321])
  70. def get_paginator_items_list(self, paginator):
  71. items_list = []
  72. for page in paginator.page_range:
  73. items_list.append(paginator.page(page).object_list)
  74. return items_list