shopify_api 4.9.0 → 9.4.1

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 (281) hide show
  1. checksums.yaml +5 -5
  2. data/.github/CODEOWNERS +1 -0
  3. data/.github/ISSUE_TEMPLATE.md +36 -0
  4. data/.github/probots.yml +2 -0
  5. data/.github/workflows/build.yml +41 -0
  6. data/.gitignore +5 -1
  7. data/.rubocop.yml +28 -0
  8. data/.rubocop_todo.yml +75 -0
  9. data/CHANGELOG.md +491 -0
  10. data/CONTRIBUTING.md +1 -1
  11. data/Gemfile +6 -2
  12. data/Gemfile.lock +151 -0
  13. data/Gemfile_ar41 +5 -0
  14. data/Gemfile_ar50 +5 -0
  15. data/Gemfile_ar51 +5 -0
  16. data/Gemfile_ar_master +0 -1
  17. data/README.md +492 -100
  18. data/RELEASING +10 -9
  19. data/Rakefile +21 -5
  20. data/SECURITY.md +59 -0
  21. data/docker-compose.yml +13 -0
  22. data/docs/_config.yml +1 -0
  23. data/docs/_includes/footer.html +28 -0
  24. data/docs/_includes/head.html +28 -0
  25. data/docs/_layouts/index.html +57 -0
  26. data/docs/graphql.md +241 -0
  27. data/docs/index.md +639 -0
  28. data/lib/active_resource/connection_ext.rb +1 -0
  29. data/lib/active_resource/detailed_log_subscriber.rb +43 -7
  30. data/lib/active_resource/json_errors.rb +8 -2
  31. data/lib/shopify_api.rb +16 -6
  32. data/lib/shopify_api/api_access.rb +57 -0
  33. data/lib/shopify_api/api_version.rb +206 -0
  34. data/lib/shopify_api/connection.rb +7 -4
  35. data/lib/shopify_api/countable.rb +3 -2
  36. data/lib/shopify_api/disable_prefix_check.rb +31 -0
  37. data/lib/shopify_api/events.rb +2 -1
  38. data/lib/shopify_api/graphql.rb +103 -0
  39. data/lib/shopify_api/graphql/http_client.rb +22 -0
  40. data/lib/shopify_api/graphql/railtie.rb +17 -0
  41. data/lib/shopify_api/graphql/task.rake +100 -0
  42. data/lib/shopify_api/limits.rb +9 -9
  43. data/lib/shopify_api/message_enricher.rb +25 -0
  44. data/lib/shopify_api/meta.rb +14 -0
  45. data/lib/shopify_api/metafields.rb +5 -4
  46. data/lib/shopify_api/paginated_collection.rb +69 -0
  47. data/lib/shopify_api/pagination_link_headers.rb +34 -0
  48. data/lib/shopify_api/resources.rb +3 -1
  49. data/lib/shopify_api/resources/abandoned_checkout.rb +7 -0
  50. data/lib/shopify_api/resources/access_scope.rb +10 -0
  51. data/lib/shopify_api/resources/access_token.rb +1 -0
  52. data/lib/shopify_api/resources/address.rb +1 -0
  53. data/lib/shopify_api/resources/announcement.rb +2 -1
  54. data/lib/shopify_api/resources/api_permission.rb +9 -0
  55. data/lib/shopify_api/resources/application_charge.rb +1 -0
  56. data/lib/shopify_api/resources/application_credit.rb +1 -0
  57. data/lib/shopify_api/resources/array_base.rb +13 -0
  58. data/lib/shopify_api/resources/article.rb +3 -2
  59. data/lib/shopify_api/resources/asset.rb +28 -23
  60. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +16 -0
  61. data/lib/shopify_api/resources/base.rb +101 -24
  62. data/lib/shopify_api/resources/billing_address.rb +2 -1
  63. data/lib/shopify_api/resources/blog.rb +2 -1
  64. data/lib/shopify_api/resources/carrier_service.rb +1 -0
  65. data/lib/shopify_api/resources/cart.rb +2 -1
  66. data/lib/shopify_api/resources/checkout.rb +27 -1
  67. data/lib/shopify_api/resources/collect.rb +2 -0
  68. data/lib/shopify_api/resources/collection.rb +14 -0
  69. data/lib/shopify_api/resources/collection_listing.rb +11 -1
  70. data/lib/shopify_api/resources/collection_publication.rb +10 -0
  71. data/lib/shopify_api/resources/comment.rb +20 -5
  72. data/lib/shopify_api/resources/country.rb +1 -0
  73. data/lib/shopify_api/resources/currency.rb +6 -0
  74. data/lib/shopify_api/resources/custom_collection.rb +7 -6
  75. data/lib/shopify_api/resources/customer.rb +2 -1
  76. data/lib/shopify_api/resources/customer_group.rb +1 -0
  77. data/lib/shopify_api/resources/{customer_invite_message.rb → customer_invite.rb} +1 -0
  78. data/lib/shopify_api/resources/customer_saved_search.rb +4 -1
  79. data/lib/shopify_api/resources/discount_code.rb +1 -0
  80. data/lib/shopify_api/resources/discount_code_batch.rb +34 -0
  81. data/lib/shopify_api/resources/draft_order.rb +1 -0
  82. data/lib/shopify_api/resources/draft_order_invoice.rb +1 -0
  83. data/lib/shopify_api/resources/event.rb +2 -0
  84. data/lib/shopify_api/resources/fulfillment.rb +46 -3
  85. data/lib/shopify_api/resources/fulfillment_event.rb +2 -1
  86. data/lib/shopify_api/resources/fulfillment_order.rb +151 -0
  87. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +5 -0
  88. data/lib/shopify_api/resources/fulfillment_request.rb +1 -0
  89. data/lib/shopify_api/resources/fulfillment_service.rb +1 -0
  90. data/lib/shopify_api/resources/fulfillment_v2.rb +21 -0
  91. data/lib/shopify_api/resources/gift_card.rb +1 -0
  92. data/lib/shopify_api/resources/image.rb +4 -3
  93. data/lib/shopify_api/resources/inventory_item.rb +6 -0
  94. data/lib/shopify_api/resources/inventory_level.rb +54 -0
  95. data/lib/shopify_api/resources/line_item.rb +10 -1
  96. data/lib/shopify_api/resources/location.rb +4 -0
  97. data/lib/shopify_api/resources/marketing_event.rb +3 -0
  98. data/lib/shopify_api/resources/metafield.rb +2 -0
  99. data/lib/shopify_api/resources/note_attribute.rb +1 -0
  100. data/lib/shopify_api/resources/option.rb +1 -0
  101. data/lib/shopify_api/resources/order.rb +25 -5
  102. data/lib/shopify_api/resources/order_risk.rb +1 -0
  103. data/lib/shopify_api/resources/page.rb +1 -0
  104. data/lib/shopify_api/resources/payment.rb +7 -0
  105. data/lib/shopify_api/resources/payment_details.rb +1 -0
  106. data/lib/shopify_api/resources/ping.rb +3 -0
  107. data/lib/shopify_api/resources/policy.rb +1 -0
  108. data/lib/shopify_api/resources/price_rule.rb +1 -1
  109. data/lib/shopify_api/resources/product.rb +33 -7
  110. data/lib/shopify_api/resources/product_listing.rb +9 -1
  111. data/lib/shopify_api/resources/product_publication.rb +10 -0
  112. data/lib/shopify_api/resources/province.rb +1 -0
  113. data/lib/shopify_api/resources/publication.rb +5 -0
  114. data/lib/shopify_api/resources/receipt.rb +1 -0
  115. data/lib/shopify_api/resources/recurring_application_charge.rb +4 -1
  116. data/lib/shopify_api/resources/redirect.rb +1 -0
  117. data/lib/shopify_api/resources/refund.rb +6 -4
  118. data/lib/shopify_api/resources/report.rb +1 -0
  119. data/lib/shopify_api/resources/resource_feedback.rb +1 -1
  120. data/lib/shopify_api/resources/rule.rb +1 -0
  121. data/lib/shopify_api/resources/script_tag.rb +1 -0
  122. data/lib/shopify_api/resources/shipping_address.rb +1 -0
  123. data/lib/shopify_api/resources/shipping_line.rb +2 -1
  124. data/lib/shopify_api/resources/shipping_rate.rb +7 -0
  125. data/lib/shopify_api/resources/shipping_zone.rb +1 -0
  126. data/lib/shopify_api/resources/shop.rb +10 -7
  127. data/lib/shopify_api/resources/smart_collection.rb +3 -3
  128. data/lib/shopify_api/resources/storefront_access_token.rb +1 -0
  129. data/lib/shopify_api/resources/tax_line.rb +1 -0
  130. data/lib/shopify_api/resources/tax_service.rb +1 -0
  131. data/lib/shopify_api/resources/tender_transaction.rb +6 -0
  132. data/lib/shopify_api/resources/theme.rb +1 -0
  133. data/lib/shopify_api/resources/transaction.rb +1 -0
  134. data/lib/shopify_api/resources/usage_charge.rb +1 -0
  135. data/lib/shopify_api/resources/user.rb +1 -0
  136. data/lib/shopify_api/resources/variant.rb +35 -0
  137. data/lib/shopify_api/resources/webhook.rb +1 -0
  138. data/lib/shopify_api/session.rb +109 -45
  139. data/lib/shopify_api/version.rb +2 -1
  140. data/lib/verify_docs.rb +8 -0
  141. data/service.yml +8 -0
  142. data/shopify_api.gemspec +19 -8
  143. data/test/abandoned_checkouts_test.rb +29 -0
  144. data/test/access_scope_test.rb +23 -0
  145. data/test/access_token_test.rb +6 -5
  146. data/test/active_resource/json_errors_test.rb +6 -6
  147. data/test/api_access_test.rb +153 -0
  148. data/test/api_permission_test.rb +9 -0
  149. data/test/api_version_test.rb +157 -0
  150. data/test/application_charge_test.rb +30 -27
  151. data/test/application_credit_test.rb +10 -9
  152. data/test/article_test.rb +34 -35
  153. data/test/asset_test.rb +14 -6
  154. data/test/assigned_fulfillment_order_test.rb +78 -0
  155. data/test/base_test.rb +147 -59
  156. data/test/blog_test.rb +4 -3
  157. data/test/carrier_service_test.rb +7 -6
  158. data/test/cart_test.rb +2 -1
  159. data/test/checkouts_test.rb +72 -4
  160. data/test/collect_test.rb +4 -3
  161. data/test/collection_listing_test.rb +56 -13
  162. data/test/collection_publication_test.rb +40 -0
  163. data/test/collection_test.rb +50 -0
  164. data/test/countable_test.rb +3 -2
  165. data/test/currency_test.rb +21 -0
  166. data/test/custom_collection_test.rb +4 -3
  167. data/test/customer_saved_search_test.rb +18 -8
  168. data/test/customer_test.rb +22 -14
  169. data/test/detailed_log_subscriber_test.rb +113 -19
  170. data/test/discount_code_batch_test.rb +41 -0
  171. data/test/discount_code_test.rb +22 -16
  172. data/test/draft_order_test.rb +68 -52
  173. data/test/fixtures/abandoned_checkout.json +184 -0
  174. data/test/fixtures/abandoned_checkouts.json +186 -0
  175. data/test/fixtures/access_scopes.json +10 -0
  176. data/test/fixtures/api_versions.json +38 -0
  177. data/test/fixtures/apis.json +42 -0
  178. data/test/fixtures/assigned_fulfillment_orders.json +80 -0
  179. data/test/fixtures/checkout.json +160 -0
  180. data/test/fixtures/checkouts.json +25 -49
  181. data/test/fixtures/collection.json +17 -0
  182. data/test/fixtures/collection_listing_product_ids2.json +1 -0
  183. data/test/fixtures/collection_products.json +47 -0
  184. data/test/fixtures/collection_publication.json +11 -0
  185. data/test/fixtures/collection_publications.json +13 -0
  186. data/test/fixtures/currencies.json +25 -0
  187. data/test/fixtures/discount_code_batch.json +14 -0
  188. data/test/fixtures/discount_code_batch_discount_codes.json +21 -0
  189. data/test/fixtures/fulfillment_order.json +39 -0
  190. data/test/fixtures/fulfillment_order_locations_for_move.json +18 -0
  191. data/test/fixtures/fulfillment_orders.json +80 -0
  192. data/test/fixtures/fulfillments.json +53 -0
  193. data/test/fixtures/graphql/2019-10.json +1083 -0
  194. data/test/fixtures/graphql/dummy_schema.rb +16 -0
  195. data/test/fixtures/graphql/unstable.json +1083 -0
  196. data/test/fixtures/inventory_level.json +7 -0
  197. data/test/fixtures/inventory_levels.json +24 -0
  198. data/test/fixtures/order_with_properties.json +373 -0
  199. data/test/fixtures/payment.json +7 -0
  200. data/test/fixtures/payments.json +9 -0
  201. data/test/fixtures/ping/conversation.json +1 -0
  202. data/test/fixtures/ping/failed_delivery_confirmation.json +1 -0
  203. data/test/fixtures/ping/message.json +1 -0
  204. data/test/fixtures/ping/successful_delivery_confirmation.json +1 -0
  205. data/test/fixtures/product_listing_product_ids.json +1 -1
  206. data/test/fixtures/product_listing_product_ids2.json +1 -0
  207. data/test/fixtures/product_publication.json +11 -0
  208. data/test/fixtures/product_publications.json +13 -0
  209. data/test/fixtures/publications.json +9 -0
  210. data/test/fixtures/shipping_rates.json +12 -0
  211. data/test/fixtures/smart_collection_products.json +155 -0
  212. data/test/fixtures/tender_transactions.json +52 -0
  213. data/test/fulfillment_event_test.rb +31 -26
  214. data/test/fulfillment_order_test.rb +530 -0
  215. data/test/fulfillment_order_test_helper.rb +8 -0
  216. data/test/fulfillment_request_test.rb +10 -8
  217. data/test/fulfillment_service_test.rb +13 -12
  218. data/test/fulfillment_test.rb +198 -20
  219. data/test/fulfillment_v2_test.rb +66 -0
  220. data/test/gift_card_test.rb +6 -4
  221. data/test/graphql/http_client_test.rb +26 -0
  222. data/test/graphql_test.rb +190 -0
  223. data/test/image_test.rb +19 -17
  224. data/test/inventory_level_test.rb +68 -0
  225. data/test/lib/webmock_extensions/last_request.rb +16 -0
  226. data/test/limits_test.rb +4 -3
  227. data/test/location_test.rb +15 -0
  228. data/test/marketing_event_test.rb +21 -21
  229. data/test/message_enricher_test.rb +45 -0
  230. data/test/meta_test.rb +47 -0
  231. data/test/metafield_test.rb +30 -20
  232. data/test/order_risk_test.rb +17 -16
  233. data/test/order_test.rb +110 -17
  234. data/test/pagination_test.rb +290 -0
  235. data/test/payment_test.rb +19 -0
  236. data/test/policy_test.rb +6 -5
  237. data/test/price_rule_test.rb +20 -15
  238. data/test/product_listing_test.rb +72 -15
  239. data/test/product_publication_test.rb +40 -0
  240. data/test/product_test.rb +80 -19
  241. data/test/publication_test.rb +12 -0
  242. data/test/recurring_application_charge_test.rb +105 -50
  243. data/test/redirect_test.rb +4 -3
  244. data/test/refund_test.rb +22 -17
  245. data/test/report_test.rb +12 -10
  246. data/test/resource_feedback_test.rb +14 -13
  247. data/test/script_tag_test.rb +10 -9
  248. data/test/session_test.rb +497 -111
  249. data/test/shipping_rate_test.rb +17 -0
  250. data/test/shipping_zone_test.rb +4 -3
  251. data/test/shop_test.rb +47 -33
  252. data/test/smart_collection_test.rb +5 -4
  253. data/test/storefront_access_token_test.rb +13 -15
  254. data/test/tax_service_test.rb +7 -3
  255. data/test/tender_transaction_test.rb +18 -0
  256. data/test/test_helper.rb +98 -67
  257. data/test/transaction_test.rb +4 -3
  258. data/test/usage_charge_test.rb +12 -8
  259. data/test/user_test.rb +4 -3
  260. data/test/variant_test.rb +50 -20
  261. data/test/webhook_test.rb +10 -7
  262. metadata +196 -37
  263. data/.travis.yml +0 -36
  264. data/CHANGELOG +0 -292
  265. data/Gemfile_ar30 +0 -6
  266. data/Gemfile_ar31 +0 -6
  267. data/Gemfile_ar32 +0 -6
  268. data/Gemfile_ar40 +0 -6
  269. data/bin/shopify +0 -3
  270. data/lib/active_resource/base_ext.rb +0 -21
  271. data/lib/active_resource/disable_prefix_check.rb +0 -36
  272. data/lib/active_resource/to_query.rb +0 -10
  273. data/lib/shopify_api/json_format.rb +0 -18
  274. data/lib/shopify_api/resources/discount.rb +0 -11
  275. data/lib/shopify_api/resources/o_auth.rb +0 -9
  276. data/test/discount_test.rb +0 -52
  277. data/test/fixtures/discount.json +0 -17
  278. data/test/fixtures/discount_disabled.json +0 -17
  279. data/test/fixtures/discounts.json +0 -34
  280. data/test/fixtures/o_auth_revoke.json +0 -5
  281. data/test/o_auth_test.rb +0 -8
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class ShippingRateTest < Test::Unit::TestCase
6
+ test ":get lists all shipping rates for a given checkout" do
7
+ fake 'checkouts', method: :get, status: 200, body: load_fixture('checkouts')
8
+ checkouts = ShopifyAPI::Checkout.all
9
+
10
+ fake "checkouts/#{checkouts.first.id}/shipping_rates",
11
+ method: :get, status: 200, body: load_fixture('checkouts')
12
+ shipping_rates = ShopifyAPI::ShippingRate.find(:all, params: { checkout_id: checkouts.first.id })
13
+
14
+ assert_equal 2, shipping_rates.first.shipping_rates.length
15
+ assert_equal 'canada_post-INT.TP.BOGUS-4.00', shipping_rates.first.shipping_rates.first.id
16
+ end
17
+ end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class ShippingZoneTest < Test::Unit::TestCase
4
5
  test "get all should get all shipping zones" do
