shopify_api 9.2.0 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +36 -0
  3. data/.github/workflows/build.yml +41 -0
  4. data/.gitignore +0 -1
  5. data/.rubocop.yml +23 -3
  6. data/.rubocop_todo.yml +75 -0
  7. data/CHANGELOG.md +15 -0
  8. data/Gemfile +1 -0
  9. data/Gemfile.lock +151 -0
  10. data/Gemfile_ar51 +1 -1
  11. data/README.md +40 -30
  12. data/RELEASING +10 -6
  13. data/Rakefile +10 -6
  14. data/docs/graphql.md +1 -1
  15. data/docs/index.md +1 -1
  16. data/lib/active_resource/connection_ext.rb +1 -0
  17. data/lib/active_resource/detailed_log_subscriber.rb +6 -7
  18. data/lib/active_resource/json_errors.rb +8 -2
  19. data/lib/shopify_api.rb +8 -1
  20. data/lib/shopify_api/api_access.rb +57 -0
  21. data/lib/shopify_api/api_version.rb +6 -5
  22. data/lib/shopify_api/connection.rb +1 -0
  23. data/lib/shopify_api/countable.rb +3 -2
  24. data/lib/shopify_api/disable_prefix_check.rb +2 -2
  25. data/lib/shopify_api/events.rb +2 -1
  26. data/lib/shopify_api/graphql.rb +8 -6
  27. data/lib/shopify_api/limits.rb +3 -2
  28. data/lib/shopify_api/message_enricher.rb +11 -9
  29. data/lib/shopify_api/meta.rb +0 -1
  30. data/lib/shopify_api/metafields.rb +5 -4
  31. data/lib/shopify_api/pagination_link_headers.rb +4 -3
  32. data/lib/shopify_api/resources.rb +1 -0
  33. data/lib/shopify_api/resources/access_scope.rb +1 -1
  34. data/lib/shopify_api/resources/access_token.rb +1 -0
  35. data/lib/shopify_api/resources/address.rb +1 -0
  36. data/lib/shopify_api/resources/announcement.rb +2 -1
  37. data/lib/shopify_api/resources/application_charge.rb +1 -0
  38. data/lib/shopify_api/resources/application_credit.rb +1 -0
  39. data/lib/shopify_api/resources/article.rb +3 -2
  40. data/lib/shopify_api/resources/asset.rb +6 -5
  41. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +1 -1
  42. data/lib/shopify_api/resources/base.rb +11 -6
  43. data/lib/shopify_api/resources/billing_address.rb +1 -0
  44. data/lib/shopify_api/resources/blog.rb +2 -1
  45. data/lib/shopify_api/resources/carrier_service.rb +1 -0
  46. data/lib/shopify_api/resources/cart.rb +2 -1
  47. data/lib/shopify_api/resources/collect.rb +1 -0
  48. data/lib/shopify_api/resources/collection_listing.rb +1 -0
  49. data/lib/shopify_api/resources/comment.rb +20 -5
  50. data/lib/shopify_api/resources/country.rb +1 -0
  51. data/lib/shopify_api/resources/custom_collection.rb +4 -3
  52. data/lib/shopify_api/resources/customer.rb +2 -1
  53. data/lib/shopify_api/resources/customer_group.rb +1 -0
  54. data/lib/shopify_api/resources/customer_invite.rb +1 -0
  55. data/lib/shopify_api/resources/customer_saved_search.rb +2 -1
  56. data/lib/shopify_api/resources/discount_code.rb +1 -0
  57. data/lib/shopify_api/resources/discount_code_batch.rb +4 -2
  58. data/lib/shopify_api/resources/draft_order.rb +1 -0
  59. data/lib/shopify_api/resources/draft_order_invoice.rb +1 -0
  60. data/lib/shopify_api/resources/event.rb +1 -0
  61. data/lib/shopify_api/resources/fulfillment.rb +12 -3
  62. data/lib/shopify_api/resources/fulfillment_event.rb +1 -0
  63. data/lib/shopify_api/resources/fulfillment_order.rb +30 -16
  64. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +1 -0
  65. data/lib/shopify_api/resources/fulfillment_request.rb +1 -0
  66. data/lib/shopify_api/resources/fulfillment_service.rb +1 -0
  67. data/lib/shopify_api/resources/fulfillment_v2.rb +3 -2
  68. data/lib/shopify_api/resources/gift_card.rb +1 -0
  69. data/lib/shopify_api/resources/image.rb +2 -1
  70. data/lib/shopify_api/resources/inventory_level.rb +2 -3
  71. data/lib/shopify_api/resources/line_item.rb +4 -3
  72. data/lib/shopify_api/resources/location.rb +1 -1
  73. data/lib/shopify_api/resources/marketing_event.rb +1 -0
  74. data/lib/shopify_api/resources/metafield.rb +1 -0
  75. data/lib/shopify_api/resources/note_attribute.rb +1 -0
  76. data/lib/shopify_api/resources/option.rb +1 -0
  77. data/lib/shopify_api/resources/order.rb +2 -1
  78. data/lib/shopify_api/resources/order_risk.rb +1 -0
  79. data/lib/shopify_api/resources/page.rb +1 -0
  80. data/lib/shopify_api/resources/payment_details.rb +1 -0
  81. data/lib/shopify_api/resources/policy.rb +1 -0
  82. data/lib/shopify_api/resources/price_rule.rb +1 -1
  83. data/lib/shopify_api/resources/product.rb +14 -11
  84. data/lib/shopify_api/resources/product_listing.rb +1 -0
  85. data/lib/shopify_api/resources/province.rb +1 -0
  86. data/lib/shopify_api/resources/receipt.rb +1 -0
  87. data/lib/shopify_api/resources/recurring_application_charge.rb +4 -1
  88. data/lib/shopify_api/resources/redirect.rb +1 -0
  89. data/lib/shopify_api/resources/refund.rb +2 -1
  90. data/lib/shopify_api/resources/report.rb +1 -0
  91. data/lib/shopify_api/resources/resource_feedback.rb +1 -1
  92. data/lib/shopify_api/resources/rule.rb +1 -0
  93. data/lib/shopify_api/resources/script_tag.rb +1 -0
  94. data/lib/shopify_api/resources/shipping_address.rb +1 -0
  95. data/lib/shopify_api/resources/shipping_line.rb +1 -0
  96. data/lib/shopify_api/resources/shipping_zone.rb +1 -0
  97. data/lib/shopify_api/resources/shop.rb +2 -1
  98. data/lib/shopify_api/resources/smart_collection.rb +2 -2
  99. data/lib/shopify_api/resources/storefront_access_token.rb +1 -0
  100. data/lib/shopify_api/resources/tax_line.rb +1 -0
  101. data/lib/shopify_api/resources/tax_service.rb +1 -0
  102. data/lib/shopify_api/resources/theme.rb +1 -0
  103. data/lib/shopify_api/resources/transaction.rb +1 -0
  104. data/lib/shopify_api/resources/usage_charge.rb +1 -0
  105. data/lib/shopify_api/resources/user.rb +1 -0
  106. data/lib/shopify_api/resources/variant.rb +16 -18
  107. data/lib/shopify_api/resources/webhook.rb +1 -0
  108. data/lib/shopify_api/session.rb +20 -12
  109. data/lib/shopify_api/version.rb +2 -1
  110. data/lib/verify_docs.rb +1 -0
  111. data/service.yml +1 -1
  112. data/shopify_api.gemspec +10 -4
  113. data/test/access_token_test.rb +6 -5
  114. data/test/active_resource/json_errors_test.rb +6 -6
  115. data/test/api_access_test.rb +153 -0
  116. data/test/api_version_test.rb +3 -3
  117. data/test/application_charge_test.rb +30 -27
  118. data/test/application_credit_test.rb +10 -9
  119. data/test/article_test.rb +34 -35
  120. data/test/asset_test.rb +14 -6
  121. data/test/assigned_fulfillment_order_test.rb +5 -4
  122. data/test/base_test.rb +55 -56
  123. data/test/blog_test.rb +4 -3
  124. data/test/carrier_service_test.rb +7 -6
  125. data/test/cart_test.rb +2 -1
  126. data/test/collect_test.rb +4 -3
  127. data/test/collection_listing_test.rb +21 -16
  128. data/test/collection_publication_test.rb +8 -8
  129. data/test/collection_test.rb +20 -19
  130. data/test/countable_test.rb +3 -2
  131. data/test/currency_test.rb +5 -5
  132. data/test/custom_collection_test.rb +4 -3
  133. data/test/customer_saved_search_test.rb +18 -8
  134. data/test/customer_test.rb +22 -14
  135. data/test/detailed_log_subscriber_test.rb +15 -11
  136. data/test/discount_code_batch_test.rb +11 -10
  137. data/test/discount_code_test.rb +21 -15
  138. data/test/draft_order_test.rb +68 -52
  139. data/test/fixtures/assigned_fulfillment_orders.json +2 -0
  140. data/test/fixtures/fulfillment_order.json +1 -0
  141. data/test/fixtures/fulfillment_orders.json +2 -0
  142. data/test/fulfillment_event_test.rb +31 -26
  143. data/test/fulfillment_order_test.rb +215 -147
  144. data/test/fulfillment_order_test_helper.rb +1 -0
  145. data/test/fulfillment_request_test.rb +10 -8
  146. data/test/fulfillment_service_test.rb +13 -12
  147. data/test/fulfillment_test.rb +81 -66
  148. data/test/fulfillment_v2_test.rb +16 -12
  149. data/test/gift_card_test.rb +6 -4
  150. data/test/graphql_test.rb +27 -27
  151. data/test/image_test.rb +19 -17
  152. data/test/inventory_level_test.rb +24 -15
  153. data/test/lib/webmock_extensions/last_request.rb +1 -1
  154. data/test/limits_test.rb +2 -1
  155. data/test/location_test.rb +2 -1
  156. data/test/marketing_event_test.rb +20 -20
  157. data/test/message_enricher_test.rb +6 -6
  158. data/test/meta_test.rb +7 -9
  159. data/test/metafield_test.rb +30 -20
  160. data/test/order_risk_test.rb +17 -16
  161. data/test/order_test.rb +43 -28
  162. data/test/pagination_test.rb +89 -56
  163. data/test/policy_test.rb +6 -5
  164. data/test/price_rule_test.rb +20 -15
  165. data/test/product_listing_test.rb +20 -20
  166. data/test/product_publication_test.rb +8 -8
  167. data/test/product_test.rb +44 -32
  168. data/test/publication_test.rb +3 -3
  169. data/test/recurring_application_charge_test.rb +104 -42
  170. data/test/redirect_test.rb +4 -3
  171. data/test/refund_test.rb +22 -17
  172. data/test/report_test.rb +12 -10
  173. data/test/resource_feedback_test.rb +14 -13
  174. data/test/script_tag_test.rb +10 -9
  175. data/test/session_test.rb +74 -46
  176. data/test/shipping_zone_test.rb +4 -3
  177. data/test/shop_test.rb +47 -33
  178. data/test/smart_collection_test.rb +5 -4
  179. data/test/storefront_access_token_test.rb +13 -15
  180. data/test/tax_service_test.rb +7 -4
  181. data/test/tender_transaction_test.rb +3 -3
  182. data/test/test_helper.rb +13 -11
  183. data/test/transaction_test.rb +4 -3
  184. data/test/usage_charge_test.rb +12 -8
  185. data/test/user_test.rb +4 -3
  186. data/test/variant_test.rb +23 -54
  187. data/test/webhook_test.rb +10 -7
  188. metadata +14 -9
  189. data/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +0 -1027
  190. data/.travis.yml +0 -28
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
  require 'fulfillment_order_test_helper'
