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
data/test/blog_test.rb CHANGED
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
  class BlogTest < Test::Unit::TestCase
3
4
  test "blog creation" do
4
- fake "blogs", :method => :post, :status => 202, :body => load_fixture('blog')
5
- blog = ShopifyAPI::Blog.create(:title => "Test Blog")
6
- assert_equal '{"blog":{"title":"Test Blog"}}', FakeWeb.last_request.body
5
+ fake("blogs", method: :post, status: 202, body: load_fixture('blog'))
6
+ ShopifyAPI::Blog.create(title: "Test Blog")
7
+ assert_equal('{"blog":{"title":"Test Blog"}}', WebMock.last_request.body)
7
8
  end
8
9
  end
@@ -1,17 +1,18 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CarrierServiceTest < Test::Unit::TestCase
4
5
  test 'new should create carrier service' do
5
- fake "carrier_services", :method => :post, :body => load_fixture('carrier_service')
6
- carrier_service = ShopifyAPI::CarrierService.new(:name => "Some Postal Service")
6
+ fake("carrier_services", method: :post, body: load_fixture('carrier_service'))
7
+ carrier_service = ShopifyAPI::CarrierService.new(name: "Some Postal Service")
7
8
  carrier_service.save
8
- assert_equal "Some Postal Service" , carrier_service.name
9
+ assert_equal("Some Postal Service", carrier_service.name)
9
10
  end
10
11
 
11
12
  test 'find should return the carrier service' do
12
- fake "carrier_services/123456", :method => :get, :body => load_fixture('carrier_service')
13
+ fake("carrier_services/123456", method: :get, body: load_fixture('carrier_service'))
13
14
  carrier_service = ShopifyAPI::CarrierService.find(123456)
14
- assert_equal 123456 , carrier_service.id
15
- assert_equal "Some Postal Service", carrier_service.name
15
+ assert_equal(123456, carrier_service.id)
16
+ assert_equal("Some Postal Service", carrier_service.name)
16
17
  end
17
18
  end
data/test/cart_test.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CartTest < Test::Unit::TestCase
@@ -10,4 +11,4 @@ class CartTest < Test::Unit::TestCase
10
11
  assert_equal 1, carts.first.line_items.size
11
12
  assert_equal 'test', carts.first.line_items.first.title
12
13
  end
13
- end
14
+ end
@@ -1,9 +1,77 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CheckoutsTest < Test::Unit::TestCase
4
- test "get all should get all orders" do
5
- fake 'checkouts', :method => :get, :status => 200, :body => load_fixture('checkouts')
6
- checkout = ShopifyAPI::Checkout.all
7
- assert_equal 450789469, checkout.first.id
5
+ def setup
6
+ super
7
+
8
+ @expected_checkouts = JSON.parse(load_fixture('checkouts'))['checkouts']
9
+ @expected_checkout_id = JSON.parse(load_fixture('checkout'))['checkout']['token']
10
+ end
11
+
12
+ test ".headers includes a version" do
13
+ assert_equal "2016-09-06", ShopifyAPI::Checkout.headers["X-Shopify-Checkout-Version"]
14
+ assert_nil ShopifyAPI::Base.headers["X-Shopify-Checkout-Version"]
15
+ end
16
+
17
+ test ":create creates a checkout" do
18
+ fake 'checkouts', method: :post, status: 201, body: load_fixture('checkout')
19
+
20
+ checkout = ShopifyAPI::Checkout.create
21
+
22
+ assert_equal @expected_checkout_id, checkout.id
23
+ end
24
+
25
+ test "get all checkouts indexed by token" do
26
+ fake 'checkouts', method: :get, status: 200, body: load_fixture('checkouts')
27
+
28
+ checkouts = ShopifyAPI::Checkout.all
29
+
30
+ assert_equal @expected_checkout_id, checkouts.first.id
31
+ assert_equal @expected_checkouts.size, checkouts.size
32
+ end
33
+
34
+ test ":complete completes a checkout" do
35
+ fake "checkouts/#{@expected_checkout_id}", method: :get, status: 200, body: load_fixture('checkout')
36
+
37
+ checkout = ShopifyAPI::Checkout.find(@expected_checkout_id)
38
+
39
+ fake "checkouts/#{@expected_checkout_id}/complete", method: :post, status: 200, body: load_fixture('checkouts')
40
+
41
+ checkout.complete
42
+ end
43
+
44
+ test ":ready? returns true when status is 201" do
45
+ fake "checkouts/#{@expected_checkout_id}", method: :get, status: 201, body: load_fixture('checkout')
46
+ checkout = ShopifyAPI::Checkout.find(@expected_checkout_id)
47
+
48
+ assert_predicate checkout, :ready?
49
+ end
50
+
51
+ test ":ready? returns false when status is 202" do
52
+ fake "checkouts/#{@expected_checkout_id}", method: :get, status: 202, body: load_fixture('checkout')
53
+ checkout = ShopifyAPI::Checkout.find(@expected_checkout_id)
54
+
55
+ refute_predicate checkout, :ready?
56
+ end
57
+
58
+ test ":payments returns payments for a checkout" do
59
+ fake "checkouts/#{@expected_checkout_id}", method: :get, status: 200, body: load_fixture('checkout')
60
+ checkout = ShopifyAPI::Checkout.find(@expected_checkout_id)
61
+
62
+ fake "checkouts/#{@expected_checkout_id}/payments", method: :get, status: 202, body: load_fixture('payments')
63
+
64
+ assert_equal 10.00, checkout.payments.first.amount
65
+ end
66
+
67
+ test ":shipping_rates returns shipping rates for a checkout" do
68
+ fake "checkouts/#{@expected_checkout_id}", method: :get, status: 200, body: load_fixture('checkout')
69
+ checkout = ShopifyAPI::Checkout.find(@expected_checkout_id)
70
+
71
+ fake("checkouts/#{@expected_checkout_id}/shipping_rates",
72
+ method: :get,
73
+ status: 202,
74
+ body: load_fixture('shipping_rates'))
75
+ assert_equal "canada_post-INT.TP.BOGUS-4.00", checkout.shipping_rates.first.id
8
76
  end