5
- fake 'shipping_zones', :method => :get, :status => 200, :body => load_fixture('shipping_zones')
6
+ fake('shipping_zones', method: :get, status: 200, body: load_fixture('shipping_zones'))
6
7
  checkout = ShopifyAPI::ShippingZone.all
7
- assert_equal 1, checkout.first.id
8
- assert_equal "Canada", checkout.first.name
8
+ assert_equal(1, checkout.first.id)
9
+ assert_equal("Canada", checkout.first.name)
9
10
  end
10
11
  end
data/test/shop_test.rb CHANGED
@@ -1,68 +1,82 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class ShopTest < Test::Unit::TestCase
4
5
  def setup
5
6
  super
6
- fake "shop"
7
+ fake("shop")
7
8
  @shop = ShopifyAPI::Shop.current
8
9
  end
9
10
 
10
11
  def test_current_should_return_current_shop
11
- assert @shop.is_a?(ShopifyAPI::Shop)
12
- assert_equal "Apple Computers", @shop.name
13
- assert_equal "apple.myshopify.com", @shop.myshopify_domain
14
- assert_equal 690933842, @shop.id
15
- assert_equal "2007-12-31T19:00:00-05:00", @shop.created_at
16
- assert_nil @shop.tax_shipping
12
+ assert(@shop.is_a?(ShopifyAPI::Shop))
13
+ assert_equal("Apple Computers", @shop.name)
14
+ assert_equal("apple.myshopify.com", @shop.myshopify_domain)
15
+ assert_equal(690933842, @shop.id)
16
+ assert_equal("2007-12-31T19:00:00-05:00", @shop.created_at)
17
+ assert_nil(@shop.tax_shipping)
17
18
  end
