Quellcode durchsuchen

Version validation for initializers in fulfillment_order and assgined_fulfillment_order

Lin Zhao vor 5 Jahren
Ursprung
Commit
fdc8ad76ed

+ 8 - 0
lib/shopify_api/resources/assigned_fulfillment_order.rb

@@ -1,6 +1,14 @@
 module ShopifyAPI
   class AssignedFulfillmentOrder < Base
+
+    def initialize(attributes = {}, persisted = false)
+      ShopifyAPI::Base.version_validation!(FulfillmentOrder::MINIMUM_VERSION)
+      super(attributes, persisted)
+    end
+
     def self.find(scope, *args)
+      ShopifyAPI::Base.version_validation!(FulfillmentOrder::MINIMUM_VERSION)
+
       assigned_fulfillment_orders = super(scope, *args)
       assigned_fulfillment_orders.map { |afo| FulfillmentOrder.new(afo.attributes) }
     end

+ 8 - 0
lib/shopify_api/resources/base.rb

@@ -132,6 +132,14 @@ module ShopifyAPI
         !!early_july_pagination
       end
 
+      def version_validation!(minimum_version)
+        available_in_version = ShopifyAPI::ApiVersion.find_version(minimum_version)
+
+        unless ShopifyAPI::Base.api_version >= available_in_version
+          raise NotImplementedError, "The minimum supported version is #{minimum_version}."
+        end
+      end
+
       private
 
       attr_accessor :early_july_pagination

+ 9 - 0
lib/shopify_api/resources/fulfillment_order.rb

@@ -1,6 +1,15 @@
 module ShopifyAPI
   class FulfillmentOrder < Base
+    MINIMUM_VERSION = '2020-01'
+
+    def initialize(attributes = {}, persisted = false)
+      ShopifyAPI::Base.version_validation!(MINIMUM_VERSION)
+      super(attributes, persisted)
+    end
+
     def self.find(scope, *args)
+      ShopifyAPI::Base.version_validation!(MINIMUM_VERSION)
+
       if scope == :all
         order_id = args.first&.dig(:params, :order_id)
         raise ShopifyAPI::ValidationException, "'order_id' is required" if order_id.blank?

+ 5 - 0
lib/shopify_api/resources/fulfillment_v2.rb

@@ -2,6 +2,11 @@ module ShopifyAPI
   class FulfillmentV2 < Base
     self.element_name = 'fulfillment'
 
