Skip to content

Commit

Permalink
Avoid JSON serializing Float::INFINITY
Browse files Browse the repository at this point in the history
This works fine under the default JSON library (it ends up being NULL),
but it errors under OJ.
  • Loading branch information
jhawthorn committed Jan 25, 2018
1 parent 5a9ebb8 commit aaaef13
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
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 aaaef13

Please sign in to comment.