18
19
 
19
20
  def test_current_with_options_should_return_current_shop
20
- fake "shop.json?fields%5B%5D=name&fields%5B%5D=myshopify_domain", :extension => false, :method => :get, :status => 201, :body => load_fixture('shop')
21
-
22
- @shop = ShopifyAPI::Shop.current(params: { fields: [:name, :myshopify_domain]})
23
- assert @shop.is_a?(ShopifyAPI::Shop)
24
- assert_equal "Apple Computers", @shop.name
25
- assert_equal "apple.myshopify.com", @shop.myshopify_domain
21
+ fake(
22
+ "shop.json?fields%5B%5D=name&fields%5B%5D=myshopify_domain",
23
+ extension: false,
24
+ method: :get,
25
+ status: 201,
26
+ body: load_fixture('shop')
27
+ )
28
+
29
+ @shop = ShopifyAPI::Shop.current(params: { fields: [:name, :myshopify_domain] })
30
+ assert(@shop.is_a?(ShopifyAPI::Shop))
31
+ assert_equal("Apple Computers", @shop.name)
32
+ assert_equal("apple.myshopify.com", @shop.myshopify_domain)
26
33
  end
27
34
 
28
35
  def test_get_all_metafields_for_shop
29
- fake "metafields"
36
+ fake("metafields")
30
37
 
