github.com/solongordon/pop@v4.10.0+incompatible/pagination_test.go (about)

     1  package pop
     2  
     3  import (
     4  	"net/url"
     5  	"reflect"
     6  	"testing"
     7  
     8  	"github.com/gobuffalo/nulls"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func Test_NewPaginator(t *testing.T) {
    13  	a := require.New(t)
    14  
    15  	p := NewPaginator(1, 10)
    16  	a.Equal(p.Offset, 0)
    17  
    18  	p = NewPaginator(2, 10)
    19  	a.Equal(p.Offset, 10)
    20  
    21  	p = NewPaginator(2, 30)
    22  	a.Equal(p.Offset, 30)
    23  }
    24  
    25  func Test_NewPaginatorFromParams(t *testing.T) {
    26  	a := require.New(t)
    27  
    28  	params := url.Values{}
    29  
    30  	p := NewPaginatorFromParams(params)
    31  	a.Equal(p.Page, 1)
    32  	a.Equal(p.PerPage, 20)
    33  
    34  	params.Set("page", "2")
    35  	p = NewPaginatorFromParams(params)
    36  	a.Equal(p.Page, 2)
    37  	a.Equal(p.PerPage, 20)
    38  
    39  	params.Set("per_page", "30")
    40  	p = NewPaginatorFromParams(params)
    41  	a.Equal(p.Page, 2)
    42  	a.Equal(p.PerPage, 30)
    43  }
    44  
    45  func Test_Pagination(t *testing.T) {
    46  	transaction(func(tx *Connection) {
    47  		a := require.New(t)
    48  
    49  		for _, name := range []string{"Mark", "Joe", "Jane"} {
    50  			user := User{Name: nulls.NewString(name)}
    51  			err := tx.Create(&user)
    52  			a.NoError(err)
    53  		}
    54  
    55  		u := Users{}
    56  		q := tx.Paginate(1, 2)
    57  		err := q.All(&u)
    58  		a.NoError(err)
    59  		a.Equal(len(u), 2)
    60  
    61  		p := q.Paginator
    62  		a.Equal(p.CurrentEntriesSize, 2)
    63  		a.Equal(p.TotalEntriesSize, 3)
    64  		a.Equal(p.TotalPages, 2)
    65  
    66  		u = Users{}
    67  		err = tx.Where("name = 'Mark'").All(&u)
    68  		a.NoError(err)
    69  		a.Equal(reflect.ValueOf(&u).Elem().Len(), 1)
    70  	})
    71  }