@@ -31,6 +31,118 @@ func TestOrderRiskListError(t *testing.T) {
31
31
}
32
32
}
33
33
34
+ func TestOrderRiskListAll (t * testing.T ) {
35
+ setup ()
36
+ defer teardown ()
37
+
38
+ listURL := fmt .Sprintf ("https://fooshop.myshopify.com/%s/orders/450789469/risks.json" , client .pathPrefix )
39
+
40
+ cases := []struct {
41
+ name string
42
+ expectedOrderRisks []OrderRisk
43
+ expectedRequestURLs []string
44
+ expectedLinkHeaders []string
45
+ expectedBodies []string
46
+ expectedErr error
47
+ }{
48
+ {
49
+ name : "Pulls the next page" ,
50
+ expectedRequestURLs : []string {
51
+ listURL ,
52
+ fmt .Sprintf ("%s?page_info=pg2" , listURL ),
53
+ },
54
+ expectedLinkHeaders : []string {
55
+ `<http://valid.url?page_info=pg2>; rel="next"` ,
56
+ `<http://valid.url?page_info=pg1>; rel="previous"` ,
57
+ },
58
+ expectedBodies : []string {
59
+ `{"risks": [{"id":1},{"id":2}]}` ,
60
+ `{"risks": [{"id":3},{"id":4}]}` ,
61
+ },
62
+ expectedOrderRisks : []OrderRisk {{Id : 1 }, {Id : 2 }, {Id : 3 }, {Id : 4 }},
63
+ expectedErr : nil ,
64
+ },
65
+ {
66
+ name : "Stops when there is not a next page" ,
67
+ expectedRequestURLs : []string {
68
+ listURL ,
69
+ },
70
+ expectedLinkHeaders : []string {
71
+ `<http://valid.url?page_info=pg2>; rel="previous"` ,
72
+ },
73
+ expectedBodies : []string {
74
+ `{"risks": [{"id":1}]}` ,
75
+ },
76
+ expectedOrderRisks : []OrderRisk {{Id : 1 }},
77
+ expectedErr : nil ,
78
+ },
79
+ {
80
+ name : "Returns errors when required" ,
81
+ expectedRequestURLs : []string {
82
+ listURL ,
83
+ },
84
+ expectedLinkHeaders : []string {
85
+ `<http://valid.url?paage_info=pg2>; rel="previous"` ,
86
+ },
87
+ expectedBodies : []string {
88
+ `{"risks": []}` ,
89
+ },
90
+ expectedOrderRisks : []OrderRisk {},
91
+ expectedErr : errors .New ("page_info is missing" ),
92
+ },
93
+ }
94
+
95
+ for i , c := range cases {
96
+ t .Run (c .name , func (t * testing.T ) {
97
+ if len (c .expectedRequestURLs ) != len (c .expectedLinkHeaders ) {
98
+ t .Errorf (
99
+ "test case must have the same number of expected request urls (%d) as expected link headers (%d)" ,
100
+ len (c .expectedRequestURLs ),
101
+ len (c .expectedLinkHeaders ),
102
+ )
103
+
104
+ return
105
+ }
106
+
107
+ if len (c .expectedRequestURLs ) != len (c .expectedBodies ) {
108
+ t .Errorf (
109
+ "test case must have the same number of expected request urls (%d) as expected bodies (%d)" ,
110
+ len (c .expectedRequestURLs ),
111
+ len (c .expectedBodies ),
112
+ )
113
+
114
+ return
115
+ }
116
+
117
+ for i := range c .expectedRequestURLs {
118
+ response := & http.Response {
119
+ StatusCode : 200 ,
120
+ Body : httpmock .NewRespBodyFromString (c .expectedBodies [i ]),
121
+ Header : http.Header {
122
+ "Link" : {c .expectedLinkHeaders [i ]},
123
+ },
124
+ }
125
+
126
+ httpmock .RegisterResponder ("GET" , c .expectedRequestURLs [i ], httpmock .ResponderFromResponse (response ))
127
+ }
128
+
129
+ risks , err := client .OrderRisk .ListAll (context .Background (), 450789469 , nil )
130
+ if ! reflect .DeepEqual (risks , c .expectedOrderRisks ) {
131
+ t .Errorf ("test %d OrderRisk.ListAll orders returned %+v, expected %+v" , i , risks , c .expectedOrderRisks )
132
+ }
133
+
134
+ if (c .expectedErr != nil || err != nil ) && err .Error () != c .expectedErr .Error () {
135
+ t .Errorf (
136
+ "test %d OrderRisk.ListAll err returned %+v, expected %+v" ,
137
+ i ,
138
+ err ,
139
+ c .expectedErr ,
140
+ )
141
+ }
142
+ })
143
+ }
144
+ }
145
+
34
146
func TestOrderRiskListWithPagination (t * testing.T ) {
35
147
setup ()
36
148
defer teardown ()
0 commit comments