31
38
  metafields = @shop.metafields
32
39
 
33
- assert_equal 3, metafields.length
34
- assert metafields.all?{|m| m.is_a?(ShopifyAPI::Metafield)}
40
+ assert_equal(3, metafields.length)
41
+ assert(metafields.all? { |m| m.is_a?(ShopifyAPI::Metafield) })
35
42
  end
36
43
 
37
44
  def test_get_2_metafields_for_shop
38
- body = ActiveSupport::JSON.decode load_fixture 'metafields'
39
- body['metafields'].slice! 2, 1
45
+ body = ActiveSupport::JSON.decode(load_fixture('metafields'))
46
+ body['metafields'].slice!(2, 1)
40
47
 
41
- fake 'metafields.json?limit=2', body: body.to_json, extension: false
48
+ fake('metafields.json?limit=2', body: body.to_json, extension: false)
42
49
 
43
- metafields = @shop.metafields limit: 2
50
+ metafields = @shop.metafields(limit: 2)
44
51
 
45
- assert_equal 2, metafields.length
46
- assert metafields.all?{ |m| m.is_a? ShopifyAPI::Metafield }
52
+ assert_equal(2, metafields.length)
53
+ assert(metafields.all? { |m| m.is_a?(ShopifyAPI::Metafield) })
47
54
  end
