Skip to content

Commit

Permalink
Do not allow deprecated product and variant inventory-related fields …
Browse files Browse the repository at this point in the history
…in 2019-10 and later
  • Loading branch information
djhoughton committed Mar 19, 2020
1 parent ed26a0e commit 4235a6f
Show file tree
Hide file tree
Showing 5 changed files with 181 additions and 1 deletion.
21 changes: 21 additions & 0 deletions lib/shopify_api/resources/product.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ def price_range
end
end

def total_inventory=(new_value)
raise_deprecated_inventory_call('total_inventory') unless allow_inventory_params?
super
end

def serializable_hash(options = {})
allow_inventory_params? ? super(options) : super(options).except('total_inventory')
end

def collections
CustomCollection.find(:all, :params => {:product_id => self.id})
end
Expand All @@ -31,5 +40,17 @@ def add_to_collection(collection)
def remove_from_collection(collection)
collection.remove_product(self)
end

private

def raise_deprecated_inventory_call(parameter)
raise(ShopifyAPI::ValidationException,
"'#{parameter}' is deprecated - see https://help.shopify.com/en/api/guides/inventory-migration-guide",
)
end

def allow_inventory_params?
Base.api_version < ApiVersion.find_version('2019-10')
end
end
end
31 changes: 31 additions & 0 deletions lib/shopify_api/resources/variant.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,36 @@ class Variant < Base
include DisablePrefixCheck

conditional_prefix :product

def inventory_quantity_adjustment=(new_value)
raise_deprecated_inventory_call('inventory_quantity_adjustment') unless allow_inventory_params?
super
end

def inventory_quantity=(new_value)
raise_deprecated_inventory_call('inventory_quantity') unless allow_inventory_params?
super
end

def old_inventory_quantity=(new_value)
raise_deprecated_inventory_call('old_inventory_quantity') unless allow_inventory_params?
super
end

def serializable_hash(options = {})
allow_inventory_params? ? super(options) : super(options).except('inventory_quantity', 'old_inventory_quantity')
end

private

def raise_deprecated_inventory_call(parameter)
raise(ShopifyAPI::ValidationException,
"'#{parameter}' is deprecated - see https://help.shopify.com/en/api/guides/inventory-migration-guide",
)
end

def allow_inventory_params?
Base.api_version < ApiVersion.find_version('2019-10')
end
end
end
39 changes: 39 additions & 0 deletions test/product_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,43 @@ def test_price_range_when_has_different_price

assert_equal('100.00 - 199.00', @product.price_range)
end

def test_deprecated_variant_inventory_fields_are_included_in_2019_07
ShopifyAPI::Base.api_version = '2019-07'
variant = @product.variants.first
assert variant.as_json.include?('inventory_quantity')
end

def test_deprecated_variant_inventory_fields_are_removed_in_2020_01
ShopifyAPI::Base.api_version = '2020-01'
variant = @product.variants.first
refute variant.as_json.include?('inventory_quantity')
end

def test_deprecated_inventory_fields_are_removed_in_2020_01
ShopifyAPI::Base.api_version = '2020-01'
refute @product.as_json.include?('total_inventory')
end

def test_setting_product_total_inventory_passes_in_api_before_2019_10
ShopifyAPI::Base.api_version = '2019-07'
fake("products/632910392", {:body => load_fixture('product')})
@product.total_inventory = 8
end

def test_setting_product_total_inventory_fails_in_2019_10_api
ShopifyAPI::Base.api_version = '2019-10'
fake("products/632910392", {:body => load_fixture('product')})
assert_raises(ShopifyAPI::ValidationException) do
@product.total_inventory = 8
end
end

def test_setting_product_total_inventory_fails_in_the_unstable_api
ShopifyAPI::Base.api_version = :unstable
fake("products/632910392", {:body => load_fixture('product')})
assert_raises(ShopifyAPI::ValidationException) do
@product.total_inventory = 8
end
end
end
2 changes: 1 addition & 1 deletion test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def fake(endpoint, options={})
body = options.has_key?(:body) ? options.delete(:body) : load_fixture(endpoint)
format = options.delete(:format) || :json
method = options.delete(:method) || :get
api_version = options.delete(:api_version) || ShopifyAPI::ApiVersion.find_version('2019-01')
api_version = options.delete(:api_version) || ShopifyAPI::Base.api_version
extension = ".#{options.delete(:extension)||'json'}" unless options[:extension]==false
status = options.delete(:status) || 200
url = if options.has_key?(:url)
Expand Down
89 changes: 89 additions & 0 deletions test/variant_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,93 @@ def test_delete_variant
v = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert v.destroy
end

def test_deprecated_inventory_fields_are_included_in_2019_07
ShopifyAPI::Base.api_version = '2019-07'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert variant.as_json.include?('inventory_quantity')
end

def test_deprecated_inventory_fields_are_removed_in_2020_01
ShopifyAPI::Base.api_version = '2020-01'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
refute variant.as_json.include?('inventory_quantity')
end

def test_setting_variant_inventory_quantity_adjustment_passes_in_api_before_2019_10
ShopifyAPI::Base.api_version = '2019-07'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
variant.inventory_quantity_adjustment = 8
end

def test_setting_variant_inventory_quantity_adjustment_fails_in_2019_10_api
ShopifyAPI::Base.api_version = '2019-10'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert_raises(ShopifyAPI::ValidationException) do
variant.inventory_quantity_adjustment = 8
end
end

def test_setting_variant_inventory_quantity_adjustment_fails_in_the_unstable_api
ShopifyAPI::Base.api_version = :unstable
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert_raises(ShopifyAPI::ValidationException) do
variant.inventory_quantity_adjustment = 8
end
end

def test_setting_variant_inventory_quantity_passes_in_api_before_2019_10
ShopifyAPI::Base.api_version = '2019-07'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
variant.inventory_quantity = 8
end

def test_setting_variant_inventory_quantity_fails_in_2019_10_api
ShopifyAPI::Base.api_version = '2019-10'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert_raises(ShopifyAPI::ValidationException) do
variant.inventory_quantity = 8
end
end

def test_setting_variant_inventory_quantity_fails_in_the_unstable_api
ShopifyAPI::Base.api_version = :unstable
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert_raises(ShopifyAPI::ValidationException) do
variant.inventory_quantity = 8
end
end

def test_setting_variant_old_inventory_quantity_passes_in_api_before_2019_10
ShopifyAPI::Base.api_version = '2019-07'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
variant.old_inventory_quantity = 8
end

def test_setting_variant_old_inventory_quantity_fails_in_2019_10_api
ShopifyAPI::Base.api_version = '2019-10'
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert_raises(ShopifyAPI::ValidationException) do
variant.old_inventory_quantity = 8
end
end

def test_setting_variant_old_inventory_quantity_fails_in_the_unstable_api
ShopifyAPI::Base.api_version = :unstable
fake "products/632910392/variants/808950810", :method => :get, :body => load_fixture('variant')
variant = ShopifyAPI::Variant.find(808950810, :params => {:product_id => 632910392})
assert_raises(ShopifyAPI::ValidationException) do
variant.old_inventory_quantity = 8
end
end
end

0 comments on commit 4235a6f

Please sign in to comment.