9
77
  end
data/test/collect_test.rb CHANGED
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CollectTest < Test::Unit::TestCase
4
5
  test "#create should create a collect" do
5
- fake "collects", :method => :post, :status => 201, :body => load_fixture('collect')
6
- link = ShopifyAPI::Collect.create(:product_id => 921728736, :collection_id => 841564295)
7
- assert_equal 841564295, link.id
6
+ fake("collects", method: :post, status: 201, body: load_fixture('collect'))
7
+ link = ShopifyAPI::Collect.create(product_id: 921728736, collection_id: 841564295)
8
+ assert_equal(841564295, link.id)
8
9
  end
9
10
  end
@@ -1,41 +1,84 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CollectionListingTest < Test::Unit::TestCase
4
-
5
5
  def test_get_collection_listings
6
- fake "collection_listings", method: :get, status: 201, body: load_fixture('collection_listings')
6
+ fake("collection_listings", method: :get, status: 201, body: load_fixture('collection_listings'))
7
7
 
8
8
  collection_listings = ShopifyAPI::CollectionListing.find(:all)
9
9
 
10
- assert_equal 1, collection_listings.count
11
- assert_equal 1, collection_listings.first.collection_id
12
- assert_equal 'Home page', collection_listings.first.title
10
+ assert_equal(1, collection_listings.count)
11
+ assert_equal(1, collection_listings.first.collection_id)
12
+ assert_equal('Home page', collection_listings.first.title)
13
13
  end
14
14
 
15
15
  def test_get_collection_listing
16
- fake "collection_listings/1", method: :get, status: 201, body: load_fixture('collection_listing')
16
+ fake("collection_listings/1", method: :get, status: 201, body: load_fixture('collection_listing'))
17
17
 
18
18
  collection_listing = ShopifyAPI::CollectionListing.find(1)
19
19
 
20
- assert_equal 1, collection_listing.collection_id
21
- assert_equal 'Home page', collection_listing.title
20
+ assert_equal(1, collection_listing.collection_id)
21
+ assert_equal('Home page', collection_listing.title)
22
22
  end
23
23
 
24
24
  def test_get_collection_listing_reload
25
- fake "collection_listings/1", method: :get, status: 201, body: load_fixture('collection_listing')
25
+ fake("collection_listings/1", method: :get, status: 201, body: load_fixture('collection_listing'))
26
26
 
27
27
  collection_listing = ShopifyAPI::CollectionListing.new(collection_id: 1)
28
28
  collection_listing.reload
29
29
 
30
- assert_equal 1, collection_listing.collection_id
31
- assert_equal 'Home page', collection_listing.title
30
+ assert_equal(1, collection_listing.collection_id)
31
+ assert_equal('Home page', collection_listing.title)
32
32
  end