3
4
 
@@ -8,10 +9,12 @@ class FulFillmentOrderTest < Test::Unit::TestCase
8
9
  super
9
10
  @url_prefix = url_prefix_for_activated_session_for('2020-01')
10
11
 
11
- fake 'fulfillment_orders',
12
+ fake(
13
+ 'fulfillment_orders',
12
14
  url: "#{@url_prefix}/fulfillment_orders/519788021.json",
13
15
  method: :get,
14
16
  body: load_fixture('fulfillment_order')
17
+ )
15
18
  end
16
19
 
17
20
  context "FulfillmentOrder" do
@@ -20,7 +23,7 @@ class FulFillmentOrderTest < Test::Unit::TestCase
20
23
  url_prefix_for_activated_session_for('2019-10')
21
24
  fulfillment_order = load_fixture('fulfillment_order')
22
25
 
23
- exception = assert_raises NotImplementedError do
26
+ exception = assert_raises(NotImplementedError) do
24
27
  ShopifyAPI::FulfillmentOrder.new(ActiveSupport::JSON.decode(fulfillment_order))
25
28
  end
26
29
  assert_equal(
@@ -34,12 +37,13 @@ class FulFillmentOrderTest < Test::Unit::TestCase
34
37
  should "raise NotImplementedError when api_version is older than 2020-01" do
35
38
  @url_prefix = url_prefix_for_activated_session_for('2019-10')
36
39
 
37
- fake 'fulfillment_orders',
40
+ fake(
41
+ 'fulfillment_orders',
38
42
  url: "#{@url_prefix}/fulfillment_orders/519788021.json",
39
43
  method: :get,
40
44
  body: load_fixture('fulfillment_order')
41
-
42
- exception = assert_raises NotImplementedError do
45
+ )
46
+ exception = assert_raises(NotImplementedError) do
43
47
  ShopifyAPI::FulfillmentOrder.find(519788021)
44
48
  end
45
49
  assert_equal(
@@ -47,7 +51,7 @@ class FulFillmentOrderTest < Test::Unit::TestCase
47
51
  exception.message
48
52
  )
49
53
 
50
- assert_raises NotImplementedError do
54
+ assert_raises(NotImplementedError) do
51
55
  ShopifyAPI::FulfillmentOrder.all(params: { order_id: 450789469 })
52
56
  end
53
57
  end
@@ -56,32 +60,33 @@ class FulFillmentOrderTest < Test::Unit::TestCase
56
60
  context "#find" do
57
61
  should "be able to find fulfillment order" do
58
62
  fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
59
- assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
60
- assert_equal 519788021, fulfillment_order.id
61
- assert_equal 450789469, fulfillment_order.order_id
63
+ assert(fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder))
64
+ assert_equal(519788021, fulfillment_order.id)
65
+ assert_equal(450789469, fulfillment_order.order_id)
62
66
  end