+    def initialize(attributes = {}, persisted = false)
+      ShopifyAPI::Base.version_validation!(FulfillmentOrder::MINIMUM_VERSION)
+      super(attributes, persisted)
+    end
+
     def update_tracking(tracking_info:, notify_customer:)
       body = {
         fulfillment: {

+ 2 - 0
lib/shopify_api/resources/order.rb

@@ -31,6 +31,8 @@ module ShopifyAPI
     end
 
     def fulfillment_orders(options = {})
+      ShopifyAPI::Base.version_validation!(FulfillmentOrder::MINIMUM_VERSION)
+
       fulfillment_order_hashes = get(:fulfillment_orders, options)
       fulfillment_order_hashes.map { |fulfillment_order_hash| FulfillmentOrder.new(fulfillment_order_hash) }
     end

+ 42 - 6
test/assigned_fulfillment_order_test.rb

@@ -1,12 +1,47 @@
 require 'test_helper'
+require 'fulfillment_order_test_helper'
 
 class AssignedFulFillmentOrderTest < Test::Unit::TestCase
+  include FulfillmentOrderTestHelper
+
+  def setup
+    super
+    @url_prefix = url_prefix_for_activated_session_for('2020-01')
+    @fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
+  end
+
   context "AssignedFulfillmentOrder" do
+    context ".new" do
+      should "raise NotImplementedError when api_version is older than 2020-01" do
+        url_prefix_for_activated_session_for('2019-10')
+
+        assert_raises NotImplementedError do
+          ShopifyAPI::AssignedFulfillmentOrder.new(ActiveSupport::JSON.decode(@fulfillment_order_fixture))
+        end
+      end
+    end
+
     context "#all" do
+      should "raise NotImplementedError when api_version is older than 2020-01" do
+        @url_prefix = url_prefix_for_activated_session_for('2019-10')
+
+        fake 'assigned_fulfillment_orders',
+          url: "#{@url_prefix}/assigned_fulfillment_orders.json",
+          method: :get,
+          body: @fulfillment_order_fixture,
+          extension: false
+
+        assert_raises NotImplementedError do
+          ShopifyAPI::AssignedFulfillmentOrder.all(params: { assigned_status: 'cancellation_requested' })
+        end
+      end
+
       should "list assigned fulfillment orders by assigned_status" do
-        fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
-        fake 'assigned_fulfillment_orders.json?assigned_status=cancellation_requested', method: :get,
-             body: fulfillment_order_fixture, extension: false
+        fake 'assigned_fulfillment_orders',
+          url: "#{@url_prefix}/assigned_fulfillment_orders.json?assigned_status=cancellation_requested",
+          method: :get,
+          body: @fulfillment_order_fixture,
+          extension: false
 
         assigned_fulfillment_orders = ShopifyAPI::AssignedFulfillmentOrder.all(
             params: { assigned_status: 'cancellation_requested' }
@@ -21,10 +56,11 @@ class AssignedFulFillmentOrderTest < Test::Unit::TestCase
       end
 
       should "be able to list assigned fulfillment orders by location_ids" do
-        fulfillment_order_fixture = load_fixture('assigned_fulfillment_orders')
         assigned_location_id = 905684977
-        fake "assigned_fulfillment_orders.json?location_ids%5B%5D=#{assigned_location_id}", method: :get,
-             body: fulfillment_order_fixture, extension: false
+        fake 'assigned_fulfillment_orders',
+          url: "#{@url_prefix}/assigned_fulfillment_orders.json?location_ids%5B%5D=#{assigned_location_id}",
+          method: :get,
+          body: @fulfillment_order_fixture, extension: false
 
         assigned_fulfillment_orders = ShopifyAPI::AssignedFulfillmentOrder.all(
             params: { location_ids: [assigned_location_id] }

+ 14 - 0
test/base_test.rb

@@ -173,6 +173,20 @@ class BaseTest < Test::Unit::TestCase
     assert_equal ShopifyAPI::ApiVersion::NullVersion, ShopifyAPI::Base.api_version
   end
 
+  test "#version_validation! does not raise is api_version is newer or equal to minimum supported version" do
+    ShopifyAPI::Base.api_version = '2020-01'
+    assert_nil ShopifyAPI::Base::version_validation!('2020-01')
+  end
+
+  test "#version_validation! raises NotImplemetedError if api_version is older than minimum supported version" do
+    ShopifyAPI::Base.api_version = '2019-10'
+    exception = assert_raises NotImplementedError do
+      ShopifyAPI::Base::version_validation!('2020-01')
+    end
+    assert_equal 'The minimum supported version is 2020-01.', exception.message
+  end
+
+
   def clear_header(header)
     [ActiveResource::Base, ShopifyAPI::Base, ShopifyAPI::Product].each do |klass|
       klass.headers.delete(header)

+ 88 - 19
test/fulfillment_order_test.rb

@@ -1,16 +1,58 @@
 require 'test_helper'
+require 'fulfillment_order_test_helper'
 
 class FulFillmentOrderTest < Test::Unit::TestCase
+  include FulfillmentOrderTestHelper
+
   def setup
     super
-    fake "fulfillment_orders/519788021", method: :get,
-      body: load_fixture('fulfillment_order')
+    @url_prefix = url_prefix_for_activated_session_for('2020-01')
 
-    fake "orders/450789469/fulfillment_orders", method: :get,
-      body: load_fixture('fulfillment_orders')
+    fake 'fulfillment_orders',
+      url: "#{@url_prefix}/fulfillment_orders/519788021.json",
+      method: :get,
+      body: load_fixture('fulfillment_order')
   end
 
   context "FulfillmentOrder" do
+    context ".new" do
+      should "raise NotImplementedError when api_version is older than 2020-01" do
+        url_prefix_for_activated_session_for('2019-10')
+        fulfillment_order = load_fixture('fulfillment_order')
+
+        exception = assert_raises NotImplementedError do
+          ShopifyAPI::FulfillmentOrder.new(ActiveSupport::JSON.decode(fulfillment_order))
+        end
+        assert_equal(
+          "The minimum supported version is 2020-01.",
+          exception.message
+        )
+      end
+    end
+
+    context ".find and .all" do
+      should "raise NotImplementedError when api_version is older than 2020-01" do
+        @url_prefix = url_prefix_for_activated_session_for('2019-10')
+
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021.json",
+          method: :get,
+          body: load_fixture('fulfillment_order')
+
+        exception = assert_raises NotImplementedError do
+          ShopifyAPI::FulfillmentOrder.find(519788021)
+        end
+        assert_equal(
+          "The minimum supported version is 2020-01.",
+          exception.message
+        )
+
+        assert_raises NotImplementedError do
+          ShopifyAPI::FulfillmentOrder.all(params: { order_id: 450789469 })
+        end
+      end
+    end
+
     context "#find" do
       should "be able to find fulfillment order" do
         fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
@@ -22,7 +64,10 @@ class FulFillmentOrderTest < Test::Unit::TestCase
 
     context "#all" do
       should "be able to list fulfillment orders for an order" do
-        fake 'orders/450789469/fulfillment_orders', method: :get, body: load_fixture('fulfillment_orders')
+        fake 'orders',
+          url: "#{@url_prefix}/orders/450789469/fulfillment_orders.json",
+          method: :get,
+          body: load_fixture('fulfillment_orders')
 
         fulfillment_orders = ShopifyAPI::FulfillmentOrder.all(
           params: { order_id: 450789469 }
@@ -45,8 +90,10 @@ class FulFillmentOrderTest < Test::Unit::TestCase
     context "#fulfillments" do
       should "be able to list fulfillments for a fulfillment order" do
         fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
-        fake "fulfillment_orders/#{fulfillment_order.id}/fulfillments", method: :get,
-             body: load_fixture('fulfillments')
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/#{fulfillment_order.id}/fulfillments.json",
+          method: :get,
+          body: load_fixture('fulfillments')
 
         fulfillments = fulfillment_order.fulfillments
 
@@ -60,7 +107,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
     context "#locations_for_move" do
       should "be able to list locations for a fulfillment order" do
         fulfillment_order = ShopifyAPI::FulfillmentOrder.find(519788021)
-        fake "fulfillment_orders/#{fulfillment_order.id}/locations_for_move", method: :get,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/#{fulfillment_order.id}/locations_for_move.json",
+          method: :get,
           body: load_fixture('fulfillment_order_locations_for_move')
 
         locations_for_move = fulfillment_order.locations_for_move
@@ -91,7 +140,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
           moved_fulfillment_order: fake_moved_fulfillment_order,
           remaining_fulfillment_order: nil,
         }
-        fake "fulfillment_orders/519788021/move", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/move.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(body)
 
@@ -127,7 +178,10 @@ class FulFillmentOrderTest < Test::Unit::TestCase
           fulfillment_order: cancelled,
           replacement_fulfillment_order: fulfillment_order,
         }
-        fake "fulfillment_orders/519788021/cancel", :method => :post, :body => ActiveSupport::JSON.encode(body)
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/cancel.json",
+          :method => :post,
+          :body => ActiveSupport::JSON.encode(body)
 
         response_fulfillment_orders = fulfillment_order.cancel
 
@@ -152,7 +206,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
             message: "Test close message."
           }
         }
-        fake "fulfillment_orders/519788021/close", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/close.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(closed)
 
@@ -186,7 +242,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
             message: 'Fulfill this FO, please.'
           }
         }
