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 }