gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. // Copyright 2022 The Gitea Authors.
  2. // Copyright 2015 https://github.com/unknwon. Licensed under the Apache License, Version 2.0
  3. // SPDX-License-Identifier: Apache-2.0
  4. package paginator
  5. import (
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestPaginator(t *testing.T) {
  10. t.Run("Basic logics", func(t *testing.T) {
  11. p := New(0, -1, -1, 0)
  12. assert.Equal(t, 1, p.PagingNum())
  13. assert.True(t, p.IsFirst())
  14. assert.False(t, p.HasPrevious())
  15. assert.Equal(t, 1, p.Previous())
  16. assert.False(t, p.HasNext())
  17. assert.Equal(t, 1, p.Next())
  18. assert.True(t, p.IsLast())
  19. assert.Equal(t, 0, p.Total())
  20. p = New(1, 10, 2, 0)
  21. assert.Equal(t, 10, p.PagingNum())
  22. assert.True(t, p.IsFirst())
  23. assert.False(t, p.HasPrevious())
  24. assert.False(t, p.HasNext())
  25. assert.True(t, p.IsLast())
  26. p = New(10, 10, 1, 0)
  27. assert.Equal(t, 10, p.PagingNum())
  28. assert.True(t, p.IsFirst())
  29. assert.False(t, p.HasPrevious())
  30. assert.False(t, p.HasNext())
  31. assert.True(t, p.IsLast())
  32. p = New(11, 10, 1, 0)
  33. assert.Equal(t, 10, p.PagingNum())
  34. assert.True(t, p.IsFirst())
  35. assert.False(t, p.HasPrevious())
  36. assert.True(t, p.HasNext())
  37. assert.Equal(t, 2, p.Next())
  38. assert.False(t, p.IsLast())
  39. p = New(11, 10, 2, 0)
  40. assert.Equal(t, 10, p.PagingNum())
  41. assert.False(t, p.IsFirst())
  42. assert.True(t, p.HasPrevious())
  43. assert.Equal(t, 1, p.Previous())
  44. assert.False(t, p.HasNext())
  45. assert.True(t, p.IsLast())
  46. p = New(20, 10, 2, 0)
  47. assert.Equal(t, 10, p.PagingNum())
  48. assert.False(t, p.IsFirst())
  49. assert.True(t, p.HasPrevious())
  50. assert.False(t, p.HasNext())
  51. assert.True(t, p.IsLast())
  52. p = New(25, 10, 2, 0)
  53. assert.Equal(t, 10, p.PagingNum())
  54. assert.False(t, p.IsFirst())
  55. assert.True(t, p.HasPrevious())
  56. assert.True(t, p.HasNext())
  57. assert.False(t, p.IsLast())
  58. })
  59. t.Run("Generate pages", func(t *testing.T) {
  60. p := New(0, 10, 1, 0)
  61. pages := p.Pages()
  62. assert.Empty(t, pages)
  63. })
  64. t.Run("Only current page", func(t *testing.T) {
  65. p := New(0, 10, 1, 1)
  66. pages := p.Pages()
  67. assert.Empty(t, pages) // no "total", so no pages
  68. p = New(1, 10, 1, 1)
  69. pages = p.Pages()
  70. assert.Len(t, pages, 1)
  71. assert.Equal(t, 1, pages[0].Num())
  72. assert.True(t, pages[0].IsCurrent())
  73. })
  74. t.Run("Total page number is less or equal", func(t *testing.T) {
  75. p := New(1, 10, 1, 2)
  76. pages := p.Pages()
  77. assert.Len(t, pages, 1)
  78. assert.Equal(t, 1, pages[0].Num())
  79. assert.True(t, pages[0].IsCurrent())
  80. p = New(11, 10, 1, 2)
  81. pages = p.Pages()
  82. assert.Len(t, pages, 2)
  83. assert.Equal(t, 1, pages[0].Num())
  84. assert.True(t, pages[0].IsCurrent())
  85. assert.Equal(t, 2, pages[1].Num())
  86. assert.False(t, pages[1].IsCurrent())
  87. p = New(11, 10, 2, 2)
  88. pages = p.Pages()
  89. assert.Len(t, pages, 2)
  90. assert.Equal(t, 1, pages[0].Num())
  91. assert.False(t, pages[0].IsCurrent())
  92. assert.Equal(t, 2, pages[1].Num())
  93. assert.True(t, pages[1].IsCurrent())
  94. p = New(25, 10, 2, 3)
  95. pages = p.Pages()
  96. assert.Len(t, pages, 3)
  97. assert.Equal(t, 1, pages[0].Num())
  98. assert.False(t, pages[0].IsCurrent())
  99. assert.Equal(t, 2, pages[1].Num())
  100. assert.True(t, pages[1].IsCurrent())
  101. assert.Equal(t, 3, pages[2].Num())
  102. assert.False(t, pages[2].IsCurrent())
  103. })
  104. t.Run("Has more previous pages ", func(t *testing.T) {
  105. // ... 2
  106. p := New(11, 10, 2, 1)
  107. pages := p.Pages()
  108. assert.Len(t, pages, 2)
  109. assert.Equal(t, -1, pages[0].Num())
  110. assert.False(t, pages[0].IsCurrent())
  111. assert.Equal(t, 2, pages[1].Num())
  112. assert.True(t, pages[1].IsCurrent())
  113. // ... 2 3
  114. p = New(21, 10, 2, 2)
  115. pages = p.Pages()
  116. assert.Len(t, pages, 3)
  117. assert.Equal(t, -1, pages[0].Num())
  118. assert.False(t, pages[0].IsCurrent())
  119. assert.Equal(t, 2, pages[1].Num())
  120. assert.True(t, pages[1].IsCurrent())
  121. assert.Equal(t, 3, pages[2].Num())
  122. assert.False(t, pages[2].IsCurrent())
  123. // ... 2 3 4
  124. p = New(31, 10, 3, 3)
  125. pages = p.Pages()
  126. assert.Len(t, pages, 4)
  127. assert.Equal(t, -1, pages[0].Num())
  128. assert.False(t, pages[0].IsCurrent())
  129. assert.Equal(t, 2, pages[1].Num())
  130. assert.False(t, pages[1].IsCurrent())
  131. assert.Equal(t, 3, pages[2].Num())
  132. assert.True(t, pages[2].IsCurrent())
  133. assert.Equal(t, 4, pages[3].Num())
  134. assert.False(t, pages[3].IsCurrent())
  135. // ... 3 4 5
  136. p = New(41, 10, 4, 3)
  137. pages = p.Pages()
  138. assert.Len(t, pages, 4)
  139. assert.Equal(t, -1, pages[0].Num())
  140. assert.False(t, pages[0].IsCurrent())
  141. assert.Equal(t, 3, pages[1].Num())
  142. assert.False(t, pages[1].IsCurrent())
  143. assert.Equal(t, 4, pages[2].Num())
  144. assert.True(t, pages[2].IsCurrent())
  145. assert.Equal(t, 5, pages[3].Num())
  146. assert.False(t, pages[3].IsCurrent())
  147. // ... 4 5 6 7 8 9 10
  148. p = New(100, 10, 9, 7)
  149. pages = p.Pages()
  150. assert.Len(t, pages, 8)
  151. assert.Equal(t, -1, pages[0].Num())
  152. assert.False(t, pages[0].IsCurrent())
  153. assert.Equal(t, 4, pages[1].Num())
  154. assert.False(t, pages[1].IsCurrent())
  155. assert.Equal(t, 5, pages[2].Num())
  156. assert.False(t, pages[2].IsCurrent())
  157. assert.Equal(t, 6, pages[3].Num())
  158. assert.False(t, pages[3].IsCurrent())
  159. assert.Equal(t, 7, pages[4].Num())
  160. assert.False(t, pages[4].IsCurrent())
  161. assert.Equal(t, 8, pages[5].Num())
  162. assert.False(t, pages[5].IsCurrent())
  163. assert.Equal(t, 9, pages[6].Num())
  164. assert.True(t, pages[6].IsCurrent())
  165. assert.Equal(t, 10, pages[7].Num())
  166. assert.False(t, pages[7].IsCurrent())
  167. })
  168. t.Run("Has more next pages", func(t *testing.T) {
  169. // 1 ...
  170. p := New(21, 10, 1, 1)
  171. pages := p.Pages()
  172. assert.Len(t, pages, 2)
  173. assert.Equal(t, 1, pages[0].Num())
  174. assert.True(t, pages[0].IsCurrent())
  175. assert.Equal(t, -1, pages[1].Num())
  176. assert.False(t, pages[1].IsCurrent())
  177. // 1 2 ...
  178. p = New(21, 10, 1, 2)
  179. pages = p.Pages()
  180. assert.Len(t, pages, 3)
  181. assert.Equal(t, 1, pages[0].Num())
  182. assert.True(t, pages[0].IsCurrent())
  183. assert.Equal(t, 2, pages[1].Num())
  184. assert.False(t, pages[1].IsCurrent())
  185. assert.Equal(t, -1, pages[2].Num())
  186. assert.False(t, pages[2].IsCurrent())
  187. // 1 2 3 ...
  188. p = New(31, 10, 2, 3)
  189. pages = p.Pages()
  190. assert.Len(t, pages, 4)
  191. assert.Equal(t, 1, pages[0].Num())
  192. assert.False(t, pages[0].IsCurrent())
  193. assert.Equal(t, 2, pages[1].Num())
  194. assert.True(t, pages[1].IsCurrent())
  195. assert.Equal(t, 3, pages[2].Num())
  196. assert.False(t, pages[2].IsCurrent())
  197. assert.Equal(t, -1, pages[3].Num())
  198. assert.False(t, pages[3].IsCurrent())
  199. // 1 2 3 ...
  200. p = New(41, 10, 2, 3)
  201. pages = p.Pages()
  202. assert.Len(t, pages, 4)
  203. assert.Equal(t, 1, pages[0].Num())
  204. assert.False(t, pages[0].IsCurrent())
  205. assert.Equal(t, 2, pages[1].Num())
  206. assert.True(t, pages[1].IsCurrent())
  207. assert.Equal(t, 3, pages[2].Num())
  208. assert.False(t, pages[2].IsCurrent())
  209. assert.Equal(t, -1, pages[3].Num())
  210. assert.False(t, pages[3].IsCurrent())
  211. // 1 2 3 4 5 6 7 ...
  212. p = New(100, 10, 1, 7)
  213. pages = p.Pages()
  214. assert.Len(t, pages, 8)
  215. assert.Equal(t, 1, pages[0].Num())
  216. assert.True(t, pages[0].IsCurrent())
  217. assert.Equal(t, 2, pages[1].Num())
  218. assert.False(t, pages[1].IsCurrent())
  219. assert.Equal(t, 3, pages[2].Num())
  220. assert.False(t, pages[2].IsCurrent())
  221. assert.Equal(t, 4, pages[3].Num())
  222. assert.False(t, pages[3].IsCurrent())
  223. assert.Equal(t, 5, pages[4].Num())
  224. assert.False(t, pages[4].IsCurrent())
  225. assert.Equal(t, 6, pages[5].Num())
  226. assert.False(t, pages[5].IsCurrent())
  227. assert.Equal(t, 7, pages[6].Num())
  228. assert.False(t, pages[6].IsCurrent())
  229. assert.Equal(t, -1, pages[7].Num())
  230. assert.False(t, pages[7].IsCurrent())
  231. // 1 2 3 4 5 6 7 ...
  232. p = New(100, 10, 2, 7)
  233. pages = p.Pages()
  234. assert.Len(t, pages, 8)
  235. assert.Equal(t, 1, pages[0].Num())
  236. assert.False(t, pages[0].IsCurrent())
  237. assert.Equal(t, 2, pages[1].Num())
  238. assert.True(t, pages[1].IsCurrent())
  239. assert.Equal(t, 3, pages[2].Num())
  240. assert.False(t, pages[2].IsCurrent())
  241. assert.Equal(t, 4, pages[3].Num())
  242. assert.False(t, pages[3].IsCurrent())
  243. assert.Equal(t, 5, pages[4].Num())
  244. assert.False(t, pages[4].IsCurrent())
  245. assert.Equal(t, 6, pages[5].Num())
  246. assert.False(t, pages[5].IsCurrent())
  247. assert.Equal(t, 7, pages[6].Num())
  248. assert.False(t, pages[6].IsCurrent())
  249. assert.Equal(t, -1, pages[7].Num())
  250. assert.False(t, pages[7].IsCurrent())
  251. })
  252. t.Run("Has both more previous and next pages", func(t *testing.T) {
  253. // ... 2 3 ...
  254. p := New(35, 10, 2, 2)
  255. pages := p.Pages()
  256. assert.Len(t, pages, 4)
  257. assert.Equal(t, -1, pages[0].Num())
  258. assert.False(t, pages[0].IsCurrent())
  259. assert.Equal(t, 2, pages[1].Num())
  260. assert.True(t, pages[1].IsCurrent())
  261. assert.Equal(t, 3, pages[2].Num())
  262. assert.False(t, pages[2].IsCurrent())
  263. assert.Equal(t, -1, pages[3].Num())
  264. assert.False(t, pages[3].IsCurrent())
  265. // ... 2 3 4 ...
  266. p = New(49, 10, 3, 3)
  267. pages = p.Pages()
  268. assert.Len(t, pages, 5)
  269. assert.Equal(t, -1, pages[0].Num())
  270. assert.False(t, pages[0].IsCurrent())
  271. assert.Equal(t, 2, pages[1].Num())
  272. assert.False(t, pages[1].IsCurrent())
  273. assert.Equal(t, 3, pages[2].Num())
  274. assert.True(t, pages[2].IsCurrent())
  275. assert.Equal(t, 4, pages[3].Num())
  276. assert.False(t, pages[3].IsCurrent())
  277. assert.Equal(t, -1, pages[4].Num())
  278. assert.False(t, pages[4].IsCurrent())
  279. })
  280. }