63
67
  end
64
68
 
65
69
  context "#all" do
66
70
  should "be able to list fulfillment orders for an order" do
67
- fake 'orders',
71
+ fake(
72
+ 'orders',
68
73
  url: "#{@url_prefix}/orders/450789469/fulfillment_orders.json",
69
74
  method: :get,
70
75
  body: load_fixture('fulfillment_orders')
71
-
76
+ )
72
77
  fulfillment_orders = ShopifyAPI::FulfillmentOrder.all(
73
78
  params: { order_id: 450789469 }
74
79
  )
75
80
 
76
- assert_equal [519788021, 519788022], fulfillment_orders.map(&:id).sort
81
+ assert_equal([519788021, 519788022], fulfillment_orders.map(&:id).sort)
77
82
  fulfillment_orders.each do |fulfillment_order|
78
- assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
79
- assert_equal 450789469, fulfillment_order.order_id
83
+ assert(fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder))
84
+ assert_equal(450789469, fulfillment_order.order_id)
80
85
  end
81
86
  end
82
87
 
83
88
  should "require order_id" do
84
- assert_raises ShopifyAPI::ValidationException do
89
+ assert_raises(ShopifyAPI::ValidationException) do
85
90
  ShopifyAPI::FulfillmentOrder.all
86
91
  end
