@@ -142,5 +142,234 @@ def setup
142
142
assert_equal 'closed' , fulfillment_order . status
143
143
end
144
144
end
145
+
146
+ context "#request_fulfillment" do
147
+ should "make a fulfillment request for a fulfillment order including unsubmitted" do
148
+ fake_original_fulfillment_order = ActiveSupport ::JSON . decode ( load_fixture ( 'fulfillment_order' ) )
149
+ fake_original_fulfillment_order [ 'status' ] = 'closed'
150
+ fake_submitted_fulfillment_order = fake_original_fulfillment_order . clone
151
+ fake_submitted_fulfillment_order [ 'id' ] = 2
152
+ fake_submitted_fulfillment_order [ 'status' ] = 'open'
153
+ fake_submitted_fulfillment_order [ 'request_status' ] = 'submitted'
154
+ fake_unsubmitted_fulfillment_order = fake_original_fulfillment_order . clone
155
+ fake_unsubmitted_fulfillment_order [ 'id' ] = 3
156
+ fake_unsubmitted_fulfillment_order [ 'status' ] = 'open'
157
+ fake_unsubmitted_fulfillment_order [ 'request_status' ] = 'unsubmitted'
158
+ body = {
159
+ original_fulfillment_order : fake_original_fulfillment_order ,
160
+ submitted_fulfillment_order : fake_submitted_fulfillment_order ,
161
+ unsubmitted_fulfillment_order : fake_unsubmitted_fulfillment_order
162
+ }
163
+ request_body = {
164
+ fulfillment_request : {
165
+ fulfillment_order_line_items : [
166
+ { id : 1 , quantity : 1 }
167
+ ] ,
168
+ message : 'Fulfill this FO, please.'
169
+ }
170
+ }
171
+ fake "fulfillment_orders/519788021/fulfillment_request" , :method => :post ,
172
+ :request_body => ActiveSupport ::JSON . encode ( request_body ) ,
173
+ :body => ActiveSupport ::JSON . encode ( body )
174
+
175
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
176
+ params = {
177
+ fulfillment_order_line_items : [ { id : 1 , quantity : 1 } ] ,
178
+ message : "Fulfill this FO, please."
179
+ }
180
+ response_fulfillment_orders = fulfillment_order . request_fulfillment ( params )
181
+
182
+ assert_equal 'closed' , fulfillment_order . status
183
+ assert_equal 3 , response_fulfillment_orders . size
184
+
185
+ original_fulfillment_order = response_fulfillment_orders [ 'original_fulfillment_order' ]
186
+ assert_equal 519788021 , original_fulfillment_order . id
187
+ assert_equal 'closed' , original_fulfillment_order . status
188
+
189
+ submitted_fulfillment_order = response_fulfillment_orders [ 'submitted_fulfillment_order' ]
190
+ assert_equal 2 , submitted_fulfillment_order . id
191
+ assert_equal 'open' , submitted_fulfillment_order . status
192
+ assert_equal 'submitted' , submitted_fulfillment_order . request_status
193
+
194
+ unsubmitted_fulfillment_order = response_fulfillment_orders [ 'unsubmitted_fulfillment_order' ]
195
+ assert_equal 3 , unsubmitted_fulfillment_order . id
196
+ assert_equal 'open' , unsubmitted_fulfillment_order . status
197
+ assert_equal 'unsubmitted' , unsubmitted_fulfillment_order . request_status
198
+ end
199
+
200
+ should "make a fulfillment request for a fulfillment order excluding unsubmitted" do
201
+ fake_original_fulfillment_order = ActiveSupport ::JSON . decode ( load_fixture ( 'fulfillment_order' ) )
202
+ fake_original_fulfillment_order [ 'status' ] = 'closed'
203
+ fake_submitted_fulfillment_order = fake_original_fulfillment_order . clone
204
+ fake_submitted_fulfillment_order [ 'id' ] = 2
205
+ fake_submitted_fulfillment_order [ 'status' ] = 'open'
206
+ fake_submitted_fulfillment_order [ 'request_status' ] = 'submitted'
207
+ body = {
208
+ original_fulfillment_order : fake_original_fulfillment_order ,
209
+ submitted_fulfillment_order : fake_submitted_fulfillment_order ,
210
+ unsubmitted_fulfillment_order : nil ,
211
+ }
212
+ request_body = {
213
+ fulfillment_request : {
214
+ fulfillment_order_line_items : [
215
+ { id : 1 , quantity : 1 }
216
+ ] ,
217
+ message : 'Fulfill this FO, please.'
218
+ }
219
+ }
220
+ fake "fulfillment_orders/519788021/fulfillment_request" , :method => :post ,
221
+ :request_body => ActiveSupport ::JSON . encode ( request_body ) ,
222
+ :body => ActiveSupport ::JSON . encode ( body )
223
+
224
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
225
+ params = {
226
+ fulfillment_order_line_items : [ { id : 1 , quantity : 1 } ] ,
227
+ message : "Fulfill this FO, please."
228
+ }
229
+ response_fulfillment_orders = fulfillment_order . request_fulfillment ( params )
230
+
231
+ assert_equal 'closed' , fulfillment_order . status
232
+ assert_equal 3 , response_fulfillment_orders . size
233
+
234
+ original_fulfillment_order = response_fulfillment_orders [ 'original_fulfillment_order' ]
235
+ assert_equal 519788021 , original_fulfillment_order . id
236
+ assert_equal 'closed' , original_fulfillment_order . status
237
+
238
+ submitted_fulfillment_order = response_fulfillment_orders [ 'submitted_fulfillment_order' ]
239
+ assert_equal 2 , submitted_fulfillment_order . id
240
+ assert_equal 'open' , submitted_fulfillment_order . status
241
+ assert_equal 'submitted' , submitted_fulfillment_order . request_status
242
+
243
+ assert_nil response_fulfillment_orders [ 'unsubmitted_fulfillment_order' ]
244
+ end
245
+ end
246
+
247
+ context "#accept_fulfillment_request" do
248
+ should "accept a fulfillment request for a fulfillment order" do
249
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
250
+
251
+ message = "LGTM. Accept this FO fulfillment request"
252
+ request_body = {
253
+ 'fulfillment_request' => {
254
+ 'message' => message
255
+ }
256
+ }
257
+ fake_response = {
258
+ fulfillment_order : fulfillment_order . attributes . merge ( status : 'in_progress' , request_status : 'accepted' )
259
+ }
260
+ fake "fulfillment_orders/519788021/fulfillment_request/accept" , :method => :post ,
261
+ :request_body => ActiveSupport ::JSON . encode ( request_body ) ,
262
+ :body => ActiveSupport ::JSON . encode ( fake_response )
263
+
264
+ accepted = fulfillment_order . accept_fulfillment_request ( message : message )
265
+
266
+ assert_equal true , accepted
267
+ assert_equal 'in_progress' , fulfillment_order . status
268
+ assert_equal 'accepted' , fulfillment_order . request_status
269
+ end
270
+ end
271
+
272
+ context "#reject_fulfillment_request" do
273
+ should "reject a fulfillment request for a fulfillment order" do
274
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
275
+
276
+ message = "LBTM. Reject this FO fulfillment request"
277
+ request_body = {
278
+ 'fulfillment_request' => {
279
+ 'message' => message
280
+ }
281
+ }
282
+ fake_response = {
283
+ fulfillment_order : fulfillment_order . attributes . merge ( status : 'open' , request_status : 'rejected' )
284
+ }
285
+ fake "fulfillment_orders/519788021/fulfillment_request/reject" , :method => :post ,
286
+ :request_body => ActiveSupport ::JSON . encode ( request_body ) ,
287
+ :body => ActiveSupport ::JSON . encode ( fake_response )
288
+
289
+ rejected = fulfillment_order . reject_fulfillment_request ( message : message )
290
+
291
+ assert_equal true , rejected
292
+ assert_equal 'open' , fulfillment_order . status
293
+ assert_equal 'rejected' , fulfillment_order . request_status
294
+ end
295
+ end
296
+
297
+ context "#request_cancellation" do
298
+ should "make a cancellation request for a fulfillment order" do
299
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
300
+
301
+ message = "Cancelling this please."
302
+ request_body = {
303
+ 'cancellation_request' => {
304
+ 'message' => message
305
+ }
306
+ }
307
+ cancelling = ActiveSupport ::JSON . decode ( load_fixture ( 'fulfillment_order' ) )
308
+ cancelling [ 'status' ] = 'in_progress'
309
+ cancelling [ 'request_status' ] = 'cancellation_requested'
310
+ fake "fulfillment_orders/519788021/cancellation_request" , :method => :post ,
311
+ :request_body => ActiveSupport ::JSON . encode ( request_body ) ,
312
+ :body => ActiveSupport ::JSON . encode ( { fulfillment_order : cancelling } )
313
+
314
+ cancelled = fulfillment_order . request_cancellation ( message : "Cancelling this please." )
315
+
316
+ assert_equal true , cancelled
317
+ assert_equal 'in_progress' , fulfillment_order . status
318
+ assert_equal 'cancellation_requested' , fulfillment_order . request_status
319
+ end
320
+ end
321
+
322
+ context "#accept_cancellation_request" do
323
+ should "accept a cancellation request for a fulfillment order" do
324
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
325
+
326
+ message = 'Already in-progress. Reject this FO cancellation request'
327
+ request_body = {
328
+ 'cancellation_request' => {
329
+ 'message' => message
330
+ }
331
+ }
332
+ fake_response = {
333
+ fulfillment_order : fulfillment_order . attributes . merge ( status : 'cancelled' ,
334
+ request_status : 'cancellation_accepted' )
335
+ }
336
+ fake "fulfillment_orders/519788021/cancellation_request/accept" , :method => :post ,
337
+ :request_body => ActiveSupport ::JSON . encode ( request_body ) ,
338
+ :body => ActiveSupport ::JSON . encode ( fake_response )
339
+
340
+ accepted = fulfillment_order . accept_cancellation_request ( message : message )
341
+
342
+ assert_equal true , accepted
343
+ assert_equal 'cancelled' , fulfillment_order . status
344
+ assert_equal 'cancellation_accepted' , fulfillment_order . request_status
345
+ end
346
+ end
347
+
348
+ context "#reject_cancellation_request" do
349
+ should "reject a cancellation request for a fulfillment order" do
350
+ fulfillment_order = ShopifyAPI ::FulfillmentOrder . find ( 519788021 )
351
+
352
+ message = "Already in-progress. Reject this FO cancellation request"
353
+ request_body = {
354
+ 'cancellation_request' => {
355
+ 'message' => message
356
+ }
357
+ }
358
+ fake_response = {
359
+ fulfillment_order : fulfillment_order . attributes . merge ( status : 'in_progress' ,
360
+ request_status : 'cancellation_rejected' )
361
+ }
362
+ fake "fulfillment_orders/519788021/cancellation_request/reject" , :method => :post ,
363
+ :request_body => request_body ,
364
+ :body => ActiveSupport ::JSON . encode ( fake_response )
365
+
366
+ rejected = fulfillment_order . reject_cancellation_request ( message : message )
367
+
368
+ assert_equal true , rejected
369
+ assert_equal 'in_progress' , fulfillment_order . status
370
+ assert_equal 'cancellation_rejected' , fulfillment_order . request_status
371
+ end
372
+ end
373
+
145
374
end
146
375
end
0 commit comments