33
33
 
34
34
  def test_get_collection_listing_product_ids
35
- fake "collection_listings/1/product_ids", method: :get, status: 201, body: load_fixture('collection_listing_product_ids')
35
+ fake(
36
+ "collection_listings/1/product_ids",
37
+ method: :get,
38
+ status: 201,
39
+ body: load_fixture('collection_listing_product_ids')
40
+ )
41
+
42
+ collection_listing = ShopifyAPI::CollectionListing.new(collection_id: 1)
43
+
44
+ assert_equal([1, 2], collection_listing.product_ids)
45
+ end
46
+
47
+ def test_get_collection_listing_product_ids_multi_page_with_cursor
48
+ version = ShopifyAPI::ApiVersion.find_version('2019-07')
49
+ ShopifyAPI::Base.api_version = version.to_s
36
50
 
37
51
  collection_listing = ShopifyAPI::CollectionListing.new(collection_id: 1)
38
52
 
39
- assert_equal [1, 2], collection_listing.product_ids
53
+ url = "https://this-is-my-test-shop.myshopify.com/admin/api/2019-07/collection_listings/1/product_ids.json"
54
+
55
+ next_page_info = "notarealpageinfobutthatsokay"
56
+ next_page_url = "#{url}?page_info=#{next_page_info}"
57
+ link_header = "<#{next_page_url}>; rel=\"next\""
58
+
59
+ fake(
60
+ "collection_listings/1/product_ids",
61
+ method: :get,
62
+ status: 201,
63
+ url: url,
64
+ body: load_fixture('collection_listing_product_ids'),
65
+ link: link_header,
66
+ )
67
+
68
+ product_ids = collection_listing.product_ids
69
+ assert_equal([1, 2], product_ids)
70
+ assert(product_ids.next_page?)
71
+
72
+ fake(
73
+ "collection_listings/1/product_ids",
74
+ method: :get,
75
+ status: 201,
76
+ url: next_page_url,
77
+ body: load_fixture('collection_listing_product_ids2'),
78
+ link: link_header,
79
+ )
80
+
81
+ next_page = product_ids.fetch_next_page
82
+ assert_equal([3, 4], next_page)
40
83
  end
41
84
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class CollectionPublicationTest < Test::Unit::TestCase
5
+ def test_get_all_collection_publications
6
+ fake('publications/55650051/collection_publications', body: load_fixture('collection_publications'))
7
+ collection_publications = ShopifyAPI::CollectionPublication.find(:all, params: { publication_id: 55650051 })
8
+
9
+ assert_equal(96062799894, collection_publications.first.id)
10
+ assert_equal(55650051, collection_publications.first.publication_id)
11
+ end
12
+
13
+ def test_get_collection_publication
14
+ fake('publications/55650051/collection_publications/647162527768', body: load_fixture('collection_publication'))
15
+ collection_publication = ShopifyAPI::CollectionPublication.find(647162527768, params: { publication_id: 55650051 })
16
+
17
+ assert_equal(96062799894, collection_publication.id)
18
+ assert_equal(55650051, collection_publication.publication_id)
19
+ end
20
+
21
+ def test_create_collection_publication
22
+ fake('publications/55650051/collection_publications', method: :post, body: load_fixture('collection_publication'))
23
+ ShopifyAPI::CollectionPublication.create(
24
+ publication_id: 55650051,
25
+ published_at: "2018-01-29T14:06:08-05:00",
26
+ published: true,
27
+ collection_id: 8267093571
28
+ )
29
+
30
+ expected_body = {
31
+ collection_publication: {
32
+ published_at: "2018-01-29T14:06:08-05:00",
33
+ published: true,
34
+ collection_id: 8267093571,
35
+ },
36
+ }.to_json
37
+
38
+ assert_equal(expected_body, WebMock.last_request.body)
39
+ end
40
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class CollectionTest < Test::Unit::TestCase
5
+ test "Collection get products gets all products in a collection on 2020-01 version" do
6
+ available_version = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: '2020-01')
7
+ ShopifyAPI::Base.activate_session(available_version)
8
+
9
+ fake(
10
+ 'collections',
11
+ url: 'https://shop2.myshopify.com/admin/api/2020-01/collections/1.json',
12
+ method: :get,
13
+ status: 200,
14
+ body: load_fixture('collection'),
15
+ extension: false
16
+ )
17
+
18
+ collection = ShopifyAPI::Collection.find(1)
19
+
20
+ fake(
21
+ 'products',
22
+ url: 'https://shop2.myshopify.com/admin/api/2020-01/collections/1/products.json',
23
+ method: :get,
24
+ status: 200,
25
+ body: load_fixture('collection_products'),
26
+ extension: false
27
+ )
28
+ assert_equal [632910392, 921728736], collection.products.map(&:id)
29
+ end
30
+
31
+ test "Collection get products fails on older api version" do
32
+ old_version = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: '2019-10')
33
+ ShopifyAPI::Base.activate_session(old_version)
34
+
35
+ fake(
36
+ 'collections',
37
+ url: 'https://shop2.myshopify.com/admin/api/2019-10/collections/1.json',
38
+ method: :get,
39
+ status: 200,
40
+ body: load_fixture('collection'),
41
+ extension: false
42
+ )
43
+
44
+ collection = ShopifyAPI::Collection.find(1)
45
+
46
+ assert_raises(NotImplementedError) do
47
+ collection.products
48
+ end
49
+ end
50
+ end
@@ -1,13 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CountableTest < Test::Unit::TestCase
4
5
  def setup
