github.com/stripe/stripe-go/v76@v76.25.0/iter_test.go (about) 1 package stripe 2 3 import ( 4 "errors" 5 "testing" 6 7 assert "github.com/stretchr/testify/require" 8 "github.com/stripe/stripe-go/v76/form" 9 ) 10 11 func TestIterEmpty(t *testing.T) { 12 tq := testQuery{{nil, &ListMeta{}, nil}} 13 g, gerr := collect(GetIter(nil, tq.query)) 14 assert.Equal(t, 0, len(tq)) 15 assert.Equal(t, 0, len(g)) 16 assert.NoError(t, gerr) 17 } 18 19 func TestIterEmptyErr(t *testing.T) { 20 tq := testQuery{{nil, &ListMeta{}, errTest}} 21 g, gerr := collect(GetIter(nil, tq.query)) 22 assert.Equal(t, 0, len(tq)) 23 assert.Equal(t, 0, len(g)) 24 assert.Equal(t, errTest, gerr) 25 } 26 27 func TestIterOne(t *testing.T) { 28 tq := testQuery{{[]interface{}{1}, &ListMeta{}, nil}} 29 want := []interface{}{1} 30 g, gerr := collect(GetIter(nil, tq.query)) 31 assert.Equal(t, 0, len(tq)) 32 assert.Equal(t, want, g) 33 assert.NoError(t, gerr) 34 } 35 36 func TestIterOneErr(t *testing.T) { 37 tq := testQuery{{[]interface{}{1}, &ListMeta{}, errTest}} 38 want := []interface{}{1} 39 g, gerr := collect(GetIter(nil, tq.query)) 40 assert.Equal(t, 0, len(tq)) 41 assert.Equal(t, want, g) 42 assert.Equal(t, errTest, gerr) 43 } 44 45 func TestIterPage2Empty(t *testing.T) { 46 tq := testQuery{ 47 {[]interface{}{&item{"x"}}, &ListMeta{HasMore: true, TotalCount: 0, URL: ""}, nil}, 48 {nil, &ListMeta{}, nil}, 49 } 50 want := []interface{}{&item{"x"}} 51 g, gerr := collect(GetIter(nil, tq.query)) 52 assert.Equal(t, 0, len(tq)) 53 assert.Equal(t, want, g) 54 assert.NoError(t, gerr) 55 } 56 57 func TestIterPage2EmptyErr(t *testing.T) { 58 tq := testQuery{ 59 {[]interface{}{&item{"x"}}, &ListMeta{HasMore: true, TotalCount: 0, URL: ""}, nil}, 60 {nil, &ListMeta{}, errTest}, 61 } 62 want := []interface{}{&item{"x"}} 63 g, gerr := collect(GetIter(nil, tq.query)) 64 assert.Equal(t, 0, len(tq)) 65 assert.Equal(t, want, g) 66 assert.Equal(t, errTest, gerr) 67 } 68 69 func TestIterTwoPages(t *testing.T) { 70 tq := testQuery{ 71 {[]interface{}{&item{"x"}}, &ListMeta{HasMore: true, TotalCount: 0, URL: ""}, nil}, 72 {[]interface{}{2}, &ListMeta{HasMore: false, TotalCount: 0, URL: ""}, nil}, 73 } 74 want := []interface{}{&item{"x"}, 2} 75 g, gerr := collect(GetIter(nil, tq.query)) 76 assert.Equal(t, 0, len(tq)) 77 assert.Equal(t, want, g) 78 assert.NoError(t, gerr) 79 } 80 81 func TestIterTwoPagesErr(t *testing.T) { 82 tq := testQuery{ 83 {[]interface{}{&item{"x"}}, &ListMeta{HasMore: true, TotalCount: 0, URL: ""}, nil}, 84 {[]interface{}{2}, &ListMeta{HasMore: false, TotalCount: 0, URL: ""}, errTest}, 85 } 86 want := []interface{}{&item{"x"}, 2} 87 g, gerr := collect(GetIter(nil, tq.query)) 88 assert.Equal(t, 0, len(tq)) 89 assert.Equal(t, want, g) 90 assert.Equal(t, errTest, gerr) 91 } 92 93 func TestIterReversed(t *testing.T) { 94 tq := testQuery{{[]interface{}{1, 2}, &ListMeta{}, nil}} 95 want := []interface{}{2, 1} 96 g, gerr := collect(GetIter(&ListParams{EndingBefore: String("x")}, tq.query)) 97 assert.Equal(t, 0, len(tq)) 98 assert.Equal(t, want, g) 99 assert.NoError(t, gerr) 100 } 101 102 func TestIterReversedTwoPages(t *testing.T) { 103 tq := testQuery{ 104 {[]interface{}{&item{"3"}, 4}, &ListMeta{HasMore: true, TotalCount: 0, URL: ""}, nil}, 105 {[]interface{}{1, 2}, &ListMeta{}, nil}, 106 } 107 want := []interface{}{4, &item{"3"}, 2, 1} 108 g, gerr := collect(GetIter(&ListParams{EndingBefore: String("x")}, tq.query)) 109 assert.Equal(t, 0, len(tq)) 110 assert.Equal(t, want, g) 111 assert.NoError(t, gerr) 112 } 113 114 func TestReverse(t *testing.T) { 115 var cases = [][]interface{}{ 116 {}, 117 {1}, 118 {1, 2}, 119 {1, 2, 3}, 120 {1, 2, 3, 4}, 121 } 122 for _, a := range cases { 123 b := make([]interface{}, len(a)) 124 copy(b, a) 125 reverse(b) 126 for i, g := range b { 127 want := a[len(a)-1-i] 128 assert.Equal(t, want, g) 129 } 130 } 131 } 132 133 func TestIterListAndMeta(t *testing.T) { 134 type listType struct { 135 ListMeta 136 } 137 listMeta := &ListMeta{HasMore: true, TotalCount: 0, URL: ""} 138 list := &listType{ListMeta: *listMeta} 139 140 tq := testQuery{{nil, list, nil}} 141 it := GetIter(nil, tq.query) 142 assert.Equal(t, list, it.List()) 143 assert.Equal(t, listMeta, it.Meta()) 144 } 145 146 // 147 // --- 148 // 149 150 var errTest = errors.New("test error") 151 152 type item struct { 153 ID string 154 } 155 156 type testQuery []struct { 157 v []interface{} 158 m ListContainer 159 e error 160 } 161 162 func (tq *testQuery) query(*Params, *form.Values) ([]interface{}, ListContainer, error) { 163 x := (*tq)[0] 164 *tq = (*tq)[1:] 165 return x.v, x.m, x.e 166 } 167 168 type collectable interface { 169 Next() bool 170 Current() interface{} 171 Err() error 172 } 173 174 func collect(it collectable) ([]interface{}, error) { 175 var g []interface{} 176 for it.Next() { 177 g = append(g, it.Current()) 178 } 179 return g, it.Err() 180 }