87
92
  end
@@ -90,37 +95,39 @@ class FulFillmentOrderTest < Test::Unit::TestCase
90
95
  context "#fulfillments" do
91
96
  should "be able to list fulfillments for a fulfillment order" do
92
97
  fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
93
- fake 'fulfillment_orders',
98
+ fake(
99
+ 'fulfillment_orders',
94
100
  url: "#{@url_prefix}/fulfillment_orders/#{fulfillment_order.id}/fulfillments.json",
95
101
  method: :get,
96
102
  body: load_fixture('fulfillments')
97
-
103
+ )
98
104
  fulfillments = fulfillment_order.fulfillments
99
105
 
100
- assert_equal 1, fulfillments.count
106
+ assert_equal(1, fulfillments.count)
101
107
  fulfillment = fulfillments.first
102
- assert fulfillment.is_a?(ShopifyAPI::Fulfillment)
103
- assert_equal 450789469, fulfillment.order_id
108
+ assert(fulfillment.is_a?(ShopifyAPI::Fulfillment))
109
+ assert_equal(450789469, fulfillment.order_id)
104
110
  end
105
111
  end
106
112
 
107
113
  context "#locations_for_move" do
108
114
  should "be able to list locations for a fulfillment order" do
109
115
  fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
110
- fake 'fulfillment_orders',
116
+ fake(
117
+ 'fulfillment_orders',
111
118
  url: "#{@url_prefix}/fulfillment_orders/#{fulfillment_order.id}/locations_for_move.json",
112
119
  method: :get,
113
120
  body: load_fixture('fulfillment_order_locations_for_move')
114
-
121
+ )
115
122
  locations_for_move = fulfillment_order.locations_for_move
116
123
 
117
- assert_equal 2, locations_for_move.count
124
+ assert_equal(2, locations_for_move.count)
118
125
  location_for_move = locations_for_move.first
119
- assert location_for_move.is_a?(ShopifyAPI::FulfillmentOrderLocationsForMove)
126
+ assert(location_for_move.is_a?(ShopifyAPI::FulfillmentOrderLocationsForMove))
120
127
 
121
128
  location = location_for_move.location
122
- assert location.is_a?(ShopifyAPI::Location)
123
- assert_equal 1059367776,location.id
129
+ assert(location.is_a?(ShopifyAPI::Location))
130
+ assert_equal(1059367776, location.id)
124
131
  end
125
132
  end
126
133
 
@@ -140,37 +147,38 @@ class FulFillmentOrderTest < Test::Unit::TestCase
140
147
  moved_fulfillment_order: fake_moved_fulfillment_order,
141
148
  remaining_fulfillment_order: nil,
142
149
  }
143
- fake 'fulfillment_orders',
150
+ fake(
151
+ 'fulfillment_orders',
144
152
  url: "#{@url_prefix}/fulfillment_orders/519788021/move.json",
145
- :method => :post,
146
- :request_body => ActiveSupport::JSON.encode(request_body),
147
- :body => ActiveSupport::JSON.encode(body)
148
-
153
+ method: :post,
154
+ request_body: ActiveSupport::JSON.encode(request_body),
155
+ body: ActiveSupport::JSON.encode(body)
156
+ )
149
157
  response_fulfillment_orders = fulfillment_order.move(new_location_id: new_location_id)
150
158
 
151
- assert_equal 'closed', fulfillment_order.status
159
+ assert_equal('closed', fulfillment_order.status)
152
160
 
153
- assert_equal 3, response_fulfillment_orders.count
161
+ assert_equal(3, response_fulfillment_orders.count)
154
162
  original_fulfillment_order = response_fulfillment_orders['original_fulfillment_order']
155
163
  refute_nil original_fulfillment_order
156
- assert original_fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
157
- assert_equal 'closed', original_fulfillment_order.status
164
+ assert(original_fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder))
165
+ assert_equal('closed', original_fulfillment_order.status)
158
166
 
159
167
  moved_fulfillment_order = response_fulfillment_orders['moved_fulfillment_order']
