github.com/Finschia/finschia-sdk@v0.48.1/client/utils_test.go (about) 1 package client_test 2 3 import ( 4 "strconv" 5 "testing" 6 7 "github.com/spf13/pflag" 8 "github.com/stretchr/testify/require" 9 10 "github.com/Finschia/finschia-sdk/client" 11 "github.com/Finschia/finschia-sdk/client/flags" 12 ) 13 14 func TestPaginate(t *testing.T) { 15 testCases := []struct { 16 name string 17 numObjs, page, limit, defLimit int 18 expectedStart, expectedEnd int 19 }{ 20 { 21 "all objects in a single page", 22 100, 1, 100, 100, 23 0, 100, 24 }, 25 { 26 "page one of three", 27 75, 1, 25, 100, 28 0, 25, 29 }, 30 { 31 "page two of three", 32 75, 2, 25, 100, 33 25, 50, 34 }, 35 { 36 "page three of three", 37 75, 3, 25, 100, 38 50, 75, 39 }, 40 { 41 "end is greater than total number of objects", 42 75, 2, 50, 100, 43 50, 75, 44 }, 45 { 46 "fallback to default limit", 47 75, 5, 0, 10, 48 40, 50, 49 }, 50 { 51 "invalid start page", 52 75, 4, 25, 100, 53 -1, -1, 54 }, 55 { 56 "invalid zero start page", 57 75, 0, 25, 100, 58 -1, -1, 59 }, 60 { 61 "invalid negative start page", 62 75, -1, 25, 100, 63 -1, -1, 64 }, 65 { 66 "invalid default limit", 67 75, 2, 0, -10, 68 -1, -1, 69 }, 70 } 71 72 for i, tc := range testCases { 73 i, tc := i, tc 74 t.Run(tc.name, func(t *testing.T) { 75 start, end := client.Paginate(tc.numObjs, tc.page, tc.limit, tc.defLimit) 76 require.Equal(t, tc.expectedStart, start, "invalid result; test case #%d", i) 77 require.Equal(t, tc.expectedEnd, end, "invalid result; test case #%d", i) 78 }) 79 } 80 } 81 82 func TestReadPageRequest(t *testing.T) { 83 84 testCases := []struct { 85 name string 86 pageKey string 87 offset, limit, page int 88 countTotal bool 89 ok bool 90 }{ 91 { 92 "use page ok", 93 "page key", 94 0, 100, 10, 95 true, 96 true, 97 }, 98 { 99 "use offset ok", 100 "page key", 101 10, 100, 0, 102 true, 103 true, 104 }, 105 { 106 "page and offset cannot be used together", 107 "page key", 108 100, 100, 10, 109 true, 110 false, 111 }, 112 } 113 114 for _, tc := range testCases { 115 t.Run(tc.name, func(t *testing.T) { 116 flagSet := pflag.NewFlagSet("test flag set", pflag.ContinueOnError) 117 flagSet.String(flags.FlagPageKey, "default page key", "page key") 118 flagSet.Uint64(flags.FlagOffset, 0, "offset") 119 flagSet.Uint64(flags.FlagLimit, 0, "limit") 120 flagSet.Uint64(flags.FlagPage, 0, "page") 121 flagSet.Bool(flags.FlagCountTotal, false, "count total") 122 123 err := flagSet.Set(flags.FlagPageKey, tc.pageKey) 124 err = flagSet.Set(flags.FlagOffset, strconv.Itoa(tc.offset)) 125 err = flagSet.Set(flags.FlagLimit, strconv.Itoa(tc.limit)) 126 err = flagSet.Set(flags.FlagPage, strconv.Itoa(tc.page)) 127 err = flagSet.Set(flags.FlagCountTotal, strconv.FormatBool(tc.countTotal)) 128 129 pr, err := client.ReadPageRequest(flagSet) 130 if tc.ok { 131 require.NoError(t, err) 132 require.NotNil(t, pr) 133 } else { 134 require.Error(t, err) 135 } 136 }) 137 } 138 }