-        fake "fulfillment_orders/519788021/fulfillment_request", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(body)
 
@@ -235,7 +293,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
             message: 'Fulfill this FO, please.'
           }
         }
-        fake "fulfillment_orders/519788021/fulfillment_request", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(body)
 
@@ -275,7 +335,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
         fake_response = {
           fulfillment_order: fulfillment_order.attributes.merge(status: 'in_progress', request_status: 'accepted')
         }
-        fake "fulfillment_orders/519788021/fulfillment_request/accept", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request/accept.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(fake_response)
 
@@ -300,7 +362,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
         fake_response = {
           fulfillment_order: fulfillment_order.attributes.merge(status: 'open', request_status: 'rejected')
         }
-        fake "fulfillment_orders/519788021/fulfillment_request/reject", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/fulfillment_request/reject.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(fake_response)
 
@@ -325,7 +389,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
         cancelling = ActiveSupport::JSON.decode(load_fixture('fulfillment_order'))
         cancelling['status'] = 'in_progress'
         cancelling['request_status'] = 'cancellation_requested'
-        fake "fulfillment_orders/519788021/cancellation_request", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/cancellation_request.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode({ fulfillment_order: cancelling })
 
@@ -351,7 +417,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
           fulfillment_order: fulfillment_order.attributes.merge(status: 'cancelled',
                                                                 request_status: 'cancellation_accepted')
         }