160
168
  refute_nil moved_fulfillment_order
161
- assert moved_fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
162
- assert_equal 'open', moved_fulfillment_order.status
163
- assert_equal new_location_id, moved_fulfillment_order.assigned_location_id
169
+ assert(moved_fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder))
170
+ assert_equal('open', moved_fulfillment_order.status)
171
+ assert_equal(new_location_id, moved_fulfillment_order.assigned_location_id)
164
172
 
165
173
  remaining_fulfillment_order = response_fulfillment_orders['remaining_fulfillment_order']
166
- assert_nil remaining_fulfillment_order
174
+ assert_nil(remaining_fulfillment_order)
167
175
  end
168
176
  end
169
177
 
170
178
  context "#cancel" do
171
179
  should "cancel a fulfillment order" do
172
180
  fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
173
- assert_equal 'open', fulfillment_order.status
181
+ assert_equal('open', fulfillment_order.status)
174
182
 
175
183
  cancelled = ActiveSupport::JSON.decode(load_fixture('fulfillment_order'))
176
184
  cancelled['status'] = 'cancelled'
@@ -178,19 +186,20 @@ class FulFillmentOrderTest < Test::Unit::TestCase
178
186
  fulfillment_order: cancelled,
179
187
  replacement_fulfillment_order: fulfillment_order,
180
188
  }
181
- fake 'fulfillment_orders',
189
+ fake(
190
+ 'fulfillment_orders',
182
191
  url: "#{@url_prefix}/fulfillment_orders/519788021/cancel.json",
183
- :method => :post,
184
- :body => ActiveSupport::JSON.encode(body)
185
-
192
+ method: :post,
193
+ body: ActiveSupport::JSON.encode(body)
194
+ )
186
195
  response_fulfillment_orders = fulfillment_order.cancel
187
196
 
188
- assert_equal 'cancelled', fulfillment_order.status
189
- assert_equal 2, response_fulfillment_orders.count
197
+ assert_equal('cancelled', fulfillment_order.status)
198
+ assert_equal(2, response_fulfillment_orders.count)
190
199
  fulfillment_order = response_fulfillment_orders['fulfillment_order']
191
- assert_equal 'cancelled', fulfillment_order.status
200
+ assert_equal('cancelled', fulfillment_order.status)
192
201
  replacement_fulfillment_order = response_fulfillment_orders['replacement_fulfillment_order']
193
- assert_equal 'open', replacement_fulfillment_order.status
202
+ assert_equal('open', replacement_fulfillment_order.status)
194
203
  end
195
204
  end
196
205
 
@@ -203,17 +212,69 @@ class FulFillmentOrderTest < Test::Unit::TestCase
203
212
  closed['status'] = 'incomplete'
204
213
  request_body = {
205
214
  fulfillment_order: {
206
- message: "Test close message."
207
- }
215
+ message: "Test close message.",
216
+ },
208
217
  }
209
- fake 'fulfillment_orders',
218
+ fake(
219
+ 'fulfillment_orders',
210
220
  url: "#{@url_prefix}/fulfillment_orders/519788021/close.json",
211
- :method => :post,
212
- :request_body => ActiveSupport::JSON.encode(request_body),
213
- :body => ActiveSupport::JSON.encode(closed)
221
+ method: :post,
222
+ request_body: ActiveSupport::JSON.encode(request_body),
223
+ body: ActiveSupport::JSON.encode(closed)
224
+ )
225
+ assert(fulfillment_order.close(message: "Test close message."))
226
+ assert_equal('incomplete', fulfillment_order.status)
227
+ end
228
+ end
229
+
230
+ context "#open" do
231
+ should "be able to open fulfillment order" do
232
+ fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
233
+ fulfillment_order.status = 'scheduled'
234
+
235
+ opened = ActiveSupport::JSON.decode(load_fixture('fulfillment_order'))
236
+ opened['status'] = 'open'
237
+ body = {
238
+ fulfillment_order: opened,
239
+ }
240
+
241
+ fake(
242
+ 'fulfillment_orders',
243
+ url: "#{@url_prefix}/fulfillment_orders/519788021/open.json",
244
+ method: :post,
245
+ body: ActiveSupport::JSON.encode(body)
246
+ )
247
+ assert(fulfillment_order.open)
248
+ assert_equal('open', fulfillment_order.status)
249
+ end
250
+ end
251
+
252
+ context "#reschedule" do
253
+ should "be able to rescheduled fulfillment order" do
254
+ fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
255
+ fulfillment_order.status = 'scheduled'
256
+ new_fulfill_at = "2021-11-29"
257
+
258
+ rescheduled = ActiveSupport::JSON.decode(load_fixture('fulfillment_order'))
259
+ rescheduled['status'] = 'scheduled'
260
+ rescheduled['fulfill_at'] = new_fulfill_at
261
+ body = {
262
+ fulfillment_order: rescheduled,
263
+ }
214
264
 