48
55
 
49
56
  def test_add_metafield
50
- fake "metafields", :method => :post, :status => 201, :body =>load_fixture('metafield')
51
-
52
- field = @shop.add_metafield(ShopifyAPI::Metafield.new(:namespace => "contact", :key => "email", :value => "123@example.com", :value_type => "string"))
53
- assert_equal ActiveSupport::JSON.decode('{"metafield":{"namespace":"contact","key":"email","value":"123@example.com","value_type":"string"}}'), ActiveSupport::JSON.decode(FakeWeb.last_request.body)
54
- assert !field.new_record?
55
- assert_equal "contact", field.namespace
56
- assert_equal "email", field.key
57
- assert_equal "123@example.com", field.value
57
+ fake("metafields", method: :post, status: 201, body: load_fixture('metafield'))
58
+
59
+ field = @shop.add_metafield(
60
+ ShopifyAPI::Metafield.new(namespace: "contact", key: "email", value: "123@example.com", value_type: "string")
61
+ )
62
+ assert_equal(
63
+ ActiveSupport::JSON.decode(
64
+ '{"metafield":{"namespace":"contact","key":"email","value":"123@example.com","value_type":"string"}}'
65
+ ),
66
+ ActiveSupport::JSON.decode(WebMock.last_request.body)
67
+ )
68
+ assert(!field.new_record?)
69
+ assert_equal("contact", field.namespace)
70
+ assert_equal("email", field.key)
71
+ assert_equal("123@example.com", field.value)
58
72
  end
