diff --git a/app/controllers/spree/admin/variants_controller_decorator.rb b/app/controllers/spree/admin/variants_controller_decorator.rb index 7c66f1f08a..acb55327ae 100644 --- a/app/controllers/spree/admin/variants_controller_decorator.rb +++ b/app/controllers/spree/admin/variants_controller_decorator.rb @@ -1,6 +1,22 @@ Spree::Admin::VariantsController.class_eval do helper 'spree/products' + def search + search_params = { :product_name_cont => params[:q], :sku_cont => params[:q] } + + @variants = Spree::Variant.ransack(search_params.merge(:m => 'or')).result + + if params[:distributor_id].present? + distributor = Enterprise.find params[:distributor_id] + @variants = @variants.in_distributor(distributor) + end + + if params[:order_cycle_id].present? + order_cycle = OrderCycle.find params[:order_cycle_id] + @variants = @variants.in_order_cycle(order_cycle) + end + end + def destroy @variant = Spree::Variant.find(params[:id]) @variant.delete # This line changed, as well as removal of following conditional diff --git a/spec/controllers/spree/admin/variants_controller_spec.rb b/spec/controllers/spree/admin/variants_controller_spec.rb new file mode 100644 index 0000000000..9c6d77194d --- /dev/null +++ b/spec/controllers/spree/admin/variants_controller_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +module Spree + module Admin + describe VariantsController do + before { login_as_admin } + + describe "search action" do + let!(:p1) { create(:simple_product, name: 'Product 1') } + let!(:p2) { create(:simple_product, name: 'Product 2') } + let!(:d) { create(:distributor_enterprise) } + let!(:oc) { create(:simple_order_cycle, distributors: [d], variants: [p1.master]) } + + it "filters by distributor" do + spree_get :search, q: 'Prod', distributor_id: d.id.to_s + assigns(:variants).should == [p1.master] + end + + it "filters by order cycle" do + spree_get :search, q: 'Prod', order_cycle_id: oc.id.to_s + assigns(:variants).should == [p1.master] + end + + it "does not filter when no distributor or order cycle is specified" do + spree_get :search, q: 'Prod' + assigns(:variants).sort.should == [p1.master, p2.master].sort + end + end + end + end +end