5
6
  super
6
- fake "products/count", :body => '{"count": 16}'
7
+ fake("products/count", body: '{"count": 16}')
7
8
  end
8
9
 
9
10
  def test_count_products
10
11
  count = ShopifyAPI::Product.count
11
- assert_equal 16, count
12
+ assert_equal(16, count)
12
13
  end
13
14
  end
@@ -0,0 +1,21 @@
1
+
2
+ # frozen_string_literal: true
3
+ require 'test_helper'
4
+ class CurrencyTest < Test::Unit::TestCase
5
+ def setup
6
+ super
7
+ fake("currencies", method: :get, body: load_fixture('currencies'))
8
+ end
9
+
10
+ context "Currency" do
11
+ should 'return a list of enabled currencies' do
12
+ currencies = ShopifyAPI::Currency.all
13
+ assert_equal(4, currencies.count)
14
+ assert_equal(%w(AUD EUR GBP HKD), currencies.map(&:currency))
15
+ assert_equal([true, true, true, false], currencies.map(&:enabled))
16
+ currencies.each do |currency|
17
+ assert_equal("2018-10-03T14:44:08-04:00", currency.rate_updated_at)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CustomCollectionTest < Test::Unit::TestCase
4
5
  test "#create should create a custom collection" do
5
- fake "custom_collections", :method => :post, :status => 201, :body => load_fixture('custom_collection')
6
- link = ShopifyAPI::CustomCollection.create(:title => "Macbooks", :image => { :src => "http://example.com/rails_logo.gif" })
7
- assert_equal 1063001463, link.id
6
+ fake("custom_collections", method: :post, status: 201, body: load_fixture('custom_collection'))
7
+ link = ShopifyAPI::CustomCollection.create(title: "Macbooks", image: { src: "http://example.com/rails_logo.gif" })
8
+ assert_equal(1063001463, link.id)
8
9
  end
9
10
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CustomerSavedSearchTest < Test::Unit::TestCase
@@ -7,21 +8,30 @@ class CustomerSavedSearchTest < Test::Unit::TestCase
7
8
  end
8
9
 
9
10
  def test_get_customers_from_customer_saved_search
10
- fake 'customers/search.json?customer_saved_search_id=8899730', :body => load_fixture('customer_saved_search_customers'), :extension => false
11
- assert_equal 1, @customer_saved_search.customers.length
12
- assert_equal 112223902, @customer_saved_search.customers.first.id
11
+ fake(
12
+ 'customers/search.json?customer_saved_search_id=8899730',
13
+ body: load_fixture('customer_saved_search_customers'),
14
+ extension: false
15
+ )
16
+ assert_equal(1, @customer_saved_search.customers.length)
17
+ assert_equal(112223902, @customer_saved_search.customers.first.id)
13
18
  end
14
19
 
15
20
  def test_get_customers_from_customer_saved_search_with_params
16
- fake 'customers/search.json?customer_saved_search_id=8899730&limit=1', :body => load_fixture('customer_saved_search_customers'), :extension => false
17
- customers = @customer_saved_search.customers(:limit => 1)
18
- assert_equal 1, customers.length
19
- assert_equal 112223902, customers.first.id
21
+ fake(
22
+ 'customers/search.json?customer_saved_search_id=8899730&limit=1',
23
+ body: load_fixture('customer_saved_search_customers'),
24
+ extension: false
25
+ )
26
+ customers = @customer_saved_search.customers(limit: 1)
27
+ assert_equal(1, customers.length)
28
+ assert_equal(112223902, customers.first.id)
20
29
  end