59
73
 
60
74
  def test_events
61
- fake "events"
75
+ fake("events")
62
76
 
63
77
  events = @shop.events
64
78
 
65
- assert_equal 3, events.length
66
- assert events.all?{|m| m.is_a?(ShopifyAPI::Event)}
79
+ assert_equal(3, events.length)
80
+ assert(events.all? { |m| m.is_a?(ShopifyAPI::Event) })
67
81
  end
68
82
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class SmartCollectionTest < Test::Unit::TestCase
4
5
  test "Smart Collection creation" do
5
- fake "smart_collections", :method => :post, :status => 201, :body => load_fixture('smart_collection')
6
- rules = { :column => "title", :relation => "starts_with", :condition => "mac" }
7
- smart_collection = ShopifyAPI::SmartCollection.create(:title => "Macbooks", :rules => rules)
8
- assert_equal 1063001432, smart_collection.id
6
+ fake("smart_collections", method: :post, status: 201, body: load_fixture('smart_collection'))
7
+ rules = { column: "title", relation: "starts_with", condition: "mac" }
8
+ smart_collection = ShopifyAPI::SmartCollection.create(title: "Macbooks", rules: rules)
9
+ assert_equal(1063001432, smart_collection.id)
9
10
  end
10
11
  end
@@ -1,32 +1,30 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class StorefrontAccessTokenTest < Test::Unit::TestCase
4
-
5
5
  def test_create_storefront_access_token
6
- fake "storefront_access_tokens", :method => :post, :body => load_fixture('storefront_access_token')
6
+ fake("storefront_access_tokens", method: :post, body: load_fixture('storefront_access_token'))
7
7
  storefront_access_token = ShopifyAPI::StorefrontAccessToken.create(title: 'Test')
8
- assert_equal 1, storefront_access_token.id
9
- assert_equal "Test", storefront_access_token.title
8
+ assert_equal(1, storefront_access_token.id)
9
+ assert_equal("Test", storefront_access_token.title)
10
10
  end
11
11
 
12
12
  def test_delete_storefront_access_token
13
- fake 'storefront_access_tokens/1', method: :get, status: 200, body: load_fixture('storefront_access_token')
14
- fake 'storefront_access_tokens/1', method: :delete, status: 200, body: 'destroyed'
15
-
13
+ fake('storefront_access_tokens/1', method: :get, status: 200, body: load_fixture('storefront_access_token'))
14
+ fake('storefront_access_tokens/1', method: :delete, status: 200, body: 'destroyed')
16
15
  storefront_access_tokens = ShopifyAPI::StorefrontAccessToken.find(1)
17
- assert storefront_access_tokens.destroy
16
+ assert(storefront_access_tokens.destroy)
18
17
  end
19
18
 
20
19
  def test_get_storefront_access_tokens
21
- fake "storefront_access_tokens", method: :get, status: 201, body: load_fixture('storefront_access_tokens')
20
+ fake("storefront_access_tokens", method: :get, status: 201, body: load_fixture('storefront_access_tokens'))
22
21
 
23
22
  tokens = ShopifyAPI::StorefrontAccessToken.all
24
23
 
25
- assert_equal 2, tokens.size
26
- assert_equal 1, tokens.first.id
27
- assert_equal 2, tokens.last.id
28
- assert_equal 'Test 1', tokens.first.title
29
- assert_equal 'Test 2', tokens.last.title
24
+ assert_equal(2, tokens.size)
25
+ assert_equal(1, tokens.first.id)
26
+ assert_equal(2, tokens.last.id)
27
+ assert_equal('Test 1', tokens.first.title)
28
+ assert_equal('Test 2', tokens.last.title)
30
29
  end
31
-
32
30
  end
@@ -1,8 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
  class TaxServiceTest < Test::Unit::TestCase
3
4
  test "tax service creation" do
