Skip to content

Commit

Permalink
Merge pull request #2495 from jhawthorn/avoid_json_infinity
Browse files Browse the repository at this point in the history
 Avoid JSON serializing Float::INFINITY
  • Loading branch information
jhawthorn authored Jan 25, 2018
2 parents afdb7f9 + aaaef13 commit 51253a8
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
1 change: 0 additions & 1 deletion api/app/views/spree/api/variants/_big.json.jbuilder
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
json.cache! [I18n.locale, Spree::StockLocation.accessible_by(current_ability), variant] do
json.(variant, *variant_attributes)
json.partial!("spree/api/variants/small", variant: variant)
json.total_on_hand(variant.total_on_hand)
json.variant_properties(variant.variant_properties) do |variant_property|
json.(variant_property, *variant_property_attributes)
end
Expand Down
7 changes: 6 additions & 1 deletion api/app/views/spree/api/variants/_small.json.jbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ json.cache! [I18n.locale, variant] do
json.track_inventory(variant.should_track_inventory?)
json.in_stock(variant.in_stock?)
json.is_backorderable(variant.is_backorderable?)
json.total_on_hand(variant.total_on_hand)

# We can't represent Float::INFINITY in JSON
# Under JSON this woulb be NULL
# Under oj this would error
json.total_on_hand(variant.should_track_inventory? ? variant.total_on_hand : nil)

json.is_destroyed(variant.destroyed?)
json.option_values(variant.option_values) do |option_value|
json.(option_value, *option_value_attributes)
Expand Down
16 changes: 16 additions & 0 deletions api/spec/requests/spree/api/orders_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,22 @@ module Spree
end
end

context 'when an item does not track inventory' do
before do
order.line_items.first.variant.update_attributes!(track_inventory: false)
end

it 'contains stock information on variant' do
subject
variant = json_response['line_items'][0]['variant']
expect(variant).to_not be_nil
expect(variant['in_stock']).to eq(true)
expect(variant['total_on_hand']).to eq(nil)
expect(variant['is_backorderable']).to eq(true)
expect(variant['is_destroyed']).to eq(false)
end
end

context 'when shipment adjustments are present' do
before do
order.shipments.first.adjustments << adjustment
Expand Down

0 comments on commit 51253a8

Please sign in to comment.