123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- # frozen_string_literal: true
- require 'test_helper'
- require 'fulfillment_order_test_helper'
- class FulFillmentTest < Test::Unit::TestCase
- include FulfillmentOrderTestHelper
- def setup
- super
- fake("orders/450789469/fulfillments/255858046", method: :get, body: load_fixture('fulfillment'))
- end
- context "Fulfillment" do
- context "#complete" do
- should "be able to complete fulfillment" do
- fulfillment = ShopifyAPI::Fulfillment.find(255858046, params: { order_id: 450789469 })
- success = ActiveSupport::JSON.decode(load_fixture('fulfillment'))
- success['fulfillment']['status'] = 'success'
- fake(
- "orders/450789469/fulfillments/255858046/complete", method: :post, body: ActiveSupport::JSON.encode(success)
- )
- assert_equal('pending', fulfillment.status)
- assert(fulfillment.complete)
- assert_equal('success', fulfillment.status)
- end
- end
- context "#cancel" do
- should "be able to cancel fulfillment" do
- fulfillment = ShopifyAPI::Fulfillment.find(255858046, params: { order_id: 450789469 })
- cancelled = ActiveSupport::JSON.decode(load_fixture('fulfillment'))
- cancelled['fulfillment']['status'] = 'cancelled'
- fake(
- "orders/450789469/fulfillments/255858046/cancel", method: :post, body: ActiveSupport::JSON.encode(cancelled)
- )
- assert_equal('pending', fulfillment.status)
- assert(fulfillment.cancel)
- assert_equal('cancelled', fulfillment.status)
- end
- end
- context "#open" do
- should "be able to open a fulfillment" do
- fulfillment = ShopifyAPI::Fulfillment.find(255858046, params: { order_id: 450789469 })
- open_fulfillment = ActiveSupport::JSON.decode(load_fixture('fulfillment'))
- open_fulfillment['fulfillment']['status'] = 'open'
- fake(
- "orders/450789469/fulfillments/255858046/open",
- method: :post,
- body: ActiveSupport::JSON.encode(open_fulfillment)
- )
- assert_equal('pending', fulfillment.status)
- assert(fulfillment.open)
- assert_equal('open', fulfillment.status)
- end
- end
- context "#find" do
- should "be able to find fulfillment" do
- fulfillment = ShopifyAPI::Fulfillment.find(255858046, params: { order_id: 450789469 })
- assert_equal(255858046, fulfillment.id)
- assert_equal(450789469, fulfillment.order_id)
- end
- end
- context "#create" do
- should "create a fulfillment with line_items_by_fulfillment_order" do
- create_fulfillment_attributes = {
- message: "The message for this FO fulfillment",
- notify_customer: true,
- tracking_info: {
- number: "XSDFHYR23475",
- url: "https://tracking.example.com/XSDFHYR23475",
- company: "TFTC - the fulfillment/tracking company",
- },
- line_items_by_fulfillment_order: [
- {
- fulfillment_order_id: 3,
- fulfillment_order_line_items: [{ id: 2, quantity: 1 }],
- },
- ],
- }
- request_body = { fulfillment: create_fulfillment_attributes }
- response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
- url_prefix = url_prefix_for_activated_session_for('2020-01')
- fake(
- 'fulfillments',
- url: "#{url_prefix}/fulfillments.json",
- method: :post,
- request_body: ActiveSupport::JSON.encode(request_body),
- body: ActiveSupport::JSON.encode(response_body)
- )
- fulfillment = ShopifyAPI::Fulfillment.create(create_fulfillment_attributes)
- assert(fulfillment.is_a?(ShopifyAPI::Fulfillment))
- assert(fulfillment.persisted?)
- assert_equal(346743624, fulfillment.id)
- end
- should "raise NotImplementedError when api_version is older than 2020-01" do
- create_fulfillment_attributes = {
- message: "The message for this FO fulfillment",
- notify_customer: true,
- tracking_info: {
- number: "XSDFHYR23475",
- url: "https://tracking.example.com/XSDFHYR23475",
- company: "TFTC - the fulfillment/tracking company",
- },
- line_items_by_fulfillment_order: [
- {
- fulfillment_order_id: 3,
- fulfillment_order_line_items: [{ id: 2, quantity: 1 }],
- },
- ],
- }
- request_body = { fulfillment: create_fulfillment_attributes }
- response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
- url_prefix = url_prefix_for_activated_session_for('2019-10')
- fake(
- 'fulfillments',
- url: "#{url_prefix}/fulfillments.json",
- method: :post,
- request_body: ActiveSupport::JSON.encode(request_body),
- body: ActiveSupport::JSON.encode(response_body)
- )
- assert_raises(NotImplementedError) do
- ShopifyAPI::Fulfillment.create(create_fulfillment_attributes)
- end
- end
- end
- context "#save" do
- should "save a fulfillment with line_items_by_fulfillment_order" do
- create_fulfillment_attributes = {
- message: "The message for this FO fulfillment",
- notify_customer: true,
- tracking_info: {
- number: "XSDFHYR23475",
- url: "https://tracking.example.com/XSDFHYR23475",
- company: "TFTC - the fulfillment/tracking company",
- },
- line_items_by_fulfillment_order: [
- {
- fulfillment_order_id: 3,
- fulfillment_order_line_items: [{ id: 2, quantity: 1 }],
- },
- ],
- }
- request_body = { fulfillment: create_fulfillment_attributes }
- response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
- url_prefix = url_prefix_for_activated_session_for('2020-01')
- fake(
- 'fulfillments',
- url: "#{url_prefix}/fulfillments.json",
- method: :post,
- request_body: ActiveSupport::JSON.encode(request_body),
- body: ActiveSupport::JSON.encode(response_body)
- )
- fulfillment = ShopifyAPI::Fulfillment.new(create_fulfillment_attributes)
- assert(fulfillment.save)
- assert(fulfillment.is_a?(ShopifyAPI::Fulfillment))
- assert(fulfillment.persisted?)
- assert_equal(346743624, fulfillment.id)
- end
- should "save a fulfillment without line_items_by_fulfillment_order" do
- order_id = 8
- create_fulfillment_attributes = {
- message: "The message for this FO fulfillment",
- notify_customer: true,
- tracking_info: {
- number: "XSDFHYR23475",
- url: "https://tracking.example.com/XSDFHYR23475",
- company: "TFTC - the fulfillment/tracking company",
- },
- }
- request_body = { fulfillment: create_fulfillment_attributes }
- response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
- fake(
- "orders/#{order_id}/fulfillments",
- method: :post,
- request_body: ActiveSupport::JSON.encode(request_body),
- body: ActiveSupport::JSON.encode(response_body)
- )
- fulfillment = ShopifyAPI::Fulfillment.new(create_fulfillment_attributes)
- fulfillment.prefix_options[:order_id] = order_id
- assert(fulfillment.save)
- assert(fulfillment.is_a?(ShopifyAPI::Fulfillment))
- assert(fulfillment.persisted?)
- assert_equal(346743624, fulfillment.id)
- end
- end
- context "#update_tracking" do
- should "be able to update tracking info for a fulfillment" do
- tracking_info = {
- number: 'JSDHFHAG',
- url: 'https://example.com/fulfillment_tracking/JSDHFHAG',
- company: 'ACME co',
- }
- fake_fulfillment = ActiveSupport::JSON.decode(load_fixture('fulfillment'))['fulfillment']
- fake_fulfillment['tracking_number'] = tracking_info[:number]
- fake_fulfillment['tracking_numbers'] = [tracking_info[:number]]
- fake_fulfillment['tracking_url'] = tracking_info[:url]
- fake_fulfillment['tracking_urls'] = [tracking_info[:url]]
- fake_fulfillment['tracking_company'] = tracking_info[:company]
- request_body = {
- fulfillment: {
- tracking_info: tracking_info,
- notify_customer: true,
- },
- }
- url_prefix = url_prefix_for_activated_session_for('2020-01')
- fake(
- 'fulfillments',
- url: "#{url_prefix}/fulfillments/#{fake_fulfillment['id']}/update_tracking.json",
- method: :post,
- request_body: ActiveSupport::JSON.encode(request_body),
- body: ActiveSupport::JSON.encode(fulfillment: fake_fulfillment)
- )
- fulfillment = ShopifyAPI::Fulfillment.new(id: fake_fulfillment['id'])
- assert(fulfillment.update_tracking(tracking_info: tracking_info, notify_customer: true))
- assert_equal(tracking_info[:number], fulfillment.tracking_number)
- assert_equal([tracking_info[:number]], fulfillment.tracking_numbers)
- assert_equal(tracking_info[:url], fulfillment.tracking_url)
- assert_equal([tracking_info[:url]], fulfillment.tracking_urls)
- assert_equal(tracking_info[:company], fulfillment.tracking_company)
- end
- end
- end
- end
|