4
- fake "tax_services", :method => :post, :status => 202, :body => load_fixture('tax_service')
5
- tax_service = ShopifyAPI::TaxService.create(:name => "My Tax Service", :url => "https://mytaxservice.com")
6
- assert_equal '{"tax_service":{"name":"My Tax Service","url":"https://mytaxservice.com"}}', FakeWeb.last_request.body
5
+ fake("tax_services", method: :post, status: 202, body: load_fixture('tax_service'))
6
+ ShopifyAPI::TaxService.create(name: "My Tax Service", url: "https://mytaxservice.com")
7
+ assert_equal(
8
+ '{"tax_service":{"name":"My Tax Service","url":"https://mytaxservice.com"}}',
9
+ WebMock.last_request.body
10
+ )
7
11
  end
8
12
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class TenderTransactionTest < Test::Unit::TestCase
6
+ def setup
7
+ super
8
+ fake("tender_transactions", method: :get, body: load_fixture('tender_transactions'))
9
+ end
10
+
11
+ context "Tender Transaction" do
12
+ should 'return a list of transactions' do
13
+ tender_transactions = ShopifyAPI::TenderTransaction.all
14
+ assert_equal(3, tender_transactions.length)
15
+ assert_equal([1, 2, 3], tender_transactions.map(&:id))
16
+ end
17
+ end
18
+ end
data/test/test_helper.rb CHANGED
@@ -1,95 +1,126 @@
1
+ # frozen_string_literal: true
1
2
  require 'rubygems'
2
3
  require 'minitest/autorun'
3
- require 'fakeweb'
4
- require 'mocha/setup'
4
+ require 'webmock/minitest'
5
+ require_relative 'lib/webmock_extensions/last_request'
6
+ require 'mocha/minitest'
7
+ require 'pry'
5
8
 
6
9
  $LOAD_PATH.unshift(File.dirname(__FILE__))
7
10
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
- require 'shopify_api'
9
11
 
10
- FakeWeb.allow_net_connect = false
12
+ WebMock.disable_net_connect!
13
+ require 'shopify_api'
11
14
 
12
15
  # setup ShopifyAPI with fake api_key and secret
13
16
  module Test
14
17
  module Unit
15
- end
16
- end
17
-
18
- class Test::Unit::TestCase < Minitest::Unit::TestCase
19
- def self.test(string, &block)
20
- define_method("test_#{string}", &block)
21
- end
18
+ class TestCase < Minitest::Test
19
+ def self.test(string, &block)
20
+ define_method("test_#{string}", &block)
21
+ end
22
22
 
23
- def self.should(string, &block)
24
- self.test("should_#{string}", &block)
25
- end
23
+ def self.should(string, &block)
24
+ self.test("should_#{string}", &block)
25
+ end
26
26
 
27
- def self.context(string)
28
- yield
29
- end
27
+ def self.context(_string)
28
+ yield
29
+ end
30
30
 
31
- def setup
32
- ActiveResource::Base.format = :json
33
- ShopifyAPI.constants.each do |const|
34
- begin
35
- const = "ShopifyAPI::#{const}".constantize
36
- const.format = :json if const.respond_to?(:format=)
37
- rescue NameError
31
+ def setup
32
+ ActiveResource::Base.format = :json
33
+ ShopifyAPI.constants.each do |const|
34
+ begin
35
+ const = mod.const_get(const)
36
+ const.format = :json if const.respond_to?(:format=)
37
+ rescue NameError
38
+ # Do nothing
39
+ end
40
+ end
41
+
42
+ ShopifyAPI::Base.clear_session
43
+
44
+ fake("apis",
45
+ url: "https://app.shopify.com/services/apis.json",
46
+ method: :get,
47
+ status: 200,
48
+ api_version: :stub,
49
+ body: load_fixture('apis'))
50
+
51
+ ShopifyAPI::ApiVersion.fetch_known_versions
52
+ session = ShopifyAPI::Session.new(
53
+ domain: "https://this-is-my-test-shop.myshopify.com",
54
+ token: "token_test_helper",
55
+ api_version: '2019-01',
56
+ )
57
+
58
+ ShopifyAPI::Base.activate_session(session)
38
59
  end
39
- end
40
60
 
41
- ShopifyAPI::Base.clear_session
42
- ShopifyAPI::Base.site = "https://this-is-my-test-shop.myshopify.com/admin"
43
- ShopifyAPI::Base.password = nil
44
- ShopifyAPI::Base.user = nil
45
- end
61
+ def teardown
62
+ ShopifyAPI::Base.clear_session
63
+ ShopifyAPI::Base.site = nil
64
+ ShopifyAPI::Base.password = nil
65
+ ShopifyAPI::Base.user = nil
46
66
 