-        fake "fulfillment_orders/519788021/cancellation_request/accept", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/cancellation_request/accept.json",
+          :method => :post,
           :request_body => ActiveSupport::JSON.encode(request_body),
           :body => ActiveSupport::JSON.encode(fake_response)
 
@@ -377,7 +445,9 @@ class FulFillmentOrderTest < Test::Unit::TestCase
           fulfillment_order: fulfillment_order.attributes.merge(status: 'in_progress',
                                                                 request_status: 'cancellation_rejected')
         }
-        fake "fulfillment_orders/519788021/cancellation_request/reject", :method => :post,
+        fake 'fulfillment_orders',
+          url: "#{@url_prefix}/fulfillment_orders/519788021/cancellation_request/reject.json",
+          :method => :post,
           :request_body => request_body,
           :body => ActiveSupport::JSON.encode(fake_response)
 
@@ -388,6 +458,5 @@ class FulFillmentOrderTest < Test::Unit::TestCase
         assert_equal 'cancellation_rejected', fulfillment_order.request_status
       end
     end
-
   end
 end

+ 7 - 0
test/fulfillment_order_test_helper.rb

@@ -0,0 +1,7 @@
+module FulfillmentOrderTestHelper
+  def url_prefix_for_activated_session_for(version)
+    available_version = ShopifyAPI::Session.new(domain: 'shop2.myshopify.com', token: 'token2', api_version: version)
+    ShopifyAPI::Base.activate_session(available_version)
+    "https://shop2.myshopify.com/admin/api/#{version}"
+  end
+end

+ 45 - 3
test/fulfillment_test.rb

@@ -1,6 +1,9 @@
 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')
@@ -76,7 +79,10 @@ class FulFillmentTest < Test::Unit::TestCase
         }
         request_body = { fulfillment: create_fulfillment_attributes }
         response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
-        fake "fulfillments", :method => :post,
+        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)
 
@@ -85,6 +91,36 @@ class FulFillmentTest < Test::Unit::TestCase
         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
@@ -106,7 +142,10 @@ class FulFillmentTest < Test::Unit::TestCase
         }
         request_body = { fulfillment: create_fulfillment_attributes }
         response_body = { fulfillment: create_fulfillment_attributes.merge(id: 346743624) }
-        fake "fulfillments", :method => :post,
+        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)
 
@@ -164,7 +203,10 @@ class FulFillmentTest < Test::Unit::TestCase
             notify_customer: true
           }
         }