215
- assert fulfillment_order.close(message: "Test close message.")
216
- assert_equal 'incomplete', fulfillment_order.status
265
+ request_body = { fulfillment_order: { new_fulfill_at: new_fulfill_at } }
266
+
267
+ fake(
268
+ 'fulfillment_orders',
269
+ url: "#{@url_prefix}/fulfillment_orders/519788021/reschedule.json",
270
+ method: :post,
271
+ request_body: ActiveSupport::JSON.encode(request_body),
272
+ body: ActiveSupport::JSON.encode(body)
273
+ )
274
+
275
+ assert(fulfillment_order.reschedule(new_fulfill_at: new_fulfill_at))
276
+ assert_equal('scheduled', fulfillment_order.status)
277
+ assert_equal(new_fulfill_at, fulfillment_order.fulfill_at)
217
278
  end
218
279
  end
219
280
 
@@ -232,45 +293,46 @@ class FulFillmentOrderTest < Test::Unit::TestCase
232
293
  body = {
233
294
  original_fulfillment_order: fake_original_fulfillment_order,
234
295
  submitted_fulfillment_order: fake_submitted_fulfillment_order,
235
- unsubmitted_fulfillment_order: fake_unsubmitted_fulfillment_order
296
+ unsubmitted_fulfillment_order: fake_unsubmitted_fulfillment_order,
236
297
  }
237
298
  request_body = {
238
299
  fulfillment_request: {
239
300
  fulfillment_order_line_items: [
240
- { id: 1, quantity: 1 }
301
+ { id: 1, quantity: 1 },
241
302
  ],
242
- message: 'Fulfill this FO, please.'
243
- }
303
+ message: 'Fulfill this FO, please.',
304
+ },
244
305
  }
245
- fake 'fulfillment_orders',
306
+ fake(
307
+ 'fulfillment_orders',
246
308
  url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request.json",
247
- :method => :post,
248
- :request_body => ActiveSupport::JSON.encode(request_body),
249
- :body => ActiveSupport::JSON.encode(body)
250
-
309
+ method: :post,
310
+ request_body: ActiveSupport::JSON.encode(request_body),
311
+ body: ActiveSupport::JSON.encode(body)
312
+ )
251
313
  fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
252
314
  params = {
253
315
  fulfillment_order_line_items: [{ id: 1, quantity: 1 }],
254
- message: "Fulfill this FO, please."
316
+ message: "Fulfill this FO, please.",
255
317
  }
256
318
  response_fulfillment_orders = fulfillment_order.request_fulfillment(params)
257
319
 
258
- assert_equal 'closed', fulfillment_order.status
259
- assert_equal 3, response_fulfillment_orders.size
320
+ assert_equal('closed', fulfillment_order.status)
321
+ assert_equal(3, response_fulfillment_orders.size)
260
322
 
261
323
  original_fulfillment_order = response_fulfillment_orders['original_fulfillment_order']
262
- assert_equal 519788021, original_fulfillment_order.id
263
- assert_equal 'closed', original_fulfillment_order.status
324
+ assert_equal(519788021, original_fulfillment_order.id)
325
+ assert_equal('closed', original_fulfillment_order.status)
264
326
 
265
327
  submitted_fulfillment_order = response_fulfillment_orders['submitted_fulfillment_order']
266
- assert_equal 2, submitted_fulfillment_order.id
267
- assert_equal 'open', submitted_fulfillment_order.status
268
- assert_equal 'submitted', submitted_fulfillment_order.request_status
328
+ assert_equal(2, submitted_fulfillment_order.id)
329
+ assert_equal('open', submitted_fulfillment_order.status)
330
+ assert_equal('submitted', submitted_fulfillment_order.request_status)
269
331
 
270
332
  unsubmitted_fulfillment_order = response_fulfillment_orders['unsubmitted_fulfillment_order']
271
- assert_equal 3, unsubmitted_fulfillment_order.id
272
- assert_equal 'open', unsubmitted_fulfillment_order.status
273
- assert_equal 'unsubmitted', unsubmitted_fulfillment_order.request_status
333
+ assert_equal(3, unsubmitted_fulfillment_order.id)
334
+ assert_equal('open', unsubmitted_fulfillment_order.status)
335
+ assert_equal('unsubmitted', unsubmitted_fulfillment_order.request_status)
274
336
  end
275
337
 
276
338
  should "make a fulfillment request for a fulfillment order excluding unsubmitted" do
@@ -288,37 +350,38 @@ class FulFillmentOrderTest < Test::Unit::TestCase
288
350
  request_body = {
289
351
  fulfillment_request: {
290
352
  fulfillment_order_line_items: [
291
- { id: 1, quantity: 1 }
353
+ { id: 1, quantity: 1 },
292
354
  ],
293
- message: 'Fulfill this FO, please.'
294
- }
355
+ message: 'Fulfill this FO, please.',
356
+ },
295
357
  }
296
- fake 'fulfillment_orders',
358
+ fake(
359
+ 'fulfillment_orders',
297
360
  url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request.json",
298
- :method => :post,
299
- :request_body => ActiveSupport::JSON.encode(request_body),
300
- :body => ActiveSupport::JSON.encode(body)
301
-
361
+ method: :post,
362
+ request_body: ActiveSupport::JSON.encode(request_body),
363
+ body: ActiveSupport::JSON.encode(body)
364
+ )
302
365
  fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
