From 42b951c9722fab6024e2cb40fe45a1def6ccfdc6 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 16 Jul 2014 10:31:12 +1000 Subject: [PATCH] Variants controller #search filters by distribution --- .../admin/variants_controller_decorator.rb | 16 ++++++++++ .../spree/admin/variants_controller_spec.rb | 31 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 spec/controllers/spree/admin/variants_controller_spec.rb 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