github.com/Finschia/finschia-sdk@v0.49.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  		t.Run(tc.name, func(t *testing.T) {
    74  			start, end := client.Paginate(tc.numObjs, tc.page, tc.limit, tc.defLimit)
    75  			require.Equal(t, tc.expectedStart, start, "invalid result; test case #%d", i)
    76  			require.Equal(t, tc.expectedEnd, end, "invalid result; test case #%d", i)
    77  		})
    78  	}
    79  }
    80  
    81  func TestReadPageRequest(t *testing.T) {
    82  	testCases := []struct {
    83  		name                string
    84  		pageKey             string
    85  		offset, limit, page int
    86  		countTotal          bool
    87  		ok                  bool
    88  	}{
    89  		{
    90  			"use page ok",
    91  			"page key",
    92  			0, 100, 10,
    93  			true,
    94  			true,
    95  		},
    96  		{
    97  			"use offset ok",
    98  			"page key",
    99  			10, 100, 0,
   100  			true,
   101  			true,
   102  		},
   103  		{
   104  			"page and offset cannot be used together",
   105  			"page key",
   106  			100, 100, 10,
   107  			true,
   108  			false,
   109  		},
   110  	}
   111  
   112  	for _, tc := range testCases {
   113  		t.Run(tc.name, func(t *testing.T) {
   114  			flagSet := pflag.NewFlagSet("test flag set", pflag.ContinueOnError)
   115  			flagSet.String(flags.FlagPageKey, "default page key", "page key")
   116  			flagSet.Uint64(flags.FlagOffset, 0, "offset")
   117  			flagSet.Uint64(flags.FlagLimit, 0, "limit")
   118  			flagSet.Uint64(flags.FlagPage, 0, "page")
   119  			flagSet.Bool(flags.FlagCountTotal, false, "count total")
   120  
   121  			err := flagSet.Set(flags.FlagPageKey, tc.pageKey)
   122  			require.NoError(t, err)
   123  			err = flagSet.Set(flags.FlagOffset, strconv.Itoa(tc.offset))
   124  			require.NoError(t, err)
   125  			err = flagSet.Set(flags.FlagLimit, strconv.Itoa(tc.limit))
   126  			require.NoError(t, err)
   127  			err = flagSet.Set(flags.FlagPage, strconv.Itoa(tc.page))
   128  			require.NoError(t, err)
   129  			err = flagSet.Set(flags.FlagCountTotal, strconv.FormatBool(tc.countTotal))
   130  			require.NoError(t, err)
   131  
   132  			pr, err := client.ReadPageRequest(flagSet)
   133  			if tc.ok {
   134  				require.NoError(t, err)
   135  				require.NotNil(t, pr)
   136  			} else {
   137  				require.Error(t, err)
   138  			}
   139  		})
   140  	}
   141  }