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