-        fake "fulfillments/#{fake_fulfillment['id']}/update_tracking", method: :post,
+        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)
 

+ 49 - 27
test/fulfillment_v2_test.rb

@@ -1,39 +1,61 @@
 require 'test_helper'
+require 'fulfillment_order_test_helper'
 
 class FulfillmentV2Test < Test::Unit::TestCase
+  include FulfillmentOrderTestHelper
+
+  def setup
+    super
+    @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)
+  end
+
   context "FulfillmentV2" do
     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]
+        fulfillment = ShopifyAPI::FulfillmentV2.new(id: @fake_fulfillment['id'])
+        assert fulfillment.update_tracking(tracking_info: @tracking_info, notify_customer: true)
 
-        request_body = {
-          fulfillment: {
-            tracking_info: tracking_info,
-            notify_customer: true
-          }
-        }
-        fake "fulfillments/#{fake_fulfillment['id']}/update_tracking", method: :post,
-          request_body: ActiveSupport::JSON.encode(request_body),
-          body: ActiveSupport::JSON.encode(fulfillment: fake_fulfillment)
+        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
 
-        fulfillment = ShopifyAPI::FulfillmentV2.new(id: fake_fulfillment['id'])
-        assert fulfillment.update_tracking(tracking_info: tracking_info, notify_customer: true)
+      should "raise NotImplementedError when api_version is older than 2020-01" do
+        @url_prefix = url_prefix_for_activated_session_for('2019-10')
+        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)
 
-        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
+        assert_raises NotImplementedError do
+          ShopifyAPI::FulfillmentV2.new(id: @fake_fulfillment['id'])
+        end
       end
     end
   end

+ 39 - 3
test/order_test.rb

@@ -1,6 +1,8 @@
 require 'test_helper'
+require 'fulfillment_order_test_helper'
 
 class OrderTest < Test::Unit::TestCase
+  include FulfillmentOrderTestHelper
 
   test "create should create order" do
     fake 'orders', :method => :post, :status => 201, :body => load_fixture('order')
@@ -73,11 +75,27 @@ class OrderTest < Test::Unit::TestCase
     }.to_json)
   end
 
-  test "fulfillment_orders should get fulfillment orders for an order" do
-    fake 'orders/450789469', body: load_fixture('order')
+  test "fulfillment_orders should get fulfillment orders for an order with 2020-01 version" do
+    url_prefix = url_prefix_for_activated_session_for('2020-01')
+
+    fake(
+      'orders',
+      url: "#{url_prefix}/orders/450789469.json",
+      method: :get,
+      status: 200,
+      body: load_fixture('order'),
+      extension: false
+    )
     order = ShopifyAPI::Order.find(450789469)
 
-    fake 'orders/450789469/fulfillment_orders', method: :get, body: load_fixture('fulfillment_orders')
+    fake(
+      'orders',
+      url: "#{url_prefix}/orders/450789469/fulfillment_orders.json",
+      method: :get,
+      status: 200,
+      body: load_fixture('fulfillment_orders'),
+      extension: false
+    )
     fulfillment_orders = order.fulfillment_orders
 
     assert_equal [519788021, 519788022], fulfillment_orders.map(&:id).sort
@@ -86,4 +104,22 @@ class OrderTest < Test::Unit::TestCase
       assert_equal 450789469, fulfillment_order.order_id
     end
   end
+
+  test "fulfillment_orders raises NotImplementedError when api_version is older than 2020-01" do
+    url_prefix = url_prefix_for_activated_session_for('2019-10')
+
+    fake(
+      'orders',
+      url: "#{url_prefix}/orders/450789469.json",
+      method: :get,
+      status: 200,
+      body: load_fixture('order'),
+      extension: false
+    )
+    order = ShopifyAPI::Order.find(450789469)
+
+    assert_raises NotImplementedError do
+      order.fulfillment_orders
+    end
+  end
 end