Commit 5268427cfc84608a1d058d054f94e6959d443518

Authored by Braulio Bhavamitra
1 parent 99864270

Only search for products from enabled enterprises

Also, add a facet to filter enabled/not enabled enterprises
app/controllers/public/search_controller.rb
... ... @@ -45,7 +45,7 @@ class SearchController < PublicController
45 45  
46 46 def products
47 47 if !@empty_query
48   - full_text_search ['public:true']
  48 + full_text_search ['public:true', 'enabled:true']
49 49 else
50 50 @one_page = true
51 51 @geosearch = logged_in? && current_user.person.lat && current_user.person.lng
... ...
app/models/product.rb
... ... @@ -238,7 +238,7 @@ class Product < ActiveRecord::Base
238 238 end
239 239  
240 240 alias_method :name_sortable, :name
241   - delegate :region, :region_id, :environment, :environment_id, :to => :enterprise
  241 + delegate :enabled, :region, :region_id, :environment, :environment_id, :to => :enterprise
242 242 def name_sortable # give a different name for solr
243 243 name
244 244 end
... ... @@ -278,7 +278,7 @@ class Product < ActiveRecord::Base
278 278 {:description => :text}, {:category_full_name => :text},
279 279 # filtered fields
280 280 {:public => :boolean}, {:environment_id => :integer},
281   - {:category_filter => :integer},
  281 + {:enabled => :boolean}, {:category_filter => :integer},
282 282 # ordered/query-boosted fields
283 283 {:price_sortable => :decimal}, {:name_sortable => :string},
284 284 {:lat => :float}, {:lng => :float},
... ...
app/models/profile.rb
... ... @@ -857,6 +857,7 @@ private :generate_url, :url_options
857 857 def f_categories
858 858 category_ids - [region_id]
859 859 end
  860 +
860 861 def f_region
861 862 self.region_id
862 863 end
... ... @@ -870,6 +871,14 @@ private :generate_url, :url_options
870 871 end
871 872 end
872 873  
  874 + def self.f_enabled_proc(enabled)
  875 + enabled = enabled == "true" ? true : false
  876 + enabled ? _('Enabled') : _('Not enabled')
  877 + end
  878 + def f_enabled
  879 + self.enabled
  880 + end
  881 +
873 882 def name_sortable # give a different name for solr
874 883 name
875 884 end
... ... @@ -882,11 +891,13 @@ private :generate_url, :url_options
882 891 public
883 892  
884 893 acts_as_faceted :fields => {
  894 + :f_enabled => {:label => _('Situation'), :type_if => proc { |klass| klass.kind_of?(Enterprise) },
  895 + :proc => proc { |id| f_enabled_proc(id) }},
885 896 :f_region => {:label => _('City'), :proc => proc { |id| f_region_proc(id) }},
886 897 :f_categories => {:multi => true, :proc => proc {|facet, id| f_categories_proc(facet, id)},
887 898 :label => proc { |env| f_categories_label_proc(env) }, :label_abbrev => proc{ |env| f_categories_label_abbrev_proc(env) }},
888 899 }, :category_query => proc { |c| "category_filter:#{c.id}" },
889   - :order => [:f_region, :f_categories]
  900 + :order => [:f_region, :f_categories, :f_enabled]
890 901  
891 902 acts_as_searchable :fields => facets_fields_for_solr + [:extra_data_for_index,
892 903 # searched fields
... ...
test/functional/search_controller_test.rb
... ... @@ -799,18 +799,26 @@ class SearchControllerTest < ActionController::TestCase
799 799 assert_equal [prod2, prod1, prod3], assigns(:results)[:products].docs
800 800 end
801 801  
  802 + should 'only list products from enabled enterprises' do
  803 + ent1 = fast_create(Enterprise, :enabled => true)
  804 + ent2 = fast_create(Enterprise, :enabled => false)
  805 + prod1 = Product.create!(:name => 'product 1', :enterprise_id => ent1.id, :product_category_id => @product_category.id)
  806 + prod2 = Product.create!(:name => 'product 2', :enterprise_id => ent2.id, :product_category_id => @product_category.id)
  807 +
  808 + get :products, :query => 'product'
  809 +
  810 + assert_equal [prod1], assigns(:results)[:products].docs
  811 + end
  812 +
802 813 should 'order product results by name when requested' do
803 814 ent = fast_create(Enterprise)
804 815 prod1 = Product.create!(:name => 'product 1', :enterprise_id => ent.id, :product_category_id => @product_category.id)
805 816 prod2 = Product.create!(:name => 'product 2', :enterprise_id => ent.id, :product_category_id => @product_category.id)
806 817 prod3 = Product.create!(:name => 'product 3', :enterprise_id => ent.id, :product_category_id => @product_category.id)
807 818  
808   - prod3.name = 'product A'
809   - prod3.save!
810   - prod1.name = 'product B'
811   - prod1.save!
812   - prod2.name = 'product C'
813   - prod2.save!
  819 + prod3.update_attribute! :name, 'product A'
  820 + prod2.update_attribute! :name, 'product B'
  821 + prod1.update_attribute! :name, 'product C'
814 822  
815 823 get :products, :query => 'product', :order_by => :name
816 824  
... ...