303
366
  params = {
304
367
  fulfillment_order_line_items: [{ id: 1, quantity: 1 }],
305
- message: "Fulfill this FO, please."
368
+ message: "Fulfill this FO, please.",
306
369
  }
307
370
  response_fulfillment_orders = fulfillment_order.request_fulfillment(params)
308
371
 
309
- assert_equal 'closed', fulfillment_order.status
310
- assert_equal 3, response_fulfillment_orders.size
372
+ assert_equal('closed', fulfillment_order.status)
373
+ assert_equal(3, response_fulfillment_orders.size)
311
374
 
312
375
  original_fulfillment_order = response_fulfillment_orders['original_fulfillment_order']
313
- assert_equal 519788021, original_fulfillment_order.id
314
- assert_equal 'closed', original_fulfillment_order.status
376
+ assert_equal(519788021, original_fulfillment_order.id)
377
+ assert_equal('closed', original_fulfillment_order.status)
315
378
 
316
379
  submitted_fulfillment_order = response_fulfillment_orders['submitted_fulfillment_order']
317
- assert_equal 2, submitted_fulfillment_order.id
318
- assert_equal 'open', submitted_fulfillment_order.status
319
- assert_equal 'submitted', submitted_fulfillment_order.request_status
380
+ assert_equal(2, submitted_fulfillment_order.id)
381
+ assert_equal('open', submitted_fulfillment_order.status)
382
+ assert_equal('submitted', submitted_fulfillment_order.request_status)
320
383
 
321
- assert_nil response_fulfillment_orders['unsubmitted_fulfillment_order']
384
+ assert_nil(response_fulfillment_orders['unsubmitted_fulfillment_order'])
322
385
  end
323
386
  end
324
387
 
@@ -329,23 +392,24 @@ class FulFillmentOrderTest < Test::Unit::TestCase
329
392
  message = "LGTM. Accept this FO fulfillment request"
330
393
  request_body = {
331
394
  'fulfillment_request' => {
332
- 'message' => message
333
- }
395
+ 'message' => message,
396
+ },
334
397
  }
335
398
  fake_response = {
336
- fulfillment_order: fulfillment_order.attributes.merge(status: 'in_progress', request_status: 'accepted')
399
+ fulfillment_order: fulfillment_order.attributes.merge(status: 'in_progress', request_status: 'accepted'),
337
400
  }
338
- fake 'fulfillment_orders',
401
+ fake(
402
+ 'fulfillment_orders',
339
403
  url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request/accept.json",
340
- :method => :post,
341
- :request_body => ActiveSupport::JSON.encode(request_body),
342
- :body => ActiveSupport::JSON.encode(fake_response)
343
-
404
+ method: :post,
405
+ request_body: ActiveSupport::JSON.encode(request_body),
406
+ body: ActiveSupport::JSON.encode(fake_response)
407
+ )
344
408
  accepted = fulfillment_order.accept_fulfillment_request(message: message)
345
409
 
346
- assert_equal true, accepted
347
- assert_equal 'in_progress', fulfillment_order.status
348
- assert_equal 'accepted', fulfillment_order.request_status
410
+ assert_equal(true, accepted)
411
+ assert_equal('in_progress', fulfillment_order.status)
412
+ assert_equal('accepted', fulfillment_order.request_status)
349
413
  end
350
414
  end
351
415
 
@@ -356,23 +420,24 @@ class FulFillmentOrderTest < Test::Unit::TestCase
356
420
  message = "LBTM. Reject this FO fulfillment request"
357
421
  request_body = {
358
422
  'fulfillment_request' => {
359
- 'message' => message
360
- }
423
+ 'message' => message,
424
+ },
361
425
  }
362
426
  fake_response = {
363
- fulfillment_order: fulfillment_order.attributes.merge(status: 'open', request_status: 'rejected')
427
+ fulfillment_order: fulfillment_order.attributes.merge(status: 'open', request_status: 'rejected'),
364
428
  }
365
- fake 'fulfillment_orders',
429
+ fake(
430
+ 'fulfillment_orders',
366
431
  url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request/reject.json",
367
- :method => :post,
368
- :request_body => ActiveSupport::JSON.encode(request_body),
369
- :body => ActiveSupport::JSON.encode(fake_response)
370
-
432
+ method: :post,
433
+ request_body: ActiveSupport::JSON.encode(request_body),
434
+ body: ActiveSupport::JSON.encode(fake_response)
435
+ )
371
436
  rejected = fulfillment_order.reject_fulfillment_request(message: message)
372
437
 
373
- assert_equal true, rejected
374
- assert_equal 'open', fulfillment_order.status
375
- assert_equal 'rejected', fulfillment_order.request_status
438
+ assert_equal(true, rejected)
439
+ assert_equal('open', fulfillment_order.status)
440
+ assert_equal('rejected', fulfillment_order.request_status)
376
441
  end