21
30
 
22
31
  private
32
+
23
33
  def load_customer_saved_search
24
- fake 'customer_saved_searches/8899730', :body => load_fixture('customer_saved_search')
34
+ fake('customer_saved_searches/8899730', body: load_fixture('customer_saved_search'))
25
35
  @customer_saved_search = ShopifyAPI::CustomerSavedSearch.find(8899730)
26
36
  end
27
37
  end
@@ -1,50 +1,58 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class CustomerTest < Test::Unit::TestCase
4
5
  def setup
5
6
  super
6
7
 
7
- fake 'customers/207119551', body: load_fixture('customers')
8
+ fake('customers/207119551', body: load_fixture('customers'))
8
9
 
9
10
  @customer = ShopifyAPI::Customer.find(207119551)
10
11
  end
11
12
 
12
13
  test "search should get a customers collection" do
13
- fake "customers/search.json?query=Bob+country%3AUnited+States", :extension => false, :body => load_fixture('customers_search')
14
+ fake(
15
+ "customers/search.json?query=Bob+country%3AUnited+States",
16
+ extension: false,
17
+ body: load_fixture('customers_search')
18
+ )
14
19
 
15
20
  results = ShopifyAPI::Customer.search(query: 'Bob country:United States')
16
- assert_equal 'Bob', results.first.first_name
21
+ assert_equal('Bob', results.first.first_name)
17
22
  end
18
23
 
19
24
  test "account_activation_url should create an account activation url" do
20
- fake "customers/207119551/account_activation_url", :method => :post, :body => load_fixture('customers_account_activation_url')
25
+ fake(
26
+ "customers/207119551/account_activation_url",
27
+ method: :post,
28
+ body: load_fixture('customers_account_activation_url')
29
+ )
21
30
 
22
31
  activation_url = "http://apple.myshopify.com/account/activate/207119551/86688abf23572680740b1c062fa37111-1458248616"
23
- assert_equal activation_url, @customer.account_activation_url
32
+ assert_equal(activation_url, @customer.account_activation_url)
24
33
  end
25
34
 
26
35
  test "#send_invite with no params" do
27
36
  customer_invite_fixture = load_fixture('customer_invite')
28
37
  customer_invite = ActiveSupport::JSON.decode(customer_invite_fixture)
29
- fake 'customers/207119551/send_invite', method: :post, body: customer_invite_fixture
38
+ fake('customers/207119551/send_invite', method: :post, body: customer_invite_fixture)
30
39
 
31
40
  customer_invite_response = @customer.send_invite
32
41
 
33
- assert_equal '{"customer_invite":{}}', FakeWeb.last_request.body
34
- assert_kind_of ShopifyAPI::CustomerInvite, customer_invite_response
35
- assert_equal customer_invite['customer_invite']['to'], customer_invite_response.to
42
+ assert_equal('{"customer_invite":{}}', WebMock.last_request.body)
43
+ assert_kind_of(ShopifyAPI::CustomerInvite, customer_invite_response)
44
+ assert_equal(customer_invite['customer_invite']['to'], customer_invite_response.to)
36
45
  end
37
46
 
38
47
  test "#send_invite with params" do
39
48
  customer_invite_fixture = load_fixture('customer_invite')
40
49
  customer_invite = ActiveSupport::JSON.decode(customer_invite_fixture)
41
- fake 'customers/207119551/send_invite', method: :post, body: customer_invite_fixture
42
-
50
+ fake('customers/207119551/send_invite', method: :post, body: customer_invite_fixture)
43
51
 
44
52
  customer_invite_response = @customer.send_invite(ShopifyAPI::CustomerInvite.new(customer_invite['customer_invite']))
45
53
 
46
- assert_equal customer_invite, ActiveSupport::JSON.decode(FakeWeb.last_request.body)
47
- assert_kind_of ShopifyAPI::CustomerInvite, customer_invite_response
48
- assert_equal customer_invite['customer_invite']['to'], customer_invite_response.to
54
+ assert_equal(customer_invite, ActiveSupport::JSON.decode(WebMock.last_request.body))
55
+ assert_kind_of(ShopifyAPI::CustomerInvite, customer_invite_response)
56
+ assert_equal(customer_invite['customer_invite']['to'], customer_invite_response.to)
49
57
  end
50
58
  end