order_test.rb 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. require 'test_helper'
  2. require 'fulfillment_order_test_helper'
  3. class OrderTest < Test::Unit::TestCase
  4. include FulfillmentOrderTestHelper
  5. test "create should create order" do
  6. fake('orders', method: :post, status: 201, body: load_fixture('order'))
  7. order = ShopifyAPI::Order.create(
  8. line_items: [{ quantity: 1, variant_id: 39072856 }],
  9. financial_status: "authorized"
  10. )
  11. assert_equal(39072856, order.line_items.first.variant_id)
  12. end
  13. test "create should create an order with custom properties" do
  14. props = [
  15. {
  16. "By default may label with \"Roasted for ": {
  17. "Your First Name": {
  18. "\". If you want something specific on the label, enter it here:": "",
  19. },
  20. },
  21. },
  22. ]
  23. fake('orders', method: :post, status: 201, body: load_fixture('order_with_properties'))
  24. order = ShopifyAPI::Order.create(
  25. line_items: [{ quantity: 1, variant_id: 39072856, properties: props }],
  26. financial_status: "authorized"
  27. )
  28. assert_equal(39072856, order.line_items.first.variant_id)
  29. end
  30. test "get should get an order" do
  31. fake('orders/450789469', method: :get, status: 200, body: load_fixture('order'))
  32. order = ShopifyAPI::Order.find(450789469)
  33. assert_equal(450789469, order.id)
  34. end
  35. test "get should get an order with custom properties" do
  36. fake('orders/450789469', method: :get, status: 200, body: load_fixture('order_with_properties'))
  37. order = ShopifyAPI::Order.find(450789469)
  38. assert_equal(450789469, order.id)
  39. end
  40. test "get all should get all orders" do
  41. fake('orders', method: :get, status: 200, body: load_fixture('orders'))
  42. order = ShopifyAPI::Order.all
  43. assert_equal(450789469, order.first.id)
  44. end
  45. test "add note should add a note to order" do
  46. fake('orders/450789469', method: :get, status: 200, body: load_fixture('order'))
  47. order = ShopifyAPI::Order.find(450789469)
  48. order.note = "Test note"
  49. fake('orders/450789469', method: :put, status: 200, body: load_fixture('order'))
  50. order.save
  51. assert_equal("Test note", order.note)
  52. end
  53. test "delete should delete an order" do
  54. fake('orders/450789469', method: :get, status: 200, body: load_fixture('order'))
  55. fake('orders/450789469', method: :delete, body: 'destroyed')
  56. order = ShopifyAPI::Order.find(450789469)
  57. assert(order.destroy)
  58. end
  59. test "cancel an order with params" do
  60. fake('orders/450789469', method: :get, status: 200, body: load_fixture('order'))
  61. fake('orders/450789469/cancel', method: :post, body: load_fixture('order'))
  62. order = ShopifyAPI::Order.find(450789469)
  63. order.cancel(email: false, restock: true)
  64. assert_request_body({ 'email' => false, 'restock' => true }.to_json)
  65. end
  66. test "capture an order with currency param" do
  67. fake('orders/450789469', body: load_fixture('order'))
  68. order = ShopifyAPI::Order.find(450789469)
  69. fake('orders/450789469/transactions', method: :post, status: 201, body: load_fixture('transaction'))
  70. order.capture(100.00, currency: 'CAD')
  71. assert_request_body({
  72. transaction: {
  73. amount: 100.00,
  74. kind: 'capture',
  75. currency: 'CAD',
  76. },
  77. }.to_json)
  78. end
  79. test "fulfillment_orders should get fulfillment orders for an order with 2020-01 version" do
  80. url_prefix = url_prefix_for_activated_session_for('2020-01')
  81. fake(
  82. 'orders',
  83. url: "#{url_prefix}/orders/450789469.json",
  84. method: :get,
  85. status: 200,
  86. body: load_fixture('order'),
  87. extension: false
  88. )
  89. order = ShopifyAPI::Order.find(450789469)
  90. fake(
  91. 'orders',
  92. url: "#{url_prefix}/orders/450789469/fulfillment_orders.json",
  93. method: :get,
  94. status: 200,
  95. body: load_fixture('fulfillment_orders'),
  96. extension: false
  97. )
  98. fulfillment_orders = order.fulfillment_orders
  99. assert_equal([519788021, 519788022], fulfillment_orders.map(&:id).sort)
  100. fulfillment_orders.each do |fulfillment_order|
  101. assert(fulfillment_order.is_a?(ShopifyAPI::FulfillmentOrder))
  102. assert_equal(450789469, fulfillment_order.order_id)
  103. end
  104. end
  105. test "fulfillment_orders raises NotImplementedError when api_version is older than 2020-01" do
  106. url_prefix = url_prefix_for_activated_session_for('2019-10')
  107. fake(
  108. 'orders',
  109. url: "#{url_prefix}/orders/450789469.json",
  110. method: :get,
  111. status: 200,
  112. body: load_fixture('order'),
  113. extension: false
  114. )
  115. order = ShopifyAPI::Order.find(450789469)
  116. assert_raises(NotImplementedError) do
  117. order.fulfillment_orders
  118. end
  119. end
  120. end