47
- def teardown
48
- FakeWeb.clean_registry
67
+ ShopifyAPI::ApiVersion.clear_known_versions
68
+ ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
69
+ end
49
70
 
50
- ShopifyAPI::Base.clear_session
51
- ShopifyAPI::Base.site = nil
52
- ShopifyAPI::Base.password = nil
53
- ShopifyAPI::Base.user = nil
54
- end
71
+ # Custom Assertions
72
+ def assert_not(expression)
73
+ refute(expression, "Expected <#{expression}> to be false!")
74
+ end
55
75
 
56
- # Custom Assertions
57
- def assert_not(expression)
58
- refute expression, "Expected <#{expression}> to be false!"
59
- end
76
+ def assert_nothing_raised
77
+ yield
78
+ end
60
79
 
61
- def assert_nothing_raised
62
- yield
63
- end
80
+ def assert_not_includes(array, value)
81
+ refute(array.include?(value))
82
+ end
64
83
 
65
- def assert_not_includes(array, value)
66
- refute array.include?(value)
67
- end
84
+ def assert_includes(array, value)
85
+ assert(array.include?(value))
86
+ end
68
87
 
69
- def assert_includes(array, value)
70
- assert array.include?(value)
71
- end
88
+ def load_fixture(name, format = :json)
89
+ File.read(File.dirname(__FILE__) + "/fixtures/#{name}.#{format}")
90
+ end
72
91
 
73
- def load_fixture(name, format=:json)
74
- File.read(File.dirname(__FILE__) + "/fixtures/#{name}.#{format}")
75
- end
92
+ def assert_request_body(expected)
93
+ assert_equal(expected, WebMock.last_request.body)
94
+ end
76
95
 
77
- def assert_request_body(expected)
78
- assert_equal expected, FakeWeb.last_request.body
79
- end
96
+ def fake(endpoint, options = {})
97
+ request_body = options.key?(:request_body) ? options.delete(:request_body) : nil
98
+ body = options.key?(:body) ? options.delete(:body) : load_fixture(endpoint)
99
+ format = options.delete(:format) || :json
100
+ method = options.delete(:method) || :get
101
+ api_version = options.delete(:api_version) || ShopifyAPI::ApiVersion.find_version('2019-01')
102
+ extension = ".#{options.delete(:extension) || 'json'}" unless options[:extension] == false
103
+ status = options.delete(:status) || 200
104
+ url = if options.key?(:url)
105
+ options[:url]
106
+ else
107
+ "https://this-is-my-test-shop.myshopify.com#{api_version.construct_api_path("#{endpoint}#{extension}")}"
108
+ end
109
+
110
+ stubbing = WebMock.stub_request(method, url)
111
+ stubbing = stubbing.with(body: request_body) if request_body
112
+ stubbing.to_return(
113
+ body: body, status: status, headers: { content_type: "text/#{format}", content_length: 1 }.merge(options)
114
+ )
115
+ end
80
116
 
81
- def fake(endpoint, options={})
82
- body = options.has_key?(:body) ? options.delete(:body) : load_fixture(endpoint)
83
- format = options.delete(:format) || :json
84
- method = options.delete(:method) || :get
85
- extension = ".#{options.delete(:extension)||'json'}" unless options[:extension]==false
117
+ def ar_version_before?(version_string)
118
+ Gem::Version.new(ActiveResource::VERSION::STRING) < Gem::Version.new(version_string)
119
+ end
86
120
 
87
- url = if options.has_key?(:url)
88
- options[:url]
89
- else
90
- "https://this-is-my-test-shop.myshopify.com/admin/#{endpoint}#{extension}"
121
+ def ar_version_after?(version_string)
122
+ Gem::Version.new(version_string) < Gem::Version.new(ActiveResource::VERSION::STRING)
123
+ end
91
124
  end
92
-
93
- FakeWeb.register_uri(method, url, {:body => body, :status => 200, :content_type => "text/#{format}", :content_length => 1}.merge(options))
94
125
  end
95
126
  end
@@ -1,16 +1,17 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class TransactionTest < Test::Unit::TestCase
4
5
  def setup
5
6
  super
6
- fake "orders/450789469/transactions/389404469", :method => :get, :body => load_fixture('transaction')
7
+ fake("orders/450789469/transactions/389404469", method: :get, body: load_fixture('transaction'))
7
8
  end
8
9
 
9
10
  context "Transaction" do
10
11
  context "#find" do
11
12
  should "find a specific transaction" do
12
- transaction = ShopifyAPI::Transaction.find(389404469, :params => {:order_id => 450789469})
13
- assert_equal "409.94", transaction.amount
13
+ transaction = ShopifyAPI::Transaction.find(389404469, params: { order_id: 450789469 })
14
+ assert_equal("409.94", transaction.amount)
14
15
  end
15
16
  end
16
17
  end