Commit 86f1c20e544ec7c9151a29f14f30c5263b87224b
1 parent
3d572c26
Exists in
master
and in
28 other branches
[catalog-categories] Filtering products on catalog by category
Showing
2 changed files
with
53 additions
and
1 deletions
Show diff stats
app/controllers/public/catalog_controller.rb
1 | class CatalogController < PublicController | 1 | class CatalogController < PublicController |
2 | needs_profile | 2 | needs_profile |
3 | + no_design_blocks | ||
3 | 4 | ||
4 | before_filter :check_enterprise_and_environment | 5 | before_filter :check_enterprise_and_environment |
5 | 6 | ||
6 | def index | 7 | def index |
7 | - @products = @profile.products.paginate(:order => 'name asc', :per_page => 9, :page => params[:page]) | 8 | + @category = params[:level] ? ProductCategory.find(params[:level]) : nil |
9 | + @products = @profile.products.from_category(@category).paginate(:order => 'available desc, highlighted desc, name asc', :per_page => 9, :page => params[:page]) | ||
10 | + @categories = ProductCategory.on_level(params[:level]) | ||
8 | end | 11 | end |
9 | 12 | ||
10 | protected | 13 | protected |
test/functional/catalog_controller_test.rb
@@ -109,4 +109,53 @@ class CatalogControllerTest < ActionController::TestCase | @@ -109,4 +109,53 @@ class CatalogControllerTest < ActionController::TestCase | ||
109 | assert_tag :tag => 'span', :content => 'This is Plugin2 speaking!', :attributes => {:id => 'plugin2'} | 109 | assert_tag :tag => 'span', :content => 'This is Plugin2 speaking!', :attributes => {:id => 'plugin2'} |
110 | end | 110 | end |
111 | 111 | ||
112 | + should 'get categories of the right level' do | ||
113 | + pc1 = ProductCategory.create!(:name => "PC1", :environment => @enterprise.environment) | ||
114 | + pc2 = ProductCategory.create!(:name => "PC2", :environment => @enterprise.environment, :parent_id => pc1.id) | ||
115 | + pc3 = ProductCategory.create!(:name => "PC3", :environment => @enterprise.environment, :parent_id => pc1.id) | ||
116 | + pc4 = ProductCategory.create!(:name => "PC4", :environment => @enterprise.environment, :parent_id => pc2.id) | ||
117 | + p1 = fast_create(Product, :product_category_id => pc1.id, :enterprise_id => @enterprise.id) | ||
118 | + p2 = fast_create(Product, :product_category_id => pc2.id, :enterprise_id => @enterprise.id) | ||
119 | + p3 = fast_create(Product, :product_category_id => pc3.id, :enterprise_id => @enterprise.id) | ||
120 | + p4 = fast_create(Product, :product_category_id => pc4.id, :enterprise_id => @enterprise.id) | ||
121 | + | ||
122 | + get :index, :profile => @enterprise.identifier, :level => pc1.id | ||
123 | + | ||
124 | + assert_not_includes assigns(:categories), pc1 | ||
125 | + assert_includes assigns(:categories), pc2 | ||
126 | + assert_includes assigns(:categories), pc3 | ||
127 | + assert_not_includes assigns(:categories), pc4 | ||
128 | + end | ||
129 | + | ||
130 | + should 'filter products based on level selected' do | ||
131 | + pc1 = ProductCategory.create!(:name => "PC1", :environment => @enterprise.environment) | ||
132 | + pc2 = ProductCategory.create!(:name => "PC2", :environment => @enterprise.environment, :parent_id => pc1.id) | ||
133 | + pc3 = ProductCategory.create!(:name => "PC3", :environment => @enterprise.environment, :parent_id => pc1.id) | ||
134 | + pc4 = ProductCategory.create!(:name => "PC4", :environment => @enterprise.environment, :parent_id => pc2.id) | ||
135 | + p1 = fast_create(Product, :product_category_id => pc1.id, :enterprise_id => @enterprise.id) | ||
136 | + p2 = fast_create(Product, :product_category_id => pc2.id, :enterprise_id => @enterprise.id) | ||
137 | + p3 = fast_create(Product, :product_category_id => pc3.id, :enterprise_id => @enterprise.id) | ||
138 | + p4 = fast_create(Product, :product_category_id => pc4.id, :enterprise_id => @enterprise.id) | ||
139 | + | ||
140 | + get :index, :profile => @enterprise.identifier, :level => pc2.id | ||
141 | + | ||
142 | + assert_not_includes assigns(:products), p1 | ||
143 | + assert_includes assigns(:products), p2 | ||
144 | + assert_not_includes assigns(:products), p3 | ||
145 | + assert_includes assigns(:products), p4 | ||
146 | + end | ||
147 | + | ||
148 | + should 'get products ordered by availability, highlighted and then name' do | ||
149 | + p1 = fast_create(Product, :enterprise_id => @enterprise.id, :name => 'Zebra', :available => true, :highlighted => true) | ||
150 | + p2 = fast_create(Product, :enterprise_id => @enterprise.id, :name => 'Car', :available => true) | ||
151 | + p3 = fast_create(Product, :enterprise_id => @enterprise.id, :name => 'Panda', :available => true) | ||
152 | + p4 = fast_create(Product, :enterprise_id => @enterprise.id, :name => 'Pen', :available => false, :highlighted => true) | ||
153 | + p5 = fast_create(Product, :enterprise_id => @enterprise.id, :name => 'Ball', :available => false) | ||
154 | + p6 = fast_create(Product, :enterprise_id => @enterprise.id, :name => 'Medal', :available => false) | ||
155 | + | ||
156 | + get :index, :profile => @enterprise.identifier | ||
157 | + | ||
158 | + assert_equal [p1,p2,p3,p4,p5,p6], assigns(:products) | ||
159 | + end | ||
160 | + | ||
112 | end | 161 | end |