diff --git a/api/app/controllers/spree/api/variants_controller.rb b/api/app/controllers/spree/api/variants_controller.rb index b3e1e1f55bf..0e8a92a8cae 100644 --- a/api/app/controllers/spree/api/variants_controller.rb +++ b/api/app/controllers/spree/api/variants_controller.rb @@ -63,7 +63,7 @@ def scope end variants = variants.accessible_by(current_ability, :read) - variants = variants.in_stock if params[:in_stock_only] || cannot?(:view_out_of_stock, Spree::Variant) + variants = variants.in_stock if params[:in_stock_only] == "true" || cannot?(:view_out_of_stock, Spree::Variant) variants end diff --git a/api/spec/controllers/spree/api/variants_controller_spec.rb b/api/spec/controllers/spree/api/variants_controller_spec.rb index 31af59e4176..f601ff80e4e 100644 --- a/api/spec/controllers/spree/api/variants_controller_spec.rb +++ b/api/spec/controllers/spree/api/variants_controller_spec.rb @@ -90,27 +90,57 @@ module Spree end context "stock filtering" do - subject { api_get :index, in_stock_only: true } + subject { api_get :index, in_stock_only: in_stock_only } - context "variant is out of stock" do - before do - variant.stock_items.update_all(count_on_hand: 0) + context "in stock requested" do + let(:in_stock_only) { "true" } + + context "variant is out of stock" do + before do + variant.stock_items.update_all(count_on_hand: 0) + end + + it "is not returned in the results" do + subject + expect(json_response["variants"].count).to eq 0 + end end - it "is not returned in the results" do - subject - expect(json_response["variants"].count).to eq 0 + context "variant is in stock" do + before do + variant.stock_items.update_all(count_on_hand: 10) + end + + it "is returned in the results" do + subject + expect(json_response["variants"].count).to eq 1 + end end end - context "variant is in stock" do - before do - variant.stock_items.update_all(count_on_hand: 10) + context "out of stock requested" do + let(:in_stock_only) { "false" } + + context "variant is out of stock" do + before do + variant.stock_items.update_all(count_on_hand: 0) + end + + it "is returned in the results" do + subject + expect(json_response["variants"].count).to eq 1 + end end - it "is returned in the results" do - subject - expect(json_response["variants"].count).to eq 1 + context "variant is in stock" do + before do + variant.stock_items.update_all(count_on_hand: 10) + end + + it "is returned in the results" do + subject + expect(json_response["variants"].count).to eq 1 + end end end end