ruby_shopify_api 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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