github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/Unknwon/paginater/paginater_test.go (about) 1 // Copyright 2015 Unknwon 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"): you may 4 // not use this file except in compliance with the License. You may obtain 5 // a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations 13 // under the License. 14 15 package paginater 16 17 import ( 18 "testing" 19 20 . "github.com/insionng/yougam/libraries/smartystreets/goconvey/convey" 21 ) 22 23 func Test_Paginater(t *testing.T) { 24 Convey("Basic logics", t, func() { 25 p := New(0, -1, -1, 0) 26 So(p.IsFirst(), ShouldBeTrue) 27 So(p.HasPrevious(), ShouldBeFalse) 28 So(p.Previous(), ShouldEqual, 1) 29 So(p.HasNext(), ShouldBeFalse) 30 So(p.Next(), ShouldEqual, 1) 31 So(p.IsLast(), ShouldBeTrue) 32 So(p.Total(), ShouldEqual, 0) 33 34 p = New(1, 10, 2, 0) 35 So(p.IsFirst(), ShouldBeTrue) 36 So(p.HasPrevious(), ShouldBeFalse) 37 So(p.HasNext(), ShouldBeFalse) 38 So(p.IsLast(), ShouldBeTrue) 39 40 p = New(10, 10, 1, 0) 41 So(p.IsFirst(), ShouldBeTrue) 42 So(p.HasPrevious(), ShouldBeFalse) 43 So(p.HasNext(), ShouldBeFalse) 44 So(p.IsLast(), ShouldBeTrue) 45 46 p = New(11, 10, 1, 0) 47 So(p.IsFirst(), ShouldBeTrue) 48 So(p.HasPrevious(), ShouldBeFalse) 49 So(p.HasNext(), ShouldBeTrue) 50 So(p.Next(), ShouldEqual, 2) 51 So(p.IsLast(), ShouldBeFalse) 52 53 p = New(11, 10, 2, 0) 54 So(p.IsFirst(), ShouldBeFalse) 55 So(p.HasPrevious(), ShouldBeTrue) 56 So(p.Previous(), ShouldEqual, 1) 57 So(p.HasNext(), ShouldBeFalse) 58 So(p.IsLast(), ShouldBeTrue) 59 60 p = New(20, 10, 2, 0) 61 So(p.IsFirst(), ShouldBeFalse) 62 So(p.HasPrevious(), ShouldBeTrue) 63 So(p.HasNext(), ShouldBeFalse) 64 So(p.IsLast(), ShouldBeTrue) 65 66 p = New(25, 10, 2, 0) 67 So(p.IsFirst(), ShouldBeFalse) 68 So(p.HasPrevious(), ShouldBeTrue) 69 So(p.HasNext(), ShouldBeTrue) 70 So(p.IsLast(), ShouldBeFalse) 71 }) 72 73 Convey("Generate pages", t, func() { 74 Convey("No page is showing", func() { 75 p := New(0, 10, 1, 0) 76 pages := p.Pages() 77 So(len(pages), ShouldEqual, 0) 78 }) 79 80 Convey("Only current page", func() { 81 p := New(0, 10, 1, 1) 82 pages := p.Pages() 83 So(len(pages), ShouldEqual, 1) 84 So(pages[0].Num(), ShouldEqual, 1) 85 So(pages[0].IsCurrent(), ShouldBeTrue) 86 87 p = New(1, 10, 1, 1) 88 pages = p.Pages() 89 So(len(pages), ShouldEqual, 1) 90 So(pages[0].Num(), ShouldEqual, 1) 91 So(pages[0].IsCurrent(), ShouldBeTrue) 92 }) 93 94 Convey("Total page number is less or equal", func() { 95 p := New(1, 10, 1, 2) 96 pages := p.Pages() 97 So(len(pages), ShouldEqual, 1) 98 So(pages[0].Num(), ShouldEqual, 1) 99 So(pages[0].IsCurrent(), ShouldBeTrue) 100 101 p = New(11, 10, 1, 2) 102 pages = p.Pages() 103 So(len(pages), ShouldEqual, 2) 104 So(pages[0].Num(), ShouldEqual, 1) 105 So(pages[0].IsCurrent(), ShouldBeTrue) 106 So(pages[1].Num(), ShouldEqual, 2) 107 So(pages[1].IsCurrent(), ShouldBeFalse) 108 109 p = New(11, 10, 2, 2) 110 pages = p.Pages() 111 So(len(pages), ShouldEqual, 2) 112 So(pages[0].Num(), ShouldEqual, 1) 113 So(pages[0].IsCurrent(), ShouldBeFalse) 114 So(pages[1].Num(), ShouldEqual, 2) 115 So(pages[1].IsCurrent(), ShouldBeTrue) 116 117 p = New(25, 10, 2, 3) 118 pages = p.Pages() 119 So(len(pages), ShouldEqual, 3) 120 So(pages[0].Num(), ShouldEqual, 1) 121 So(pages[0].IsCurrent(), ShouldBeFalse) 122 So(pages[1].Num(), ShouldEqual, 2) 123 So(pages[1].IsCurrent(), ShouldBeTrue) 124 So(pages[2].Num(), ShouldEqual, 3) 125 So(pages[2].IsCurrent(), ShouldBeFalse) 126 }) 127 128 Convey("Has more previous pages ", func() { 129 // ... 2 130 p := New(11, 10, 2, 1) 131 pages := p.Pages() 132 So(len(pages), ShouldEqual, 2) 133 So(pages[0].Num(), ShouldEqual, -1) 134 So(pages[0].IsCurrent(), ShouldBeFalse) 135 So(pages[1].Num(), ShouldEqual, 2) 136 So(pages[1].IsCurrent(), ShouldBeTrue) 137 138 // ... 2 3 139 p = New(21, 10, 2, 2) 140 pages = p.Pages() 141 So(len(pages), ShouldEqual, 3) 142 So(pages[0].Num(), ShouldEqual, -1) 143 So(pages[0].IsCurrent(), ShouldBeFalse) 144 So(pages[1].Num(), ShouldEqual, 2) 145 So(pages[1].IsCurrent(), ShouldBeTrue) 146 So(pages[2].Num(), ShouldEqual, 3) 147 So(pages[2].IsCurrent(), ShouldBeFalse) 148 149 // ... 2 3 4 150 p = New(31, 10, 3, 3) 151 pages = p.Pages() 152 So(len(pages), ShouldEqual, 4) 153 So(pages[0].Num(), ShouldEqual, -1) 154 So(pages[0].IsCurrent(), ShouldBeFalse) 155 So(pages[1].Num(), ShouldEqual, 2) 156 So(pages[1].IsCurrent(), ShouldBeFalse) 157 So(pages[2].Num(), ShouldEqual, 3) 158 So(pages[2].IsCurrent(), ShouldBeTrue) 159 So(pages[3].Num(), ShouldEqual, 4) 160 So(pages[3].IsCurrent(), ShouldBeFalse) 161 162 // ... 3 4 5 163 p = New(41, 10, 4, 3) 164 pages = p.Pages() 165 So(len(pages), ShouldEqual, 4) 166 So(pages[0].Num(), ShouldEqual, -1) 167 So(pages[0].IsCurrent(), ShouldBeFalse) 168 So(pages[1].Num(), ShouldEqual, 3) 169 So(pages[1].IsCurrent(), ShouldBeFalse) 170 So(pages[2].Num(), ShouldEqual, 4) 171 So(pages[2].IsCurrent(), ShouldBeTrue) 172 So(pages[3].Num(), ShouldEqual, 5) 173 So(pages[3].IsCurrent(), ShouldBeFalse) 174 175 // ... 4 5 6 7 8 9 10 176 p = New(100, 10, 9, 7) 177 pages = p.Pages() 178 So(len(pages), ShouldEqual, 8) 179 So(pages[0].Num(), ShouldEqual, -1) 180 So(pages[0].IsCurrent(), ShouldBeFalse) 181 So(pages[1].Num(), ShouldEqual, 4) 182 So(pages[1].IsCurrent(), ShouldBeFalse) 183 So(pages[2].Num(), ShouldEqual, 5) 184 So(pages[2].IsCurrent(), ShouldBeFalse) 185 So(pages[3].Num(), ShouldEqual, 6) 186 So(pages[3].IsCurrent(), ShouldBeFalse) 187 So(pages[4].Num(), ShouldEqual, 7) 188 So(pages[4].IsCurrent(), ShouldBeFalse) 189 So(pages[5].Num(), ShouldEqual, 8) 190 So(pages[5].IsCurrent(), ShouldBeFalse) 191 So(pages[6].Num(), ShouldEqual, 9) 192 So(pages[6].IsCurrent(), ShouldBeTrue) 193 So(pages[7].Num(), ShouldEqual, 10) 194 So(pages[7].IsCurrent(), ShouldBeFalse) 195 }) 196 197 Convey("Has more next pages", func() { 198 // 1 ... 199 p := New(21, 10, 1, 1) 200 pages := p.Pages() 201 So(len(pages), ShouldEqual, 2) 202 So(pages[0].Num(), ShouldEqual, 1) 203 So(pages[0].IsCurrent(), ShouldBeTrue) 204 So(pages[1].Num(), ShouldEqual, -1) 205 So(pages[1].IsCurrent(), ShouldBeFalse) 206 207 // 1 2 ... 208 p = New(21, 10, 1, 2) 209 pages = p.Pages() 210 So(len(pages), ShouldEqual, 3) 211 So(pages[0].Num(), ShouldEqual, 1) 212 So(pages[0].IsCurrent(), ShouldBeTrue) 213 So(pages[1].Num(), ShouldEqual, 2) 214 So(pages[1].IsCurrent(), ShouldBeFalse) 215 So(pages[2].Num(), ShouldEqual, -1) 216 So(pages[2].IsCurrent(), ShouldBeFalse) 217 218 // 1 2 3 ... 219 p = New(31, 10, 2, 3) 220 pages = p.Pages() 221 So(len(pages), ShouldEqual, 4) 222 So(pages[0].Num(), ShouldEqual, 1) 223 So(pages[0].IsCurrent(), ShouldBeFalse) 224 So(pages[1].Num(), ShouldEqual, 2) 225 So(pages[1].IsCurrent(), ShouldBeTrue) 226 So(pages[2].Num(), ShouldEqual, 3) 227 So(pages[2].IsCurrent(), ShouldBeFalse) 228 So(pages[3].Num(), ShouldEqual, -1) 229 So(pages[3].IsCurrent(), ShouldBeFalse) 230 231 // 1 2 3 ... 232 p = New(41, 10, 2, 3) 233 pages = p.Pages() 234 So(len(pages), ShouldEqual, 4) 235 So(pages[0].Num(), ShouldEqual, 1) 236 So(pages[0].IsCurrent(), ShouldBeFalse) 237 So(pages[1].Num(), ShouldEqual, 2) 238 So(pages[1].IsCurrent(), ShouldBeTrue) 239 So(pages[2].Num(), ShouldEqual, 3) 240 So(pages[2].IsCurrent(), ShouldBeFalse) 241 So(pages[3].Num(), ShouldEqual, -1) 242 So(pages[3].IsCurrent(), ShouldBeFalse) 243 244 // 1 2 3 4 5 6 7 ... 245 p = New(100, 10, 1, 7) 246 pages = p.Pages() 247 So(len(pages), ShouldEqual, 8) 248 So(pages[0].Num(), ShouldEqual, 1) 249 So(pages[0].IsCurrent(), ShouldBeTrue) 250 So(pages[1].Num(), ShouldEqual, 2) 251 So(pages[1].IsCurrent(), ShouldBeFalse) 252 So(pages[2].Num(), ShouldEqual, 3) 253 So(pages[2].IsCurrent(), ShouldBeFalse) 254 So(pages[3].Num(), ShouldEqual, 4) 255 So(pages[3].IsCurrent(), ShouldBeFalse) 256 So(pages[4].Num(), ShouldEqual, 5) 257 So(pages[4].IsCurrent(), ShouldBeFalse) 258 So(pages[5].Num(), ShouldEqual, 6) 259 So(pages[5].IsCurrent(), ShouldBeFalse) 260 So(pages[6].Num(), ShouldEqual, 7) 261 So(pages[6].IsCurrent(), ShouldBeFalse) 262 So(pages[7].Num(), ShouldEqual, -1) 263 So(pages[7].IsCurrent(), ShouldBeFalse) 264 265 // 1 2 3 4 5 6 7 ... 266 p = New(100, 10, 2, 7) 267 pages = p.Pages() 268 So(len(pages), ShouldEqual, 8) 269 So(pages[0].Num(), ShouldEqual, 1) 270 So(pages[0].IsCurrent(), ShouldBeFalse) 271 So(pages[1].Num(), ShouldEqual, 2) 272 So(pages[1].IsCurrent(), ShouldBeTrue) 273 So(pages[2].Num(), ShouldEqual, 3) 274 So(pages[2].IsCurrent(), ShouldBeFalse) 275 So(pages[3].Num(), ShouldEqual, 4) 276 So(pages[3].IsCurrent(), ShouldBeFalse) 277 So(pages[4].Num(), ShouldEqual, 5) 278 So(pages[4].IsCurrent(), ShouldBeFalse) 279 So(pages[5].Num(), ShouldEqual, 6) 280 So(pages[5].IsCurrent(), ShouldBeFalse) 281 So(pages[6].Num(), ShouldEqual, 7) 282 So(pages[6].IsCurrent(), ShouldBeFalse) 283 So(pages[7].Num(), ShouldEqual, -1) 284 So(pages[7].IsCurrent(), ShouldBeFalse) 285 }) 286 287 Convey("Has both more previous and next pages", func() { 288 // ... 2 3 ... 289 p := New(35, 10, 2, 2) 290 pages := p.Pages() 291 So(len(pages), ShouldEqual, 4) 292 So(pages[0].Num(), ShouldEqual, -1) 293 So(pages[0].IsCurrent(), ShouldBeFalse) 294 So(pages[1].Num(), ShouldEqual, 2) 295 So(pages[1].IsCurrent(), ShouldBeTrue) 296 So(pages[2].Num(), ShouldEqual, 3) 297 So(pages[2].IsCurrent(), ShouldBeFalse) 298 So(pages[3].Num(), ShouldEqual, -1) 299 So(pages[3].IsCurrent(), ShouldBeFalse) 300 301 // ... 2 3 4 ... 302 p = New(49, 10, 3, 3) 303 pages = p.Pages() 304 So(len(pages), ShouldEqual, 5) 305 So(pages[0].Num(), ShouldEqual, -1) 306 So(pages[0].IsCurrent(), ShouldBeFalse) 307 So(pages[1].Num(), ShouldEqual, 2) 308 So(pages[1].IsCurrent(), ShouldBeFalse) 309 So(pages[2].Num(), ShouldEqual, 3) 310 So(pages[2].IsCurrent(), ShouldBeTrue) 311 So(pages[3].Num(), ShouldEqual, 4) 312 So(pages[3].IsCurrent(), ShouldBeFalse) 313 So(pages[4].Num(), ShouldEqual, -1) 314 So(pages[4].IsCurrent(), ShouldBeFalse) 315 }) 316 }) 317 }