Commit 2b4760fdadb701543f9b0ed04e771d73e405d93f
1 parent
c4b2472c
Exists in
master
and in
29 other branches
ActionItem51: fixing display of products category initial page
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1607 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
46 additions
and
19 deletions
Show diff stats
app/controllers/public/category_controller.rb
@@ -2,14 +2,26 @@ class CategoryController < PublicController | @@ -2,14 +2,26 @@ class CategoryController < PublicController | ||
2 | 2 | ||
3 | # view the summary of one category | 3 | # view the summary of one category |
4 | def view | 4 | def view |
5 | - # TODO: load articles, documents, etc so the view can list them. | ||
6 | - @recent_articles = category.recent_articles | ||
7 | - @recent_comments = category.recent_comments | ||
8 | - @most_commented_articles = category.most_commented_articles | 5 | + send('action_' + @category.class.name.underscore) |
9 | end | 6 | end |
10 | 7 | ||
11 | attr_reader :category | 8 | attr_reader :category |
12 | 9 | ||
13 | before_filter :load_category, :only => [ :view ] | 10 | before_filter :load_category, :only => [ :view ] |
11 | + private | ||
12 | + | ||
13 | + def action_product_category | ||
14 | + @products = category.products | ||
15 | + @enterprises = category.products.map{|p| p.enterprise}.flatten.uniq | ||
16 | + @users = category.consumers | ||
17 | + end | ||
18 | + | ||
19 | + def action_category | ||
20 | + # TODO: load articles, documents, etc so the view can list them. | ||
21 | + @recent_articles = category.recent_articles | ||
22 | + @recent_comments = category.recent_comments | ||
23 | + @most_commented_articles = category.most_commented_articles | ||
24 | + end | ||
25 | + alias :action_region :action_category | ||
14 | 26 | ||
15 | end | 27 | end |
app/helpers/application_helper.rb
@@ -306,9 +306,10 @@ module ApplicationHelper | @@ -306,9 +306,10 @@ module ApplicationHelper | ||
306 | concat(content_tag('div', capture(&block) + tag('br', :style => 'clear: left;'), { :class => 'button-bar' }.merge(options)), block.binding) | 306 | concat(content_tag('div', capture(&block) + tag('br', :style => 'clear: left;'), { :class => 'button-bar' }.merge(options)), block.binding) |
307 | end | 307 | end |
308 | 308 | ||
309 | - def link_to_category(category) | 309 | + def link_to_category(category, full = true) |
310 | return _('Uncategorized product') unless category | 310 | return _('Uncategorized product') unless category |
311 | - link_to category.full_name, :controller => 'category', :action => 'view', :category_path => category.path.split('/') | 311 | + name = full ? category.full_name : category.name |
312 | + link_to name, :controller => 'category', :action => 'view', :category_path => category.path.split('/') | ||
312 | end | 313 | end |
313 | 314 | ||
314 | def link_to_product(product) | 315 | def link_to_product(product) |
app/models/product_category.rb
1 | class ProductCategory < Category | 1 | class ProductCategory < Category |
2 | has_many :products | 2 | has_many :products |
3 | has_many :consumptions | 3 | has_many :consumptions |
4 | - has_many :consumers, :through => :consumptions, :source => :profile_id | 4 | + has_many :consumers, :through => :consumptions, :source => :profile |
5 | 5 | ||
6 | def tree | 6 | def tree |
7 | children.inject([]){|all,c| all + c.tree } << self | 7 | children.inject([]){|all,c| all + c.tree } << self |
app/views/category/_product_category.rhtml
@@ -9,7 +9,8 @@ | @@ -9,7 +9,8 @@ | ||
9 | <ul> | 9 | <ul> |
10 | <% @products.each do |p| %> | 10 | <% @products.each do |p| %> |
11 | <li> | 11 | <li> |
12 | - <%= image_tag p.image.public_filename(:thumb) if p.image%> <%= link_to_product(p) %> <br/> | 12 | + <%= image_tag p.image.public_filename(:thumb) if p.image%> |
13 | + <%= link_to_product(p) %> <br/> | ||
13 | <% if p.price %> | 14 | <% if p.price %> |
14 | <%= _('Price: %d') % p.price %> <br/> | 15 | <%= _('Price: %d') % p.price %> <br/> |
15 | <% end %> | 16 | <% end %> |
app/views/category/view.rhtml
1 | <div id="view-category"> | 1 | <div id="view-category"> |
2 | 2 | ||
3 | <div id="category-ancestors"> | 3 | <div id="category-ancestors"> |
4 | - <%= @category.ancestors.reverse.map { |a| link_to_category(a) }.join(' → ') %> | 4 | + <%= @category.ancestors.reverse.map { |a| link_to_category(a, false) }.join(' → ') %> |
5 | </div><!-- end id="category-ancestors" --> | 5 | </div><!-- end id="category-ancestors" --> |
6 | 6 | ||
7 | <h1 id="categiry-name"><%= _('Category: %s') % @category.name %></h1> | 7 | <h1 id="categiry-name"><%= _('Category: %s') % @category.name %></h1> |
test/functional/category_controller_test.rb
@@ -52,7 +52,10 @@ class CategoryControllerTest < Test::Unit::TestCase | @@ -52,7 +52,10 @@ class CategoryControllerTest < Test::Unit::TestCase | ||
52 | 52 | ||
53 | should 'display category of products' do | 53 | should 'display category of products' do |
54 | cat = ProductCategory.create!(:name => 'Food', :environment => Environment.default) | 54 | cat = ProductCategory.create!(:name => 'Food', :environment => Environment.default) |
55 | + ent = Enterprise.create!(:name => 'Enterprise test', :identifier => 'enterprise_test') | ||
56 | + p = cat.products.create!(:name => 'product test', :enterprise => ent) | ||
55 | get :view, :category_path => cat.path.split('/') | 57 | get :view, :category_path => cat.path.split('/') |
58 | + assert_includes assigns(:products), p | ||
56 | end | 59 | end |
57 | 60 | ||
58 | end | 61 | end |
test/unit/product_category_test.rb
@@ -3,36 +3,36 @@ require File.dirname(__FILE__) + '/../test_helper' | @@ -3,36 +3,36 @@ require File.dirname(__FILE__) + '/../test_helper' | ||
3 | class ProductCategoryTest < Test::Unit::TestCase | 3 | class ProductCategoryTest < Test::Unit::TestCase |
4 | # TODO: please write tests here when ProductCategory has something | 4 | # TODO: please write tests here when ProductCategory has something |
5 | def test_require_same_class_for_children | 5 | def test_require_same_class_for_children |
6 | - c1 = ProductCategory.new(:name => 'Some Product Type', :environment_id => 1) | 6 | + c1 = ProductCategory.new(:name => 'Some Product Type', :environment => Environment.default) |
7 | c1.save! | 7 | c1.save! |
8 | 8 | ||
9 | - c2 = Category.new(:name => 'wrong', :environment_id => 1) | 9 | + c2 = Category.new(:name => 'wrong', :environment => Environment.default) |
10 | c1.children << c2 | 10 | c1.children << c2 |
11 | 11 | ||
12 | assert !c2.valid? | 12 | assert !c2.valid? |
13 | assert c2.errors.invalid?(:type) | 13 | assert c2.errors.invalid?(:type) |
14 | 14 | ||
15 | - c3 = ProductCategory.new(:name => 'right', :environment_id => 1) | 15 | + c3 = ProductCategory.new(:name => 'right', :environment => Environment.default) |
16 | c1.children << c3 | 16 | c1.children << c3 |
17 | assert c3.valid? | 17 | assert c3.valid? |
18 | assert !c3.errors.invalid?(:type) | 18 | assert !c3.errors.invalid?(:type) |
19 | end | 19 | end |
20 | 20 | ||
21 | def test_tree | 21 | def test_tree |
22 | - c0 = ProductCategory.create(:name => 'base_cat', :environment_id => 1) | 22 | + c0 = ProductCategory.create!(:name => 'base_cat', :environment => Environment.default) |
23 | assert ! c0.new_record? | 23 | assert ! c0.new_record? |
24 | assert_equivalent [c0], c0.tree | 24 | assert_equivalent [c0], c0.tree |
25 | 25 | ||
26 | - c1 = ProductCategory.create(:name => 'cat_1', :parent => c0, :environment_id => 1) | 26 | + c1 = ProductCategory.create!(:name => 'cat_1', :parent => c0, :environment => Environment.default) |
27 | c0.reload | 27 | c0.reload |
28 | assert_equivalent [c1], c1.tree | 28 | assert_equivalent [c1], c1.tree |
29 | assert_equivalent [c0, c1], c0.tree | 29 | assert_equivalent [c0, c1], c0.tree |
30 | 30 | ||
31 | - c2 = ProductCategory.create(:name => 'cat_2', :parent => c0, :environment_id => 1) | 31 | + c2 = ProductCategory.create!(:name => 'cat_2', :parent => c0, :environment => Environment.default) |
32 | c0.reload; c1.reload; | 32 | c0.reload; c1.reload; |
33 | assert_equivalent [c0,c1,c2] , c0.tree | 33 | assert_equivalent [c0,c1,c2] , c0.tree |
34 | 34 | ||
35 | - c3 = ProductCategory.create(:name => 'cat_3', :parent => c2, :environment_id => 1) | 35 | + c3 = ProductCategory.create!(:name => 'cat_3', :parent => c2, :environment => Environment.default) |
36 | c0.reload; c1.reload; c2.reload | 36 | c0.reload; c1.reload; c2.reload |
37 | assert_equivalent [c0,c1,c2,c3], c0.tree | 37 | assert_equivalent [c0,c1,c2,c3], c0.tree |
38 | assert_equivalent [c2,c3], c2.tree | 38 | assert_equivalent [c2,c3], c2.tree |
@@ -40,17 +40,25 @@ class ProductCategoryTest < Test::Unit::TestCase | @@ -40,17 +40,25 @@ class ProductCategoryTest < Test::Unit::TestCase | ||
40 | end | 40 | end |
41 | 41 | ||
42 | def test_all_products | 42 | def test_all_products |
43 | - c0 = ProductCategory.create(:name => 'base_cat', :environment_id => 1) | 43 | + c0 = ProductCategory.create!(:name => 'base_cat', :environment => Environment.default) |
44 | assert_equivalent [], c0.all_products | 44 | assert_equivalent [], c0.all_products |
45 | 45 | ||
46 | p0 = Product.create(:name => 'product1', :product_category => c0) | 46 | p0 = Product.create(:name => 'product1', :product_category => c0) |
47 | c0.reload | 47 | c0.reload |
48 | assert_equivalent [p0], c0.all_products | 48 | assert_equivalent [p0], c0.all_products |
49 | 49 | ||
50 | - c1 = ProductCategory.create(:name => 'cat_1', :parent => c0, :environment_id => 1) | 50 | + c1 = ProductCategory.create!(:name => 'cat_1', :parent => c0, :environment => Environment.default) |
51 | p1 = Product.create(:name => 'product2', :product_category => c1) | 51 | p1 = Product.create(:name => 'product2', :product_category => c1) |
52 | c0.reload; c1.reload | 52 | c0.reload; c1.reload |
53 | assert_equivalent [p0, p1], c0.all_products | 53 | assert_equivalent [p0, p1], c0.all_products |
54 | assert_equivalent [p1], c1.all_products | 54 | assert_equivalent [p1], c1.all_products |
55 | end | 55 | end |
56 | + | ||
57 | + should 'have consumers' do | ||
58 | + c = ProductCategory.create!(:name => 'base_cat', :environment => Environment.default) | ||
59 | + person = create_user('test_user').person | ||
60 | + c.consumers << person | ||
61 | + assert_includes c.consumers, person | ||
62 | + end | ||
63 | + | ||
56 | end | 64 | end |
test/unit/profile_categorization_test.rb
1 | require File.dirname(__FILE__) + '/../test_helper' | 1 | require File.dirname(__FILE__) + '/../test_helper' |
2 | 2 | ||
3 | class ProfileCategorizationTest < ActiveSupport::TestCase | 3 | class ProfileCategorizationTest < ActiveSupport::TestCase |
4 | + | ||
4 | should 'have profile and category' do | 5 | should 'have profile and category' do |
5 | person = create_user('test_user').person | 6 | person = create_user('test_user').person |
6 | cat = Environment.default.categories.build(:name => 'a category'); cat.save! | 7 | cat = Environment.default.categories.build(:name => 'a category'); cat.save! |
7 | person.categories << cat | 8 | person.categories << cat |
8 | person.save! | 9 | person.save! |
9 | assert_includes person.categories, cat | 10 | assert_includes person.categories, cat |
10 | - assert_includes cat.profiles, person | 11 | + assert_includes cat.people, person |
11 | assert_equal [cat.id], person.category_ids | 12 | assert_equal [cat.id], person.category_ids |
12 | end | 13 | end |
14 | + | ||
13 | end | 15 | end |