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  }