377
442
  end
378
443
 
@@ -383,23 +448,24 @@ class FulFillmentOrderTest < Test::Unit::TestCase
383
448
  message = "Cancelling this please."
384
449
  request_body = {
385
450
  'cancellation_request' => {
386
- 'message' => message
387
- }
451
+ 'message' => message,
452
+ },
388
453
  }
389
454
  cancelling = ActiveSupport::JSON.decode(load_fixture('fulfillment_order'))
390
455
  cancelling['status'] = 'in_progress'
391
456
  cancelling['request_status'] = 'cancellation_requested'
392
- fake 'fulfillment_orders',
457
+ fake(
458
+ 'fulfillment_orders',
393
459
  url: "#{@url_prefix}/fulfillment_orders/519788021/cancellation_request.json",
394
- :method => :post,
395
- :request_body => ActiveSupport::JSON.encode(request_body),
396
- :body => ActiveSupport::JSON.encode({ fulfillment_order: cancelling })
397
-
460
+ method: :post,
461
+ request_body: ActiveSupport::JSON.encode(request_body),
462
+ body: ActiveSupport::JSON.encode({ fulfillment_order: cancelling })
463
+ )
398
464
  cancelled = fulfillment_order.request_cancellation(message: "Cancelling this please.")
399
465
 
400
- assert_equal true, cancelled
401
- assert_equal 'in_progress', fulfillment_order.status
402
- assert_equal 'cancellation_requested', fulfillment_order.request_status
466
+ assert_equal(true, cancelled)
467
+ assert_equal('in_progress', fulfillment_order.status)
468
+ assert_equal('cancellation_requested', fulfillment_order.request_status)
403
469
  end
404
470
  end
405
471
 
@@ -410,24 +476,25 @@ class FulFillmentOrderTest < Test::Unit::TestCase
410
476
  message = 'Already in-progress. Reject this FO cancellation request'
411
477
  request_body = {
412
478
  'cancellation_request' => {
413
- 'message' => message
414
- }
479
+ 'message' => message,
480
+ },
415
481
  }
416
482
  fake_response = {
417
483
  fulfillment_order: fulfillment_order.attributes.merge(status: 'cancelled',
418
- request_status: 'cancellation_accepted')
484
+ request_status: 'cancellation_accepted'),
419
485
  }
420
- fake 'fulfillment_orders',
486
+ fake(
487
+ 'fulfillment_orders',
421
488
  url: "#{@url_prefix}/fulfillment_orders/519788021/cancellation_request/accept.json",
422
- :method => :post,
423
- :request_body => ActiveSupport::JSON.encode(request_body),
424
- :body => ActiveSupport::JSON.encode(fake_response)
425
-
489
+ method: :post,
490
+ request_body: ActiveSupport::JSON.encode(request_body),
491
+ body: ActiveSupport::JSON.encode(fake_response)
492
+ )
426
493
  accepted = fulfillment_order.accept_cancellation_request(message: message)
427
494
 
428
- assert_equal true, accepted
429
- assert_equal 'cancelled', fulfillment_order.status
430
- assert_equal 'cancellation_accepted', fulfillment_order.request_status
495
+ assert_equal(true, accepted)
496
+ assert_equal('cancelled', fulfillment_order.status)
497
+ assert_equal('cancellation_accepted', fulfillment_order.request_status)
431
498
  end
432
499
  end
433
500
 
@@ -438,24 +505,25 @@ class FulFillmentOrderTest < Test::Unit::TestCase
438
505
  message = "Already in-progress. Reject this FO cancellation request"
439
506
  request_body = {
440
507
  'cancellation_request' => {
441
- 'message' => message
442
- }
508
+ 'message' => message,
509
+ },
443
510
  }
444
511
  fake_response = {
445
512
  fulfillment_order: fulfillment_order.attributes.merge(status: 'in_progress',
446
- request_status: 'cancellation_rejected')
513
+ request_status: 'cancellation_rejected'),
447
514
  }
448
- fake 'fulfillment_orders',
515
+ fake(
516
+ 'fulfillment_orders',
449
517
  url: "#{@url_prefix}/fulfillment_orders/519788021/cancellation_request/reject.json",
450
- :method => :post,
451
- :request_body => request_body,
452
- :body => ActiveSupport::JSON.encode(fake_response)
453
-
518
+ method: :post,
519
+ request_body: request_body,
520
+ body: ActiveSupport::JSON.encode(fake_response)
521
+ )
454
522
  rejected = fulfillment_order.reject_cancellation_request(message: message)
455
523
 
456
- assert_equal true, rejected
457
- assert_equal 'in_progress', fulfillment_order.status
458
- assert_equal 'cancellation_rejected', fulfillment_order.request_status
524
+ assert_equal(true, rejected)
525
+ assert_equal('in_progress', fulfillment_order.status)
526
+ assert_equal('cancellation_rejected', fulfillment_order.request_status)
459
527
  end
460
528
  end
461
529
  end