draft_order_test.rb 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. require 'test_helper'
  2. class DraftOrderTest < Test::Unit::TestCase
  3. def setup
  4. super
  5. fake 'draft_orders/517119332', body: load_fixture('draft_order')
  6. @draft_order = ShopifyAPI::DraftOrder.find(517119332)
  7. end
  8. def test_get_draft_order
  9. fake 'draft_orders/517119332', method: :get, status: 200, body: load_fixture('draft_order')
  10. draft_order = ShopifyAPI::DraftOrder.find(517119332)
  11. assert_equal 517119332, draft_order.id
  12. end
  13. def test_get_all_draft_orders
  14. fake 'draft_orders', method: :get, status: 200, body: load_fixture('draft_orders')
  15. draft_orders = ShopifyAPI::DraftOrder.all
  16. assert_equal 1, draft_orders.length
  17. assert_equal 517119332, draft_orders.first.id
  18. end
  19. def test_get_count_draft_orders
  20. fake 'draft_orders/count', method: :get, status: 200, body: '{"count": 16}'
  21. draft_orders_count = ShopifyAPI::DraftOrder.count
  22. assert_equal 16, draft_orders_count
  23. end
  24. def test_create_draft_order
  25. fake 'draft_orders', method: :post, status: 201, body: load_fixture('draft_order')
  26. draft_order = ShopifyAPI::DraftOrder.create(line_items: [{ quantity: 1, variant_id: 39072856 }])
  27. assert_equal '{"draft_order":{"line_items":[{"quantity":1,"variant_id":39072856}]}}', WebMock.last_request.body
  28. assert_equal 39072856, draft_order.line_items.first.variant_id
  29. end
  30. def test_create_draft_order_202
  31. fake 'draft_orders', method: :post, status: 202, body: load_fixture('draft_order')
  32. draft_order = ShopifyAPI::DraftOrder.create(line_items: [{ quantity: 1, variant_id: 39072856 }])
  33. assert_equal 39072856, draft_order.line_items.first.variant_id
  34. end
  35. def test_update_draft_order
  36. draft_order_response = ActiveSupport::JSON.decode(load_fixture('draft_order'))
  37. draft_order_response['draft_order']['note'] = 'Test new note'
  38. @draft_order.note = 'Test new note'
  39. fake 'draft_orders/517119332', method: :put, status: 200, body: ActiveSupport::JSON.encode(draft_order_response)
  40. @draft_order.save
  41. assert_equal draft_order_response['draft_order']['note'], @draft_order.note
  42. end
  43. def test_send_invoice_with_no_params
  44. draft_order_invoice_fixture = load_fixture('draft_order_invoice')
  45. draft_order_invoice = ActiveSupport::JSON.decode(draft_order_invoice_fixture)
  46. fake 'draft_orders/517119332/send_invoice', method: :post, body: draft_order_invoice_fixture
  47. draft_order_invoice_response = @draft_order.send_invoice
  48. assert_equal '{"draft_order_invoice":{}}', WebMock.last_request.body
  49. assert_kind_of ShopifyAPI::DraftOrderInvoice, draft_order_invoice_response
  50. assert_equal draft_order_invoice['draft_order_invoice']['to'], draft_order_invoice_response.to
  51. end
  52. def test_send_invoice_with_params
  53. draft_order_invoice_fixture = load_fixture('draft_order_invoice')
  54. draft_order_invoice = ActiveSupport::JSON.decode(draft_order_invoice_fixture)
  55. fake 'draft_orders/517119332/send_invoice', method: :post, body: draft_order_invoice_fixture
  56. draft_order_invoice_response = @draft_order.send_invoice(ShopifyAPI::DraftOrderInvoice.new(draft_order_invoice['draft_order_invoice']))
  57. assert_equal draft_order_invoice, ActiveSupport::JSON.decode(WebMock.last_request.body)
  58. assert_kind_of ShopifyAPI::DraftOrderInvoice, draft_order_invoice_response
  59. assert_equal draft_order_invoice['draft_order_invoice']['to'], draft_order_invoice_response.to
  60. end
  61. def test_delete_draft_order
  62. fake 'draft_orders/517119332', method: :delete, body: 'destroyed'
  63. assert @draft_order.destroy
  64. end
  65. def test_add_metafields_to_draft_order
  66. fake 'draft_orders/517119332/metafields', method: :post, status: 201, body: load_fixture('metafield')
  67. field = @draft_order.add_metafield(ShopifyAPI::Metafield.new(namespace: 'contact', key: 'email', value: '123@example.com', value_type: 'string'))
  68. assert_equal ActiveSupport::JSON.decode('{"metafield":{"namespace":"contact","key":"email","value":"123@example.com","value_type":"string"}}'), ActiveSupport::JSON.decode(WebMock.last_request.body)
  69. assert !field.new_record?
  70. assert_equal 'contact', field.namespace
  71. assert_equal 'email', field.key
  72. assert_equal '123@example.com', field.value
  73. end
  74. def test_get_all_metafields_for_draft_order
  75. fake 'draft_orders/517119332/metafields', body: load_fixture('metafields')
  76. metafields = @draft_order.metafields
  77. assert_equal 3, metafields.length
  78. assert metafields.all? { |m| m.is_a?(ShopifyAPI::Metafield) }
  79. end
  80. def test_get_2_metafields_for_draft_order
  81. body = ActiveSupport::JSON.decode load_fixture 'metafields'
  82. body['metafields'].slice! 2, 1
  83. fake 'draft_orders/517119332/metafields.json?limit=2', body: body.to_json, extension: false
  84. metafields = @draft_order.metafields limit: 2
  85. assert_equal 2, metafields.length
  86. assert metafields.all?{ |m| m.is_a? ShopifyAPI::Metafield }
  87. end
  88. def test_complete_draft_order_with_no_params
  89. completed_fixture = load_fixture('draft_order_completed')
  90. completed_draft = ActiveSupport::JSON.decode(completed_fixture)['draft_order']
  91. fake 'draft_orders/517119332/complete', method: :put, status: 200, body: completed_fixture
  92. @draft_order.complete
  93. assert_equal completed_draft['status'], @draft_order.status
  94. assert_equal completed_draft['order_id'], @draft_order.order_id
  95. refute_nil @draft_order.completed_at
  96. end
  97. def test_complete_draft_order_with_params
  98. completed_fixture = load_fixture('draft_order_completed')
  99. completed_draft = ActiveSupport::JSON.decode(completed_fixture)['draft_order']
  100. complete_params = { payment_pending: true }
  101. fake 'draft_orders/517119332/complete.json?payment_pending=true', extension: false, method: :put, status: 200, body: completed_fixture
  102. @draft_order.complete(complete_params)
  103. assert_equal completed_draft['status'], @draft_order.status
  104. assert_equal completed_draft['order_id'], @draft_order.order_id
  105. refute_nil @draft_order.completed_at
  106. end
  107. end