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 | 1 | class CatalogController < PublicController |
2 | 2 | needs_profile |
3 | + no_design_blocks | |
3 | 4 | |
4 | 5 | before_filter :check_enterprise_and_environment |
5 | 6 | |
6 | 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 | 11 | end |
9 | 12 | |
10 | 13 | protected | ... | ... |
test/functional/catalog_controller_test.rb
... | ... | @@ -109,4 +109,53 @@ class CatalogControllerTest < ActionController::TestCase |
109 | 109 | assert_tag :tag => 'span', :content => 'This is Plugin2 speaking!', :attributes => {:id => 'plugin2'} |
110 | 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 | 161 | end | ... | ... |