github.com/RevenueMonster/sqlike@v1.0.6/sqlike/paginate_test.go (about)

     1  package sqlike
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/RevenueMonster/sqlike/sql/expr"
     8  	"github.com/RevenueMonster/sqlike/sqlike/actions"
     9  	"github.com/RevenueMonster/sqlike/sqlike/primitive"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestPaginate(t *testing.T) {
    14  	var (
    15  		err error
    16  		pg  *Paginator
    17  		ctx = context.Background()
    18  	)
    19  
    20  	tb := Table{pk: "ID"}
    21  
    22  	t.Run("Ascending", func(ti *testing.T) {
    23  		pg, err = tb.Paginate(
    24  			ctx,
    25  			actions.Paginate().
    26  				Where(
    27  					expr.Equal("A", "testing"),
    28  					expr.Between("B", 1, 100),
    29  					expr.IsNull("C"),
    30  				).
    31  				OrderBy(
    32  					expr.Asc("A"),
    33  					expr.Asc("B"),
    34  				),
    35  		)
    36  
    37  		require.NoError(ti, err)
    38  		require.ElementsMatch(ti, []primitive.Sort{
    39  			expr.Asc("A"),
    40  			expr.Asc("B"),
    41  			expr.Asc("ID"),
    42  		}, pg.action.Sorts)
    43  	})
    44  
    45  	t.Run("Descending", func(ti *testing.T) {
    46  		pg, err = tb.Paginate(
    47  			ctx,
    48  			actions.Paginate().
    49  				OrderBy(
    50  					expr.Desc("A"),
    51  					expr.Desc("B"),
    52  				),
    53  		)
    54  
    55  		require.NoError(ti, err)
    56  		require.ElementsMatch(ti, []primitive.Sort{
    57  			expr.Desc("A"),
    58  			expr.Desc("B"),
    59  			expr.Desc("ID"),
    60  		}, pg.action.Sorts)
    61  	})
    62  
    63  	t.Run("Ascending & Descending", func(ti *testing.T) {
    64  		pg, err = tb.Paginate(
    65  			ctx,
    66  			actions.Paginate().
    67  				OrderBy(
    68  					expr.Asc("A"),
    69  					expr.Desc("B"),
    70  					expr.Asc("C"),
    71  				),
    72  		)
    73  
    74  		require.NoError(ti, err)
    75  		require.ElementsMatch(ti, []primitive.Sort{
    76  			expr.Asc("A"),
    77  			expr.Desc("B"),
    78  			expr.Asc("C"),
    79  			expr.Asc("ID"),
    80  		}, pg.action.Sorts)
    81  	})
    82  
    83  }