ruby_shopify_api 1.0.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 (351) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.github/CODEOWNERS +1 -0
  4. data/.github/ISSUE_TEMPLATE.md +36 -0
  5. data/.github/probots.yml +2 -0
  6. data/.github/workflows/build.yml +43 -0
  7. data/.gitignore +15 -0
  8. data/.rubocop.yml +28 -0
  9. data/.rubocop_todo.yml +75 -0
  10. data/CHANGELOG-OLD.md +501 -0
  11. data/CHANGELOG.md +5 -0
  12. data/CONTRIBUTING.md +8 -0
  13. data/CONTRIBUTORS +3 -0
  14. data/Gemfile +10 -0
  15. data/Gemfile.lock +151 -0
  16. data/Gemfile_ar41 +5 -0
  17. data/Gemfile_ar50 +5 -0
  18. data/Gemfile_ar51 +5 -0
  19. data/Gemfile_ar60 +5 -0
  20. data/Gemfile_ar_main +5 -0
  21. data/LICENSE +20 -0
  22. data/README.md +649 -0
  23. data/RELEASING +17 -0
  24. data/Rakefile +55 -0
  25. data/SECURITY.md +59 -0
  26. data/dev.yml +11 -0
  27. data/docker-compose.yml +13 -0
  28. data/docs/_config.yml +1 -0
  29. data/docs/_includes/footer.html +28 -0
  30. data/docs/_includes/head.html +28 -0
  31. data/docs/_layouts/index.html +57 -0
  32. data/docs/graphql.md +241 -0
  33. data/docs/index.md +639 -0
  34. data/lib/active_resource/connection_ext.rb +11 -0
  35. data/lib/active_resource/detailed_log_subscriber.rb +55 -0
  36. data/lib/active_resource/json_errors.rb +37 -0
  37. data/lib/shopify_api/api_access.rb +57 -0
  38. data/lib/shopify_api/api_version.rb +206 -0
  39. data/lib/shopify_api/connection.rb +36 -0
  40. data/lib/shopify_api/countable.rb +15 -0
  41. data/lib/shopify_api/disable_prefix_check.rb +31 -0
  42. data/lib/shopify_api/events.rb +8 -0
  43. data/lib/shopify_api/graphql/http_client.rb +22 -0
  44. data/lib/shopify_api/graphql/railtie.rb +17 -0
  45. data/lib/shopify_api/graphql/task.rake +100 -0
  46. data/lib/shopify_api/graphql.rb +103 -0
  47. data/lib/shopify_api/hmac_params.rb +33 -0
  48. data/lib/shopify_api/limits.rb +77 -0
  49. data/lib/shopify_api/message_enricher.rb +25 -0
  50. data/lib/shopify_api/meta.rb +14 -0
  51. data/lib/shopify_api/metafields.rb +21 -0
  52. data/lib/shopify_api/paginated_collection.rb +69 -0
  53. data/lib/shopify_api/pagination_link_headers.rb +34 -0
  54. data/lib/shopify_api/resources/abandoned_checkout.rb +7 -0
  55. data/lib/shopify_api/resources/access_scope.rb +10 -0
  56. data/lib/shopify_api/resources/access_token.rb +9 -0
  57. data/lib/shopify_api/resources/address.rb +5 -0
  58. data/lib/shopify_api/resources/announcement.rb +5 -0
  59. data/lib/shopify_api/resources/api_permission.rb +9 -0
  60. data/lib/shopify_api/resources/application_charge.rb +16 -0
  61. data/lib/shopify_api/resources/application_credit.rb +5 -0
  62. data/lib/shopify_api/resources/array_base.rb +13 -0
  63. data/lib/shopify_api/resources/article.rb +22 -0
  64. data/lib/shopify_api/resources/asset.rb +101 -0
  65. data/lib/shopify_api/resources/assigned_fulfillment_order.rb +16 -0
  66. data/lib/shopify_api/resources/base.rb +166 -0
  67. data/lib/shopify_api/resources/billing_address.rb +5 -0
  68. data/lib/shopify_api/resources/blog.rb +11 -0
  69. data/lib/shopify_api/resources/carrier_service.rb +5 -0
  70. data/lib/shopify_api/resources/cart.rb +5 -0
  71. data/lib/shopify_api/resources/checkout.rb +30 -0
  72. data/lib/shopify_api/resources/collect.rb +7 -0
  73. data/lib/shopify_api/resources/collection.rb +14 -0
  74. data/lib/shopify_api/resources/collection_listing.rb +19 -0
  75. data/lib/shopify_api/resources/collection_publication.rb +10 -0
  76. data/lib/shopify_api/resources/comment.rb +24 -0
  77. data/lib/shopify_api/resources/country.rb +5 -0
  78. data/lib/shopify_api/resources/currency.rb +6 -0
  79. data/lib/shopify_api/resources/custom_collection.rb +20 -0
  80. data/lib/shopify_api/resources/customer.rb +30 -0
  81. data/lib/shopify_api/resources/customer_group.rb +6 -0
  82. data/lib/shopify_api/resources/customer_invite.rb +5 -0
  83. data/lib/shopify_api/resources/customer_saved_search.rb +12 -0
  84. data/lib/shopify_api/resources/discount_code.rb +10 -0
  85. data/lib/shopify_api/resources/discount_code_batch.rb +34 -0
  86. data/lib/shopify_api/resources/draft_order.rb +15 -0
  87. data/lib/shopify_api/resources/draft_order_invoice.rb +5 -0
  88. data/lib/shopify_api/resources/event.rb +9 -0
  89. data/lib/shopify_api/resources/fulfillment.rb +56 -0
  90. data/lib/shopify_api/resources/fulfillment_event.rb +16 -0
  91. data/lib/shopify_api/resources/fulfillment_order.rb +151 -0
  92. data/lib/shopify_api/resources/fulfillment_order_locations_for_move.rb +5 -0
  93. data/lib/shopify_api/resources/fulfillment_request.rb +16 -0
  94. data/lib/shopify_api/resources/fulfillment_service.rb +5 -0
  95. data/lib/shopify_api/resources/fulfillment_v2.rb +21 -0
  96. data/lib/shopify_api/resources/gift_card.rb +8 -0
  97. data/lib/shopify_api/resources/image.rb +17 -0
  98. data/lib/shopify_api/resources/inventory_item.rb +6 -0
  99. data/lib/shopify_api/resources/inventory_level.rb +54 -0
  100. data/lib/shopify_api/resources/line_item.rb +15 -0
  101. data/lib/shopify_api/resources/location.rb +8 -0
  102. data/lib/shopify_api/resources/marketing_event.rb +11 -0
  103. data/lib/shopify_api/resources/metafield.rb +14 -0
  104. data/lib/shopify_api/resources/note_attribute.rb +5 -0
  105. data/lib/shopify_api/resources/option.rb +5 -0
  106. data/lib/shopify_api/resources/order.rb +44 -0
  107. data/lib/shopify_api/resources/order_risk.rb +9 -0
  108. data/lib/shopify_api/resources/page.rb +7 -0
  109. data/lib/shopify_api/resources/payment.rb +7 -0
  110. data/lib/shopify_api/resources/payment_details.rb +5 -0
  111. data/lib/shopify_api/resources/ping.rb +3 -0
  112. data/lib/shopify_api/resources/policy.rb +8 -0
  113. data/lib/shopify_api/resources/price_rule.rb +8 -0
  114. data/lib/shopify_api/resources/product.rb +59 -0
  115. data/lib/shopify_api/resources/product_listing.rb +17 -0
  116. data/lib/shopify_api/resources/product_publication.rb +10 -0
  117. data/lib/shopify_api/resources/province.rb +6 -0
  118. data/lib/shopify_api/resources/publication.rb +5 -0
  119. data/lib/shopify_api/resources/receipt.rb +5 -0
  120. data/lib/shopify_api/resources/recurring_application_charge.rb +34 -0
  121. data/lib/shopify_api/resources/redirect.rb +5 -0
  122. data/lib/shopify_api/resources/refund.rb +15 -0
  123. data/lib/shopify_api/resources/report.rb +5 -0
  124. data/lib/shopify_api/resources/resource_feedback.rb +19 -0
  125. data/lib/shopify_api/resources/rule.rb +5 -0
  126. data/lib/shopify_api/resources/script_tag.rb +5 -0
  127. data/lib/shopify_api/resources/shipping_address.rb +5 -0
  128. data/lib/shopify_api/resources/shipping_line.rb +5 -0
  129. data/lib/shopify_api/resources/shipping_rate.rb +7 -0
  130. data/lib/shopify_api/resources/shipping_zone.rb +5 -0
  131. data/lib/shopify_api/resources/shop.rb +26 -0
  132. data/lib/shopify_api/resources/smart_collection.rb +15 -0
  133. data/lib/shopify_api/resources/storefront_access_token.rb +5 -0
  134. data/lib/shopify_api/resources/tax_line.rb +5 -0
  135. data/lib/shopify_api/resources/tax_service.rb +5 -0
  136. data/lib/shopify_api/resources/tender_transaction.rb +6 -0
  137. data/lib/shopify_api/resources/theme.rb +5 -0
  138. data/lib/shopify_api/resources/transaction.rb +6 -0
  139. data/lib/shopify_api/resources/usage_charge.rb +6 -0
  140. data/lib/shopify_api/resources/user.rb +5 -0
  141. data/lib/shopify_api/resources/variant.rb +43 -0
  142. data/lib/shopify_api/resources/webhook.rb +5 -0
  143. data/lib/shopify_api/resources.rb +4 -0
  144. data/lib/shopify_api/session.rb +203 -0
  145. data/lib/shopify_api/version.rb +4 -0
  146. data/lib/shopify_api.rb +45 -0
  147. data/lib/verify_docs.rb +8 -0
  148. data/service.yml +2 -0
  149. data/shipit.rubygems.yml +1 -0
  150. data/shopify_api.gemspec +47 -0
  151. data/test/abandoned_checkouts_test.rb +29 -0
  152. data/test/access_scope_test.rb +23 -0
  153. data/test/access_token_test.rb +20 -0
  154. data/test/active_resource/json_errors_test.rb +19 -0
  155. data/test/api_access_test.rb +153 -0
  156. data/test/api_permission_test.rb +9 -0
  157. data/test/api_version_test.rb +157 -0
  158. data/test/application_charge_test.rb +82 -0
  159. data/test/application_credit_test.rb +36 -0
  160. data/test/article_test.rb +72 -0
  161. data/test/asset_test.rb +26 -0
  162. data/test/assigned_fulfillment_order_test.rb +78 -0
  163. data/test/base_test.rb +213 -0
  164. data/test/blog_test.rb +9 -0
  165. data/test/carrier_service_test.rb +18 -0
  166. data/test/cart_test.rb +14 -0
  167. data/test/checkouts_test.rb +77 -0
  168. data/test/collect_test.rb +10 -0
  169. data/test/collection_listing_test.rb +84 -0
  170. data/test/collection_publication_test.rb +40 -0
  171. data/test/collection_test.rb +50 -0
  172. data/test/countable_test.rb +14 -0
  173. data/test/currency_test.rb +21 -0
  174. data/test/custom_collection_test.rb +10 -0
  175. data/test/customer_saved_search_test.rb +37 -0
  176. data/test/customer_test.rb +58 -0
  177. data/test/detailed_log_subscriber_test.rb +143 -0
  178. data/test/discount_code_batch_test.rb +41 -0
  179. data/test/discount_code_test.rb +59 -0
  180. data/test/draft_order_test.rb +167 -0
  181. data/test/fixtures/abandoned_checkout.json +184 -0
  182. data/test/fixtures/abandoned_checkouts.json +186 -0
  183. data/test/fixtures/access_scopes.json +10 -0
  184. data/test/fixtures/access_token_delegate.json +4 -0
  185. data/test/fixtures/api_versions.json +38 -0
  186. data/test/fixtures/apis.json +42 -0
  187. data/test/fixtures/application_charge.json +16 -0
  188. data/test/fixtures/application_charges.json +57 -0
  189. data/test/fixtures/application_credit.json +12 -0
  190. data/test/fixtures/application_credits.json +24 -0
  191. data/test/fixtures/article.json +15 -0
  192. data/test/fixtures/articles.json +39 -0
  193. data/test/fixtures/asset.json +9 -0
  194. data/test/fixtures/assets.json +136 -0
  195. data/test/fixtures/assigned_fulfillment_orders.json +80 -0
  196. data/test/fixtures/authors.json +1 -0
  197. data/test/fixtures/blog.json +13 -0
  198. data/test/fixtures/blogs.json +13 -0
  199. data/test/fixtures/carrier_service.json +9 -0
  200. data/test/fixtures/carts.json +43 -0
  201. data/test/fixtures/checkout.json +160 -0
  202. data/test/fixtures/checkouts.json +162 -0
  203. data/test/fixtures/collect.json +12 -0
  204. data/test/fixtures/collection.json +17 -0
  205. data/test/fixtures/collection_listing.json +11 -0
  206. data/test/fixtures/collection_listing_product_ids.json +1 -0
  207. data/test/fixtures/collection_listing_product_ids2.json +1 -0
  208. data/test/fixtures/collection_listings.json +13 -0
  209. data/test/fixtures/collection_products.json +47 -0
  210. data/test/fixtures/collection_publication.json +11 -0
  211. data/test/fixtures/collection_publications.json +13 -0
  212. data/test/fixtures/currencies.json +25 -0
  213. data/test/fixtures/custom_collection.json +17 -0
  214. data/test/fixtures/customer_invite.json +9 -0
  215. data/test/fixtures/customer_saved_search.json +9 -0
  216. data/test/fixtures/customer_saved_search_customers.json +60 -0
  217. data/test/fixtures/customers.json +59 -0
  218. data/test/fixtures/customers_account_activation_url.json +3 -0
  219. data/test/fixtures/customers_search.json +60 -0
  220. data/test/fixtures/discount_code.json +10 -0
  221. data/test/fixtures/discount_code_batch.json +14 -0
  222. data/test/fixtures/discount_code_batch_discount_codes.json +21 -0
  223. data/test/fixtures/discount_codes.json +12 -0
  224. data/test/fixtures/draft_order.json +159 -0
  225. data/test/fixtures/draft_order_completed.json +159 -0
  226. data/test/fixtures/draft_order_invoice.json +9 -0
  227. data/test/fixtures/draft_orders.json +161 -0
  228. data/test/fixtures/engagement.json +15 -0
  229. data/test/fixtures/events.json +31 -0
  230. data/test/fixtures/fulfillment.json +49 -0
  231. data/test/fixtures/fulfillment_event.json +12 -0
  232. data/test/fixtures/fulfillment_order.json +39 -0
  233. data/test/fixtures/fulfillment_order_locations_for_move.json +18 -0
  234. data/test/fixtures/fulfillment_orders.json +80 -0
  235. data/test/fixtures/fulfillment_request.json +28 -0
  236. data/test/fixtures/fulfillment_service.json +10 -0
  237. data/test/fixtures/fulfillments.json +53 -0
  238. data/test/fixtures/gift_card.json +20 -0
  239. data/test/fixtures/gift_card_disabled.json +20 -0
  240. data/test/fixtures/graphql/2019-10.json +1083 -0
  241. data/test/fixtures/graphql/dummy_schema.rb +16 -0
  242. data/test/fixtures/graphql/unstable.json +1083 -0
  243. data/test/fixtures/image.json +10 -0
  244. data/test/fixtures/images.json +20 -0
  245. data/test/fixtures/inventory_level.json +7 -0
  246. data/test/fixtures/inventory_levels.json +24 -0
  247. data/test/fixtures/marketing_event.json +28 -0
  248. data/test/fixtures/marketing_events.json +54 -0
  249. data/test/fixtures/metafield.json +12 -0
  250. data/test/fixtures/metafields.json +34 -0
  251. data/test/fixtures/order.json +297 -0
  252. data/test/fixtures/order_risk.json +14 -0
  253. data/test/fixtures/order_risks.json +28 -0
  254. data/test/fixtures/order_with_properties.json +373 -0
  255. data/test/fixtures/orders.json +299 -0
  256. data/test/fixtures/payment.json +7 -0
  257. data/test/fixtures/payments.json +9 -0
  258. data/test/fixtures/ping/conversation.json +1 -0
  259. data/test/fixtures/ping/failed_delivery_confirmation.json +1 -0
  260. data/test/fixtures/ping/message.json +1 -0
  261. data/test/fixtures/ping/successful_delivery_confirmation.json +1 -0
  262. data/test/fixtures/policies.json +8 -0
  263. data/test/fixtures/price_rule.json +27 -0
  264. data/test/fixtures/price_rules.json +28 -0
  265. data/test/fixtures/product.json +116 -0
  266. data/test/fixtures/product_listing.json +86 -0
  267. data/test/fixtures/product_listing_product_ids.json +1 -0
  268. data/test/fixtures/product_listing_product_ids2.json +1 -0
  269. data/test/fixtures/product_listings.json +174 -0
  270. data/test/fixtures/product_publication.json +11 -0
  271. data/test/fixtures/product_publications.json +13 -0
  272. data/test/fixtures/publications.json +9 -0
  273. data/test/fixtures/recurring_application_charge.json +22 -0
  274. data/test/fixtures/recurring_application_charge_adjustment.json +5 -0
  275. data/test/fixtures/recurring_application_charges.json +106 -0
  276. data/test/fixtures/redirect.json +7 -0
  277. data/test/fixtures/refund.json +112 -0
  278. data/test/fixtures/report.json +9 -0
  279. data/test/fixtures/reports.json +11 -0
  280. data/test/fixtures/script_tag.json +10 -0
  281. data/test/fixtures/script_tags.json +18 -0
  282. data/test/fixtures/shipping_rates.json +12 -0
  283. data/test/fixtures/shipping_zones.json +315 -0
  284. data/test/fixtures/shop.json +26 -0
  285. data/test/fixtures/smart_collection.json +21 -0
  286. data/test/fixtures/smart_collection_products.json +155 -0
  287. data/test/fixtures/storefront_access_token.json +9 -0
  288. data/test/fixtures/storefront_access_tokens.json +18 -0
  289. data/test/fixtures/tags.json +1 -0
  290. data/test/fixtures/tax_service.json +9 -0
  291. data/test/fixtures/tender_transactions.json +52 -0
  292. data/test/fixtures/transaction.json +29 -0
  293. data/test/fixtures/usage_charge.json +11 -0
  294. data/test/fixtures/usage_charges.json +23 -0
  295. data/test/fixtures/user.json +21 -0
  296. data/test/fixtures/users.json +42 -0
  297. data/test/fixtures/variant.json +23 -0
  298. data/test/fixtures/variants.json +88 -0
  299. data/test/fixtures/webhook.json +10 -0
  300. data/test/fixtures/webhooks.json +18 -0
  301. data/test/fulfillment_event_test.rb +74 -0
  302. data/test/fulfillment_order_test.rb +530 -0
  303. data/test/fulfillment_order_test_helper.rb +8 -0
  304. data/test/fulfillment_request_test.rb +35 -0
  305. data/test/fulfillment_service_test.rb +18 -0
  306. data/test/fulfillment_test.rb +239 -0
  307. data/test/fulfillment_v2_test.rb +66 -0
  308. data/test/gift_card_test.rb +24 -0
  309. data/test/graphql/http_client_test.rb +26 -0
  310. data/test/graphql_test.rb +190 -0
  311. data/test/hmac_params_test.rb +25 -0
  312. data/test/image_test.rb +41 -0
  313. data/test/inventory_level_test.rb +68 -0
  314. data/test/lib/webmock_extensions/last_request.rb +16 -0
  315. data/test/limits_test.rb +39 -0
  316. data/test/location_test.rb +15 -0
  317. data/test/marketing_event_test.rb +68 -0
  318. data/test/message_enricher_test.rb +45 -0
  319. data/test/meta_test.rb +47 -0
  320. data/test/metafield_test.rb +56 -0
  321. data/test/order_risk_test.rb +47 -0
  322. data/test/order_test.rb +140 -0
  323. data/test/pagination_test.rb +290 -0
  324. data/test/payment_test.rb +19 -0
  325. data/test/policy_test.rb +20 -0
  326. data/test/price_rule_test.rb +70 -0
  327. data/test/product_listing_test.rb +97 -0
  328. data/test/product_publication_test.rb +40 -0
  329. data/test/product_test.rb +111 -0
  330. data/test/publication_test.rb +12 -0
  331. data/test/recurring_application_charge_test.rb +204 -0
  332. data/test/redirect_test.rb +10 -0
  333. data/test/refund_test.rb +37 -0
  334. data/test/report_test.rb +37 -0
  335. data/test/resource_feedback_test.rb +43 -0
  336. data/test/script_tag_test.rb +31 -0
  337. data/test/session_test.rb +640 -0
  338. data/test/shipping_rate_test.rb +17 -0
  339. data/test/shipping_zone_test.rb +11 -0
  340. data/test/shop_test.rb +82 -0
  341. data/test/smart_collection_test.rb +11 -0
  342. data/test/storefront_access_token_test.rb +30 -0
  343. data/test/tax_service_test.rb +12 -0
  344. data/test/tender_transaction_test.rb +18 -0
  345. data/test/test_helper.rb +126 -0
  346. data/test/transaction_test.rb +18 -0
  347. data/test/usage_charge_test.rb +25 -0
  348. data/test/user_test.rb +18 -0
  349. data/test/variant_test.rb +73 -0
  350. data/test/webhook_test.rb +24 -0
  351. metadata +555 -0
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class ApiVersionTest < Test::Unit::TestCase
5
+ test "find_version returns any version object given" do
6
+ version = ShopifyAPI::ApiVersion.new(handle: :unstable)
7
+ assert_same(version, ShopifyAPI::ApiVersion.find_version(version))
8
+ end
9
+
10
+ test "find_version converts a known version into a version object" do
11
+ versions = [
12
+ ShopifyAPI::ApiVersion.new(handle: :unstable),
13
+ ShopifyAPI::ApiVersion.new(handle: '2019-01'),
14
+ ]
15
+
16
+ assert_equal(versions, [
17
+ ShopifyAPI::ApiVersion.find_version('unstable'),
18
+ ShopifyAPI::ApiVersion.find_version('2019-01'),
19
+ ])
20
+ end
21
+
22
+ test "find_version removes unverified versions from version set if mode is set to :raise_on_unknown" do
23
+ ShopifyAPI::ApiVersion.version_lookup_mode = :define_on_unknown
24
+ assert ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
25
+ assert_equal 6, ShopifyAPI::ApiVersion.versions.size
26
+
27
+ ShopifyAPI::ApiVersion.find_version('2019-30')
28
+ refute ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
29
+ assert_equal 7, ShopifyAPI::ApiVersion.versions.size
30
+ ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
31
+
32
+ assert ShopifyAPI::ApiVersion.versions.values.all?(&:verified?)
33
+ assert_equal 6, ShopifyAPI::ApiVersion.versions.size
34
+ end
35
+
36
+ test "find_version does not raise when coercing a string if no versions are defined when version_lookup_mode is :define_on_unknown" do
37
+ ShopifyAPI::ApiVersion.clear_known_versions
38
+ ShopifyAPI::ApiVersion.version_lookup_mode = :define_on_unknown
39
+ assert_equal :define_on_unknown, ShopifyAPI::ApiVersion.version_lookup_mode
40
+ assert_nothing_raised do
41
+ ShopifyAPI::ApiVersion.find_version('made up version')
42
+ end
43
+ end
44
+
45
+ test "find_version does raise when coercing a string if no versions are defined when version_lookup_mode is :raise_on_unknown" do
46
+ refute ShopifyAPI::ApiVersion.versions['made up version']
47
+ ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
48
+ assert_raises(ShopifyAPI::ApiVersion::UnknownVersion) do
49
+ ShopifyAPI::ApiVersion.find_version('made up version')
50
+ end
51
+ end
52
+
53
+ test "find_version raises ArgumentError when given an ShopifyAPI::ApiVersion::NullVersion object" do
54
+ ShopifyAPI::ApiVersion.clear_known_versions
55
+ ShopifyAPI::ApiVersion.version_lookup_mode = :define_on_unknown
56
+ assert_equal :define_on_unknown, ShopifyAPI::ApiVersion.version_lookup_mode
57
+ assert_raises(ArgumentError) do
58
+ ShopifyAPI::ApiVersion.find_version(ShopifyAPI::ApiVersion::NullVersion)
59
+ end
60
+ end
61
+
62
+ test 'two versions with the same version number are equal' do
63
+ version_1 = ShopifyAPI::ApiVersion.new(handle: '2018-09')
64
+ version_2 = ShopifyAPI::ApiVersion.new(handle: '2018-09')
65
+
66
+ assert_equal version_2, version_1
67
+ end
68
+
69
+ test 'two versions with the different version numbers are not equal' do
70
+ version_1 = ShopifyAPI::ApiVersion.new(handle: '2019-07')
71
+ version_2 = ShopifyAPI::ApiVersion.new(handle: '2019-11')
72
+
73
+ refute_equal version_2, version_1
74
+ end
75
+
76
+ test 'versions are ordered by version number with unstable always being the newest' do
77
+ version_1 = ShopifyAPI::ApiVersion.new(handle: '2017-11')
78
+ version_2 = ShopifyAPI::ApiVersion.new(handle: '2019-11')
79
+ version_3 = ShopifyAPI::ApiVersion.new(handle: '2039-01')
80
+ version_4 = ShopifyAPI::ApiVersion.new(handle: '2039-02')
81
+ unstable = ShopifyAPI::ApiVersion.new(handle: :unstable)
82
+
83
+ assert_equal([
84
+ version_1,
85
+ version_2,
86
+ version_3,
87
+ version_4,
88
+ unstable,
89
+ ], [
90
+ version_3,
91
+ version_1,
92
+ version_4,
93
+ unstable,
94
+ version_2,
95
+ ].sort)
96
+ end
97
+
98
+ test 'latest_stable_version will return the version that is newest and stable' do
99
+ assert_equal(
100
+ ShopifyAPI::ApiVersion.versions,
101
+ {
102
+ "2019-01" => ShopifyAPI::ApiVersion.new(handle: '2019-01', supported: true, latest_supported: false),
103
+ "2019-04" => ShopifyAPI::ApiVersion.new(handle: '2019-04', supported: true, latest_supported: false),
104
+ "2019-07" => ShopifyAPI::ApiVersion.new(handle: '2019-07', supported: true, latest_supported: false),
105
+ "2019-10" => ShopifyAPI::ApiVersion.new(handle: '2019-10', supported: false, latest_supported: false),
106
+ "2020-01" => ShopifyAPI::ApiVersion.new(handle: '2020-01', supported: false, latest_supported: true),
107
+ "unstable" => ShopifyAPI::ApiVersion.new(handle: 'unstable', supported: false, latest_supported: false),
108
+ }
109
+ )
110
+ silence_warnings do
111
+ refute_equal(
112
+ ShopifyAPI::ApiVersion.new(handle: '2019-01'),
113
+ ShopifyAPI::ApiVersion.latest_stable_version
114
+ )
115
+
116
+ assert_equal(
117
+ ShopifyAPI::ApiVersion.new(handle: '2020-01'),
118
+ ShopifyAPI::ApiVersion.latest_stable_version
119
+ )
120
+ end
121
+ end
122
+
123
+ test "NullVersion raises ApiVersionNotSetError" do
124
+ assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
125
+ ShopifyAPI::ApiVersion::NullVersion.construct_api_path(:string)
126
+ end
127
+
128
+ assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
129
+ ShopifyAPI::ApiVersion::NullVersion.construct_graphql_path
130
+ end
131
+
132
+ assert_raises(ShopifyAPI::ApiVersion::ApiVersionNotSetError) do
133
+ ShopifyAPI::ApiVersion::NullVersion.stable?
134
+ end
135
+ end
136
+
137
+ test "NullVersion cannot be instantiated and raises NoMethodError if attempted" do
138
+ assert_raises(NoMethodError) do
139
+ ShopifyAPI::ApiVersion::NullVersion.new
140
+ end
141
+ end
142
+
143
+ test "handle_to_date converts a version handle to a date" do
144
+ version_1 = ShopifyAPI::ApiVersion.new(handle: '2019-01')
145
+ version_2 = ShopifyAPI::ApiVersion.new(handle: 'unstable')
146
+
147
+ assert_equal(version_1.handle_as_date, Time.utc(2019, 01, 01))
148
+ assert_equal(version_2.handle_as_date, ShopifyAPI::ApiVersion::UNSTABLE_AS_DATE)
149
+ end
150
+
151
+ class TestApiVersion < ShopifyAPI::ApiVersion
152
+ def initialize(name)
153
+ super(name)
154
+ @version_name = name
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class ApplicationChargeTest < Test::Unit::TestCase
5
+ def test_application_charge_create
6
+ fake("application_charges", method: :post, status: 201, body: load_fixture('application_charge'))
7
+
8
+ charge = ShopifyAPI::ApplicationCharge.create(
9
+ name: "iPod Cleaning",
10
+ price: 5.00,
11
+ return_url: "http://google.com"
12
+ )
13
+
14
+ assert_equal(
15
+ 'https://this-is-my-test-shop.myshopify.com/admin/charges/803742/confirm_application_charge?' \
16
+ 'signature=BAhpA55DDA%3D%3D--55b44e274e438c619be4631c804abcbcb6ee915a',
17
+ charge.confirmation_url
18
+ )
19
+ end
20
+
21
+ def test_get_application_charge
22
+ fake("application_charges/803742", method: :get, status: 201, body: load_fixture('application_charge'))
23
+
24
+ charge = ShopifyAPI::ApplicationCharge.find(803742)
25
+
26
+ assert_equal("iPod Cleaning", charge.name)
27
+ end
28
+
29
+ def test_list_application_charges
30
+ fake("application_charges", method: :get, status: 201, body: load_fixture('application_charges'))
31
+
32
+ charges = ShopifyAPI::ApplicationCharge.find(:all)
33
+
34
+ assert_equal(4, charges.size)
35
+ assert_equal("iPhone Case", charges.last.name)
36
+ end
37
+
38
+ def test_list_pending_application_charges
39
+ fake("application_charges", method: :get, status: 201, body: load_fixture('application_charges'))
40
+
41
+ pending_charges = ShopifyAPI::ApplicationCharge.pending
42
+
43
+ assert_equal(1, pending_charges.size)
44
+ assert_equal("Screen Replacement", pending_charges.first.name)
45
+ end
46
+
47
+ def test_list_expired_application_charges
48
+ fake("application_charges", method: :get, status: 201, body: load_fixture('application_charges'))
49
+
50
+ expired_charges = ShopifyAPI::ApplicationCharge.expired
51
+
52
+ assert_equal(1, expired_charges.size)
53
+ assert_equal("iPod Cleaning", expired_charges.first.name)
54
+ end
55
+
56
+ def test_list_accepted_application_charges
57
+ fake("application_charges", method: :get, status: 201, body: load_fixture('application_charges'))
58
+
59
+ accepted_charges = ShopifyAPI::ApplicationCharge.accepted
60
+
61
+ assert_equal(1, accepted_charges.size)
62
+ assert_equal("iPhone Case", accepted_charges.first.name)
63
+ end
64
+
65
+ def test_list_declined_application_charges
66
+ fake("application_charges", method: :get, status: 201, body: load_fixture('application_charges'))
67
+
68
+ declined_charges = ShopifyAPI::ApplicationCharge.declined
69
+
70
+ assert_equal(1, declined_charges.size)
71
+ assert_equal("Magic Mouse", declined_charges.first.name)
72
+ end
73
+
74
+ def test_activate_application_charge
75
+ fake("application_charges", method: :get, status: 201, body: load_fixture('application_charges'))
76
+ fake("application_charges/803740/activate", method: :post, status: 200, body: "{}")
77
+
78
+ charge = ShopifyAPI::ApplicationCharge.accepted
79
+
80
+ assert(charge.last.activate)
81
+ end
82
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class ApplicationCreditTest < Test::Unit::TestCase
5
+ def test_application_credit_create
6
+ fake("application_credits", method: :post, status: 201, body: load_fixture('application_credit'))
7
+
8
+ credit = ShopifyAPI::ApplicationCredit.create(
9
+ description: "refund for application charge",
10
+ amount: 5.00,
11
+ api_client_id: 861378,
12
+ shop_id: 487168
13
+ )
14
+
15
+ assert_equal('refund for application charge', credit.description)
16
+ assert_equal('5.00', credit.amount)
17
+ end
18
+
19
+ def test_get_application_credit
20
+ fake("application_credits/803742", method: :get, status: 201, body: load_fixture('application_credit'))
21
+
22
+ credit = ShopifyAPI::ApplicationCredit.find(803742)
23
+
24
+ assert_equal('refund for application charge', credit.description)
25
+ assert_equal('5.00', credit.amount)
26
+ end
27
+
28
+ def test_list_application_credits
29
+ fake("application_credits", method: :get, status: 201, body: load_fixture('application_credits'))
30
+
31
+ credit = ShopifyAPI::ApplicationCredit.find(:all)
32
+
33
+ assert_equal(2, credit.size)
34
+ assert_equal('10.00', credit.last.amount)
35
+ end
36
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class ArticleTest < Test::Unit::TestCase
5
+ def test_create_article
6
+ fake("blogs/1008414260/articles", method: :post, body: load_fixture('article'))
7
+ article = ShopifyAPI::Article.new(blog_id: 1008414260)
8
+ article.save
9
+ assert_equal("First Post", article.title)
10
+ end
11
+
12
+ def test_get_article
13
+ fake("articles/6242736", method: :get, body: load_fixture('article'))
14
+ article = ShopifyAPI::Article.find(6242736)
15
+ assert_equal("First Post", article.title)
16
+ assert_equal(1008414260, article.blog_id)
17
+ end
18
+
19
+ def test_get_articles
20
+ fake("articles", method: :get, body: load_fixture('articles'))
21
+ articles = ShopifyAPI::Article.all
22
+ assert_equal(3, articles.length)
23
+ assert_equal(1008414260, articles.first.blog_id)
24
+ end
25
+
26
+ def test_get_articles_namespaced
27
+ fake("blogs/1008414260/articles", method: :get, body: load_fixture('articles'))
28
+ articles = ShopifyAPI::Article.find(:all, params: { blog_id: 1008414260 })
29
+ assert_equal(3, articles.length)
30
+ assert_equal(1008414260, articles.first.blog_id)
31
+ end
32
+
33
+ def test_get_article_namespaced
34
+ fake("blogs/1008414260/articles/6242736", method: :get, body: load_fixture('article'))
35
+ article = ShopifyAPI::Article.find(6242736, params: { blog_id: 1008414260 })
36
+ assert_equal("First Post", article.title)
37
+ assert_equal(1008414260, article.blog_id)
38
+ end
39
+
40
+ def test_get_authors
41
+ fake("articles/authors", method: :get, body: load_fixture('authors'))
42
+ authors = ShopifyAPI::Article.authors
43
+ assert_equal("Shopify", authors.first)
44
+ assert_equal("development shop", authors.last)
45
+ end
46
+
47
+ def test_get_authors_for_blog_id
48
+ fake("blogs/1008414260/articles/authors", method: :get, body: load_fixture('authors'))
49
+ authors = ShopifyAPI::Article.authors(blog_id: 1008414260)
50
+ assert_equal(3, authors.length)
51
+ end
52
+
53
+ def test_get_tags
54
+ fake("articles/tags", method: :get, body: load_fixture('tags'))
55
+ tags = ShopifyAPI::Article.tags
56
+ assert_equal("consequuntur", tags.first)
57
+ assert_equal("repellendus", tags.last)
58
+ end
59
+
60
+ def test_get_tags_for_blog_id
61
+ fake("blogs/1008414260/articles/tags", method: :get, body: load_fixture('tags'))
62
+ tags = ShopifyAPI::Article.tags(blog_id: 1008414260)
63
+ assert_equal("consequuntur", tags.first)
64
+ assert_equal("repellendus", tags.last)
65
+ end
66
+
67
+ def test_get_popular_tags
68
+ fake("articles/tags.json?limit=1&popular=1", extension: false, method: :get, body: load_fixture('tags'))
69
+ tags = ShopifyAPI::Article.tags(popular: 1, limit: 1)
70
+ assert_equal(3, tags.length)
71
+ end
72
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ class AssetTest < Test::Unit::TestCase
5
+ def test_get_assetss
6
+ fake("themes/1/assets", method: :get, body: load_fixture('assets'))
7
+ ShopifyAPI::Asset.find(:all, params: { theme_id: 1 })
8
+ end
9
+
10
+ def test_get_asset_namespaced
11
+ fake(
12
+ "themes/1/assets.json?asset%5Bkey%5D=templates%2Findex.liquid&theme_id=1",
13
+ extension: false,
14
+ method: :get,
15
+ body: load_fixture('asset')
16
+ )
17
+ ShopifyAPI::Asset.find('templates/index.liquid', params: { theme_id: 1 })
18
+ end
19
+
20
+ def test_get_asset
21
+ fake(
22
+ "assets.json?asset%5Bkey%5D=templates%2Findex.liquid", extension: false, method: :get, body: load_fixture('asset')
23
+ )
24
+ ShopifyAPI::Asset.find('templates/index.liquid')
25
+ end
26
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+ require 'fulfillment_order_test_helper'
4
+
5
+ class AssignedFulFillmentOrderTest < Test::Unit::TestCase
6
+ include FulfillmentOrderTestHelper
7
+
8
+ def setup
9
+ super
10
+ @url_prefix = url_prefix_for_activated_session_for('2020-01')
11
+ @fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
12
+ end
13
+
14
+ context "AssignedFulfillmentOrder" do
15
+ context ".new" do
16
+ should "raise NotImplementedError when api_version is older than 2020-01" do
17
+ url_prefix_for_activated_session_for('2019-10')
18
+
19
+ assert_raises(NotImplementedError) do
20
+ ShopifyAPI::AssignedFulfillmentOrder.new(ActiveSupport::JSON.decode(@fulfillment_order_fixture))
21
+ end
22
+ end
23
+ end
24
+
25
+ context "#all" do
26
+ should "raise NotImplementedError when api_version is older than 2020-01" do
27
+ @url_prefix = url_prefix_for_activated_session_for('2019-10')
28
+
29
+ fake 'assigned_fulfillment_orders',
30
+ url: "#{@url_prefix}/assigned_fulfillment_orders.json",
31
+ method: :get,
32
+ body: @fulfillment_order_fixture,
33
+ extension: false
34
+
35
+ assert_raises(NotImplementedError) do
36
+ ShopifyAPI::AssignedFulfillmentOrder.all(params: { assigned_status: 'cancellation_requested' })
37
+ end
38
+ end
39
+
40
+ should "list assigned fulfillment orders by assigned_status" do
41
+ fake 'assigned_fulfillment_orders',
42
+ url: "#{@url_prefix}/assigned_fulfillment_orders.json?assigned_status=cancellation_requested",
43
+ method: :get,
44
+ body: @fulfillment_order_fixture,
45
+ extension: false
46
+
47
+ assigned_fulfillment_orders = ShopifyAPI::AssignedFulfillmentOrder.all(
48
+ params: { assigned_status: 'cancellation_requested' }
49
+ )
50
+
51
+ assert_equal 2, assigned_fulfillment_orders.count
52
+ assigned_fulfillment_orders.each do |fulfillment_order|
53
+ assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
54
+ assert_equal 'in_progress', fulfillment_order.status
55
+ assert_equal 'cancellation_accepted', fulfillment_order.request_status
56
+ end
57
+ end
58
+
59
+ should "be able to list assigned fulfillment orders by location_ids" do
60
+ assigned_location_id = 905684977
61
+ fake 'assigned_fulfillment_orders',
62
+ url: "#{@url_prefix}/assigned_fulfillment_orders.json?location_ids%5B%5D=#{assigned_location_id}",
63
+ method: :get,
64
+ body: @fulfillment_order_fixture, extension: false
65
+
66
+ assigned_fulfillment_orders = ShopifyAPI::AssignedFulfillmentOrder.all(
67
+ params: { location_ids: [assigned_location_id] }
68
+ )
69
+
70
+ assert_equal 2, assigned_fulfillment_orders.count
71
+ assigned_fulfillment_orders.each do |fulfillment_order|
72
+ assert fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder)
73
+ assert_equal assigned_location_id, fulfillment_order.assigned_location_id
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
data/test/base_test.rb ADDED
@@ -0,0 +1,213 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+ require "active_support/log_subscriber/test_helper"
4
+
5
+ class BaseTest < Test::Unit::TestCase
6
+ def setup
7
+ super
8
+ @session1 = ShopifyAPI::Session.new(domain: 'shop1.myshopify.com', token: 'token1', api_version: '2019-01')
9
+ @session2 = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: '2019-01')
10
+ end
11
+
12
+ def teardown
13
+ super
14
+ clear_header('X-Custom')
15
+ end
16
+
17
+ test '#activate_session should set site and headers for given session' do
18
+ ShopifyAPI::Base.activate_session(@session1)
19
+
20
+ assert_nil(ActiveResource::Base.site)
21
+ assert_equal('https://shop1.myshopify.com', ShopifyAPI::Base.site.to_s)
22
+ assert_equal('https://shop1.myshopify.com', ShopifyAPI::Shop.site.to_s)
23
+
24
+ assert_nil(ActiveResource::Base.headers['X-Shopify-Access-Token'])
25
+ assert_equal('token1', ShopifyAPI::Base.headers['X-Shopify-Access-Token'])
26
+ assert_equal('token1', ShopifyAPI::Shop.headers['X-Shopify-Access-Token'])
27
+ end
28
+
29
+ test '#clear_session should clear base site settings from Base' do
30
+ ShopifyAPI::Base.site = "https://foo:bar@www.zombo.com"
31
+
32
+ assert_equal("foo", ShopifyAPI::Base.user)
33
+ assert_equal("bar", ShopifyAPI::Base.password)
34
+
35
+ ShopifyAPI::Base.clear_session
36
+
37
+ assert_nil(ShopifyAPI::Base.user)
38
+ assert_nil(ShopifyAPI::Base.password)
39
+ assert_nil(ShopifyAPI::Base.site)
40
+ end
41
+
42
+ # test to check session reset api version remains the same after session reset
43
+ test '#clear_session should not change the api_version' do
44
+ ShopifyAPI::Base.site = "https://zoo:lion@www.zoo.com"
45
+
46
+ assert_equal("zoo", ShopifyAPI::Base.user)
47
+ assert_equal("lion", ShopifyAPI::Base.password)
48
+
49
+ ShopifyAPI::Base.clear_session
50
+
51
+ assert_nil(ShopifyAPI::Base.user)
52
+ assert_nil(ShopifyAPI::Base.password)
53
+ assert_nil(ShopifyAPI::Base.site)
54
+ assert_equal(ShopifyAPI::Base.api_version, @session1.api_version)
55
+ end
56
+
57
+ test '#clear_session should clear site and headers from Base' do
58
+ ShopifyAPI::Base.activate_session(@session1)
59
+ ShopifyAPI::Base.clear_session
60
+
61
+ assert_nil(ActiveResource::Base.site)
62
+ assert_nil(ShopifyAPI::Base.site)
63
+ assert_nil(ShopifyAPI::Shop.site)
64
+
65
+ assert_nil(ActiveResource::Base.headers['X-Shopify-Access-Token'])
66
+ assert_nil(ShopifyAPI::Base.headers['X-Shopify-Access-Token'])
67
+ assert_nil(ShopifyAPI::Shop.headers['X-Shopify-Access-Token'])
68
+ end
69
+
70
+ test '#activate_session with one session, then clearing and activating with another session should send request to correct shop' do
71
+ ShopifyAPI::Base.activate_session(@session1)
72
+ ShopifyAPI::Base.clear_session
73
+ ShopifyAPI::Base.activate_session(@session2)
74
+
75
+ assert_nil(ActiveResource::Base.site)
76
+ assert_equal('https://shop2.myshopify.com', ShopifyAPI::Base.site.to_s)
77
+ assert_equal('https://shop2.myshopify.com', ShopifyAPI::Shop.site.to_s)
78
+
79
+ assert_nil(ActiveResource::Base.headers['X-Shopify-Access-Token'])
80
+ assert_equal('token2', ShopifyAPI::Base.headers['X-Shopify-Access-Token'])
81
+ assert_equal('token2', ShopifyAPI::Shop.headers['X-Shopify-Access-Token'])
82
+ end
83
+
84
+ test '#activate_session with nil raises an InvalidSessionError' do
85
+ assert_raises(ShopifyAPI::Base::InvalidSessionError) do
86
+ ShopifyAPI::Base.activate_session(nil)
87
+ end
88
+ end
89
+
90
+ test "#delete should send custom headers with request" do
91
+ ShopifyAPI::Base.activate_session(@session1)
92
+ ShopifyAPI::Base.headers['X-Custom'] = 'abc'
93
+ ShopifyAPI::Base.connection
94
+ .expects(:delete)
95
+ .with('/admin/api/2019-01/bases/1.json', has_entry('X-Custom', 'abc'))
96
+ ShopifyAPI::Base.delete("1")
97
+ end
98
+
99
+ test "#headers includes the User-Agent" do
100
+ assert_not_includes ActiveResource::Base.headers.keys, 'User-Agent'
101
+ assert_includes(ShopifyAPI::Base.headers.keys, 'User-Agent')
102
+ thread = Thread.new do
103
+ assert_includes(ShopifyAPI::Base.headers.keys, 'User-Agent')
104
+ end
105
+ thread.join
106
+ end
107
+
108
+ test "prefix= will forward to resource when the value does not start with admin" do
109
+ session = ShopifyAPI::Session.new(domain: 'shop1.myshopify.com', token: 'token1', api_version: '2019-01')
110
+ ShopifyAPI::Base.activate_session(session)
111
+ silence_warnings do
112
+ TestResource.prefix = 'a/regular/path/'
113
+ end
114
+
115
+ assert_equal('/admin/api/2019-01/a/regular/path/', TestResource.prefix)
116
+ end
117
+
118
+ test "prefix= will raise an error if value starts with with /admin" do
119
+ assert_raises(ArgumentError) do
120
+ TestResource.prefix = '/admin/old/prefix/structure/'
121
+ end
122
+ end
123
+
124
+ test "#headers propagates changes to subclasses" do
125
+ ShopifyAPI::Base.headers['X-Custom'] = "the value"
126
+ assert_equal("the value", ShopifyAPI::Base.headers['X-Custom'])
127
+ assert_equal("the value", ShopifyAPI::Product.headers['X-Custom'])
128
+ end
129
+
130
+ test "#headers clears changes to subclasses" do
131
+ ShopifyAPI::Base.headers['X-Custom'] = "the value"
132
+ assert_equal("the value", ShopifyAPI::Product.headers['X-Custom'])
133
+ ShopifyAPI::Base.headers['X-Custom'] = nil
134
+ assert_nil(ShopifyAPI::Product.headers['X-Custom'])
135
+ end
136
+
137
+ test "#headers set in the main thread affect spawned threads" do
138
+ ShopifyAPI::Base.headers['X-Custom'] = "the value"
139
+ Thread.new do
140
+ assert_equal("the value", ShopifyAPI::Base.headers['X-Custom'])
141
+ end.join
142
+ end
143
+
144
+ test "#headers set in spawned threads do not affect the main thread" do
145
+ Thread.new do
146
+ ShopifyAPI::Base.headers['X-Custom'] = "the value"
147
+ end.join
148
+ assert_nil(ShopifyAPI::Base.headers['X-Custom'])
149
+ end
150
+
151
+ test "using a different version changes the url" do
152
+ release_2019_01 = ShopifyAPI::Session.new(domain: 'shop1.myshopify.com', token: 'token1', api_version: '2019-01')
153
+ unstable_version = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: :unstable)
154
+
155
+ fake(
156
+ "shop",
157
+ url: "https://shop1.myshopify.com/admin/api/2019-01/shop.json",
158
+ method: :get,
159
+ status: 201,
160
+ body: '{ "shop": { "id": 1 } }'
161
+ )
162
+ fake(
163
+ "shop",
164
+ url: "https://shop2.myshopify.com/admin/api/unstable/shop.json",
165
+ method: :get,
166
+ status: 201,
167
+ body: '{ "shop": { "id": 2 } }'
168
+ )
169
+
170
+ ShopifyAPI::Base.activate_session(release_2019_01)
171
+ assert_equal(1, ShopifyAPI::Shop.current.id)
172
+
173
+ ShopifyAPI::Base.activate_session(unstable_version)
174
+ assert_equal(2, ShopifyAPI::Shop.current.id)
175
+ end
176
+
177
+ test "#api_version= should set ApiVersion" do
178
+ ShopifyAPI::Base.api_version = '2019-04'
179
+ assert_equal('2019-04', ShopifyAPI::Base.api_version.to_s)
180
+ end
181
+
182
+ test "#api_version= nil should set ApiVersion to ShopifyAPI::ApiVersion::NullVersion" do
183
+ ShopifyAPI::Base.api_version = nil
184
+ assert_equal(ShopifyAPI::ApiVersion::NullVersion, ShopifyAPI::Base.api_version)
185
+ end
186
+
187
+ test "#api_version= ShopifyAPI::ApiVersion::NullVersion should set ApiVersion to ShopifyAPI::ApiVersion::NullVersion" do
188
+ ShopifyAPI::Base.api_version = ShopifyAPI::ApiVersion::NullVersion
189
+ assert_equal(ShopifyAPI::ApiVersion::NullVersion, ShopifyAPI::Base.api_version)
190
+ end
191
+
192
+ test "#version_validation! does not raise is api_version is newer or equal to minimum supported version" do
193
+ ShopifyAPI::Base.api_version = '2020-01'
194
+ assert_nil(ShopifyAPI::Base::version_validation!('2020-01'))
195
+ end
196
+
197
+ test "#version_validation! raises NotImplemetedError if api_version is older than minimum supported version" do
198
+ ShopifyAPI::Base.api_version = '2019-10'
199
+ exception = assert_raises(NotImplementedError) do
200
+ ShopifyAPI::Base::version_validation!('2020-01')
201
+ end
202
+ assert_equal('The minimum supported version is 2020-01.', exception.message)
203
+ end
204
+
205
+ def clear_header(header)
206
+ [ActiveResource::Base, ShopifyAPI::Base, ShopifyAPI::Product].each do |klass|
207
+ klass.headers.delete(header)
208
+ end
209
+ end
210
+
211
+ class TestResource < ShopifyAPI::Base
212
+ end
213
+ end
data/test/blog_test.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+ class BlogTest < Test::Unit::TestCase
4
+ test "blog creation" do
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)
8
+ end
9
+ end