Commit 4ae1f84f642f4c0309cdb144c28deadc95abe3c2
1 parent
1d955bbb
Exists in
master
and in
23 other branches
ActionItem155: refactoring: moving functionality from category_controller to sea…
…rch_controller, and removing the former. git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1624 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
23 changed files
with
195 additions
and
226 deletions
Show diff stats
app/controllers/public/category_controller.rb
| ... | ... | @@ -1,27 +0,0 @@ |
| 1 | -class CategoryController < PublicController | |
| 2 | - | |
| 3 | - # view the summary of one category | |
| 4 | - def view | |
| 5 | - send('action_' + @category.class.name.underscore) | |
| 6 | - end | |
| 7 | - | |
| 8 | - attr_reader :category | |
| 9 | - | |
| 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 | |
| 26 | - | |
| 27 | -end |
app/controllers/public/search_controller.rb
| ... | ... | @@ -24,6 +24,19 @@ class SearchController < ApplicationController |
| 24 | 24 | end |
| 25 | 25 | end |
| 26 | 26 | |
| 27 | + def action_product_category | |
| 28 | + @products = category.products | |
| 29 | + @enterprises = category.products.map{|p| p.enterprise}.flatten.uniq | |
| 30 | + @users = category.consumers | |
| 31 | + end | |
| 32 | + | |
| 33 | + def action_category | |
| 34 | + @recent_articles = category.recent_articles | |
| 35 | + @recent_comments = category.recent_comments | |
| 36 | + @most_commented_articles = category.most_commented_articles | |
| 37 | + end | |
| 38 | + alias :action_region :action_category | |
| 39 | + | |
| 27 | 40 | public |
| 28 | 41 | |
| 29 | 42 | include SearchHelper |
| ... | ... | @@ -53,6 +66,12 @@ class SearchController < ApplicationController |
| 53 | 66 | |
| 54 | 67 | ####################################################### |
| 55 | 68 | |
| 69 | + # view the summary of one category | |
| 70 | + def category_index | |
| 71 | + send('action_' + @category.class.name.underscore) | |
| 72 | + end | |
| 73 | + attr_reader :category | |
| 74 | + | |
| 56 | 75 | def tags |
| 57 | 76 | @tags = Tag.find(:all).inject({}) do |memo,tag| |
| 58 | 77 | memo[tag.name] = tag.taggings.count | ... | ... |
app/helpers/application_helper.rb
| ... | ... | @@ -309,7 +309,7 @@ module ApplicationHelper |
| 309 | 309 | def link_to_category(category, full = true) |
| 310 | 310 | return _('Uncategorized product') unless category |
| 311 | 311 | name = full ? category.full_name : category.name |
| 312 | - link_to name, :controller => 'category', :action => 'view', :category_path => category.path.split('/') | |
| 312 | + link_to name, :controller => 'search', :action => 'category_index', :category_path => category.path.split('/') | |
| 313 | 313 | end |
| 314 | 314 | |
| 315 | 315 | def link_to_product(product) | ... | ... |
app/views/category/_article.rhtml
| ... | ... | @@ -1,9 +0,0 @@ |
| 1 | -<li> | |
| 2 | - <strong><%= link_to(article.title, article.url) %></strong> | |
| 3 | - <div class="item_meta"> | |
| 4 | - <span class="cat_item_by"><%= | |
| 5 | - _('by %s') % link_to(article.last_changed_by.name, article.last_changed_by.url) | |
| 6 | - %></span> | |
| 7 | - <span class="cat_item_update"><%= _('Last update: %s.') % show_date(article.updated_on) %></span> | |
| 8 | - </div> | |
| 9 | -</li> |
app/views/category/_category.rhtml
| ... | ... | @@ -1,24 +0,0 @@ |
| 1 | -<h2><%= _('Recent articles') %></h2> | |
| 2 | -<ul class="recent_on_cat recent_articles"> | |
| 3 | - <%= render :partial => 'article', :collection => @recent_articles %> | |
| 4 | -</ul> | |
| 5 | - | |
| 6 | -<h2><%= _('Recent Comments') %></h2> | |
| 7 | -<ul class="recent_on_cat recent_comments"> | |
| 8 | -<% @recent_comments.each do |comment| %> | |
| 9 | - <li> | |
| 10 | - <strong><%= link_to(comment.title, comment.url) %></strong> | |
| 11 | - <div class="item_meta"> | |
| 12 | - <%= _('by %{author} on "%{article}"') % { | |
| 13 | - :comment => link_to(comment.title, comment.url), | |
| 14 | - :article => link_to(comment.article.title, comment.article.url), | |
| 15 | - :author => comment.author_name } %> | |
| 16 | - </div> | |
| 17 | - </li> | |
| 18 | -<% end %> | |
| 19 | -</ul> | |
| 20 | - | |
| 21 | -<h2><%= _('Most commented articles') %></h2> | |
| 22 | -<ul class="most_commented"> | |
| 23 | - <%= render :partial => 'article', :collection => @most_commented_articles %> | |
| 24 | -</ul> |
app/views/category/_product_category.rhtml
| ... | ... | @@ -1,29 +0,0 @@ |
| 1 | -<%= link_to(_('I consume this'), {:profile => current_user.login, :controller => 'consumed_products', :action => 'new', 'consumption[product_category_id]' => @category.id }, :method => :post) if logged_in? %> | |
| 2 | -<ul> | |
| 3 | - <li><%= n_("One product in this category.", "%{num} products in this category.", @products.size) % { :num => @products.size } %></li> | |
| 4 | - <li><%= n_("One enterprise sells products in this category.", "%{num} enterprises sells products in this category.", @enterprises.size) % { :num => @enterprises.size} %></li> | |
| 5 | - <li><%= n_("One user consumes this product.", "%{num} users consumes this product", @users.size) % {:num => @users.size} %></li> | |
| 6 | -</ul> | |
| 7 | - | |
| 8 | -<h3> <%= _('Products under this category:') %> </h3> | |
| 9 | -<ul> | |
| 10 | - <% @products.each do |p| %> | |
| 11 | - <li> | |
| 12 | - <%= image_tag p.image.public_filename(:thumb) if p.image%> | |
| 13 | - <%= link_to_product(p) %> <br/> | |
| 14 | - <% if p.price %> | |
| 15 | - <%= _('Price: %d') % p.price %> <br/> | |
| 16 | - <% end %> | |
| 17 | - <%= _('Enterprise:') %> <%= link_to_homepage p.enterprise.name, p.enterprise.identifier %> <br/><br/> | |
| 18 | - </li> | |
| 19 | - <% end %> | |
| 20 | -</ul> | |
| 21 | - | |
| 22 | -<h3><%= _('Users that consumes products in this category:') %></h3> | |
| 23 | - | |
| 24 | -<% @users.each do |u| %> | |
| 25 | - <p> | |
| 26 | - <%= image_tag u.image.public_filename(:thumb) if u.image %> <br> | |
| 27 | - <%= link_to_homepage(u.name, u.identifier) %> | |
| 28 | - </p> | |
| 29 | -<% end %> |
app/views/category/_region.rhtml
app/views/category/view.rhtml
| ... | ... | @@ -1,29 +0,0 @@ |
| 1 | -<div id="view-category"> | |
| 2 | - | |
| 3 | - <div id="category-ancestors"> | |
| 4 | - <%= @category.ancestors.reverse.map { |a| link_to_category(a, false) }.join(' → ') %> | |
| 5 | - </div><!-- end id="category-ancestors" --> | |
| 6 | - | |
| 7 | - <h1 id="categiry-name"><%= _('Category: %s') % @category.name %></h1> | |
| 8 | - | |
| 9 | - <div class="category_itens"> | |
| 10 | - <%= render :partial => @category.class.name.underscore %> | |
| 11 | - </div><!-- end class="category_itens" --> | |
| 12 | - | |
| 13 | - <div id="category-childs"> | |
| 14 | - <h2> <%= _('Sub-categories') %> </h2> | |
| 15 | - | |
| 16 | - <% if @category.children.empty? %> | |
| 17 | - <strong id="cat-no-child"><%= _('No sub-categories') %></strong> | |
| 18 | - <% else %> | |
| 19 | - <ul> | |
| 20 | - <% @category.children.each do |c| %> | |
| 21 | - <li> <%= link_to_category(c) %> </li> | |
| 22 | - <% end %> | |
| 23 | - </ul> | |
| 24 | - <% end %> | |
| 25 | - | |
| 26 | - </div><!-- end id="child-categories" --> | |
| 27 | - | |
| 28 | -</div><!-- end id="view-category" --> | |
| 29 | - |
app/views/search/_article.rhtml
| 1 | - <div class='search-result-text'> | |
| 2 | - <div> | |
| 3 | - <strong> | |
| 4 | - <%= link_to_document(hit) %> | |
| 5 | - </strong> | |
| 6 | - </div> | |
| 7 | - <div> | |
| 8 | - <%= strip_tags(hit.abstract) %> | |
| 9 | - </div> | |
| 1 | +<li> | |
| 2 | + <strong><%= link_to(hit.title, hit.url) %></strong> | |
| 3 | + <div class="item_meta"> | |
| 4 | + <% if hit.last_changed_by %> | |
| 5 | + <span class="cat_item_by"> | |
| 6 | + <%= _('by %s') % link_to(hit.last_changed_by.name, hit.last_changed_by.url) %> | |
| 7 | + </span> | |
| 8 | + <% end %> | |
| 9 | + <span class="cat_item_update"><%= _('Last update: %s.') % show_date(hit.updated_on) %></span> | |
| 10 | 10 | </div> |
| 11 | +</li> | ... | ... |
| ... | ... | @@ -0,0 +1,24 @@ |
| 1 | +<h2><%= _('Recent articles') %></h2> | |
| 2 | +<ul class="recent_on_cat recent_articles"> | |
| 3 | + <%= render :partial => 'article', :collection => @recent_articles %> | |
| 4 | +</ul> | |
| 5 | + | |
| 6 | +<h2><%= _('Recent Comments') %></h2> | |
| 7 | +<ul class="recent_on_cat recent_comments"> | |
| 8 | +<% @recent_comments.each do |comment| %> | |
| 9 | + <li> | |
| 10 | + <strong><%= link_to(comment.title, comment.url) %></strong> | |
| 11 | + <div class="item_meta"> | |
| 12 | + <%= _('by %{author} on "%{article}"') % { | |
| 13 | + :comment => link_to(comment.title, comment.url), | |
| 14 | + :article => link_to(comment.article.title, comment.article.url), | |
| 15 | + :author => comment.author_name } %> | |
| 16 | + </div> | |
| 17 | + </li> | |
| 18 | +<% end %> | |
| 19 | +</ul> | |
| 20 | + | |
| 21 | +<h2><%= _('Most commented articles') %></h2> | |
| 22 | +<ul class="most_commented"> | |
| 23 | + <%= render :partial => 'article', :collection => @most_commented_articles %> | |
| 24 | +</ul> | ... | ... |
app/views/search/_comment.rhtml
| 1 | - <div class='search-result-text'> | |
| 2 | - <div> | |
| 3 | - <strong> | |
| 4 | - <%= link_to(hit.title, hit.url) %> | |
| 5 | - </strong> | |
| 6 | - </div> | |
| 7 | - <div> | |
| 8 | - <%= strip_tags(hit.body) %> | |
| 9 | - </div> | |
| 1 | +<li> | |
| 2 | + <strong><%= link_to(hit.title, hit.url)%></strong> | |
| 3 | + <div class="item_meta"> | |
| 4 | + <span class="cat_item_by"><%= _('by %s, on "%s"') % [hit.author_name, link_to(hit.article.name, hit.article.url)] %></span> | |
| 10 | 5 | </div> |
| 6 | +</li> | |
| 7 | + | |
| 8 | + | ... | ... |
app/views/search/_product.rhtml
| 1 | 1 | <%# FIXME add more information %> |
| 2 | 2 | |
| 3 | +<li> | |
| 3 | 4 | <div class='search-result-text'> |
| 4 | 5 | <%= image_tag(hit.image.public_filename(:minor)) if hit.image %> |
| 5 | 6 | <strong> |
| ... | ... | @@ -13,3 +14,4 @@ |
| 13 | 14 | <li> <%= _('Category: %s') % link_to_category(hit.product_category) %> </li> |
| 14 | 15 | </ul> |
| 15 | 16 | </div> |
| 17 | +</li> | ... | ... |
| ... | ... | @@ -0,0 +1,29 @@ |
| 1 | +<%= link_to(_('I consume this'), {:profile => current_user.login, :controller => 'consumed_products', :action => 'new', 'consumption[product_category_id]' => @category.id }, :method => :post) if logged_in? %> | |
| 2 | +<ul> | |
| 3 | + <li><%= n_("One product in this category.", "%{num} products in this category.", @products.size) % { :num => @products.size } %></li> | |
| 4 | + <li><%= n_("One enterprise sells products in this category.", "%{num} enterprises sells products in this category.", @enterprises.size) % { :num => @enterprises.size} %></li> | |
| 5 | + <li><%= n_("One user consumes this product.", "%{num} users consumes this product", @users.size) % {:num => @users.size} %></li> | |
| 6 | +</ul> | |
| 7 | + | |
| 8 | +<h3> <%= _('Products under this category:') %> </h3> | |
| 9 | +<ul> | |
| 10 | + <% @products.each do |p| %> | |
| 11 | + <li> | |
| 12 | + <%= image_tag p.image.public_filename(:thumb) if p.image%> | |
| 13 | + <%= link_to_product(p) %> <br/> | |
| 14 | + <% if p.price %> | |
| 15 | + <%= _('Price: %d') % p.price %> <br/> | |
| 16 | + <% end %> | |
| 17 | + <%= _('Enterprise:') %> <%= link_to_homepage p.enterprise.name, p.enterprise.identifier %> <br/><br/> | |
| 18 | + </li> | |
| 19 | + <% end %> | |
| 20 | +</ul> | |
| 21 | + | |
| 22 | +<h3><%= _('Users that consumes products in this category:') %></h3> | |
| 23 | + | |
| 24 | +<% @users.each do |u| %> | |
| 25 | + <p> | |
| 26 | + <%= image_tag u.image.public_filename(:thumb) if u.image %> <br> | |
| 27 | + <%= link_to_homepage(u.name, u.identifier) %> | |
| 28 | + </p> | |
| 29 | +<% end %> | ... | ... |
app/views/search/_profile.rhtml
| 1 | 1 | <%# FIXME add more information %> |
| 2 | - | |
| 3 | -<div class='search-result-text'> | |
| 4 | - <%= image_tag(hit.image.public_filename(:minor)) if hit.image %> | |
| 5 | - <strong> | |
| 6 | - <%= link_to_homepage(hit.name, hit.identifier) %> | |
| 7 | - </strong> | |
| 8 | -</div> | |
| 2 | +<li> | |
| 3 | + <div class='search-result-text'> | |
| 4 | + <%= image_tag(hit.image.public_filename(:minor)) if hit.image %> | |
| 5 | + <strong> | |
| 6 | + <%= link_to_homepage(hit.name, hit.identifier) %> | |
| 7 | + </strong> | |
| 8 | + </div> | |
| 9 | +</li> | ... | ... |
| ... | ... | @@ -0,0 +1,29 @@ |
| 1 | +<div id="view-category"> | |
| 2 | + | |
| 3 | + <div id="category-ancestors"> | |
| 4 | + <%= @category.ancestors.reverse.map { |a| link_to_category(a, false) }.join(' → ') %> | |
| 5 | + </div><!-- end id="category-ancestors" --> | |
| 6 | + | |
| 7 | + <h1 id="categiry-name"><%= _('Category: %s') % @category.name %></h1> | |
| 8 | + | |
| 9 | + <div class="category_itens"> | |
| 10 | + <%= render :partial => @category.class.name.underscore %> | |
| 11 | + </div><!-- end class="category_itens" --> | |
| 12 | + | |
| 13 | + <div id="category-childs"> | |
| 14 | + <h2> <%= _('Sub-categories') %> </h2> | |
| 15 | + | |
| 16 | + <% if @category.children.empty? %> | |
| 17 | + <strong id="cat-no-child"><%= _('No sub-categories') %></strong> | |
| 18 | + <% else %> | |
| 19 | + <ul> | |
| 20 | + <% @category.children.each do |c| %> | |
| 21 | + <li> <%= link_to_category(c) %> </li> | |
| 22 | + <% end %> | |
| 23 | + </ul> | |
| 24 | + <% end %> | |
| 25 | + | |
| 26 | + </div><!-- end id="child-categories" --> | |
| 27 | + | |
| 28 | +</div><!-- end id="view-category" --> | |
| 29 | + | ... | ... |
app/views/search/index.rhtml
| ... | ... | @@ -4,9 +4,11 @@ |
| 4 | 4 | <% if !results.nil? and !results.empty? %> |
| 5 | 5 | <div id="search-results-<%= name %>"> |
| 6 | 6 | <h3><%= @names[name] %></h3> |
| 7 | + <ul> | |
| 7 | 8 | <% results.each do |hit| %> |
| 8 | 9 | <%= render :partial => partial_for_class(hit.class), :locals => { :hit => hit } %> |
| 9 | 10 | <% end %> |
| 11 | + </ul> | |
| 10 | 12 | </div> |
| 11 | 13 | <% end %> |
| 12 | 14 | <% end %> | ... | ... |
app/views/shared/categories_menu.rhtml
| ... | ... | @@ -5,7 +5,7 @@ |
| 5 | 5 | <%= item.name %> |
| 6 | 6 | <ul> |
| 7 | 7 | <% item.children.each do |child| %> |
| 8 | - <li><%= link_to(content_tag('span', child.name), :controller => 'category', :action => 'view', :category_path => child.explode_path) %></li> | |
| 8 | + <li><%= link_to(content_tag('span', child.name), :controller => 'search', :action => 'category_index', :category_path => child.explode_path) %></li> | |
| 9 | 9 | <% end %> |
| 10 | 10 | </ul> |
| 11 | 11 | </li> | ... | ... |
config/routes.rb
| ... | ... | @@ -29,13 +29,12 @@ ActionController::Routing::Routes.draw do |map| |
| 29 | 29 | # tags |
| 30 | 30 | map.tag 'tag', :controller => 'search', :action => 'tags' |
| 31 | 31 | map.tag 'tag/:tag', :controller => 'search', :action => 'tag' |
| 32 | - | |
| 32 | + # categories index | |
| 33 | + map.category 'cat/*category_path', :controller => 'search', :action => 'category_index' | |
| 34 | + map.assets 'assets/:asset/*category_path', :controller => 'search', :action => 'assets' | |
| 33 | 35 | # search |
| 34 | 36 | map.connect 'search/:action/*category_path', :controller => 'search' |
| 35 | 37 | |
| 36 | - # categories controller | |
| 37 | - map.connect 'cat', :controller => 'category', :action => 'index' | |
| 38 | - map.category 'cat/*category_path', :controller => 'category', :action => 'view' | |
| 39 | 38 | |
| 40 | 39 | # public profile information |
| 41 | 40 | map.profile 'profile/:profile/:action/:id', :controller => 'profile', :action => 'index' | ... | ... |
test/functional/category_controller_test.rb
| ... | ... | @@ -1,61 +0,0 @@ |
| 1 | -require File.dirname(__FILE__) + '/../test_helper' | |
| 2 | -require 'category_controller' | |
| 3 | - | |
| 4 | -# Re-raise errors caught by the controller. | |
| 5 | -class CategoryController; def rescue_action(e) raise e end; end | |
| 6 | - | |
| 7 | -class CategoryControllerTest < Test::Unit::TestCase | |
| 8 | - def setup | |
| 9 | - @controller = CategoryController.new | |
| 10 | - @request = ActionController::TestRequest.new | |
| 11 | - @response = ActionController::TestResponse.new | |
| 12 | - | |
| 13 | - @category = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 14 | - end | |
| 15 | - | |
| 16 | - def test_should_display_a_given_category | |
| 17 | - get :view, :category_path => [ 'my-category' ] | |
| 18 | - assert_equal @category, assigns(:category) | |
| 19 | - end | |
| 20 | - | |
| 21 | - should 'expose category in a method' do | |
| 22 | - get :view, :category_path => [ 'my-category' ] | |
| 23 | - assert_same assigns(:category), @controller.category | |
| 24 | - end | |
| 25 | - | |
| 26 | - should 'list recent articles in the category' do | |
| 27 | - @controller.expects(:category).returns(@category).at_least_once | |
| 28 | - recent = [] | |
| 29 | - @category.expects(:recent_articles).returns(recent) | |
| 30 | - | |
| 31 | - get :view, :category_path => [ 'my-category' ] | |
| 32 | - assert_same recent, assigns(:recent_articles) | |
| 33 | - end | |
| 34 | - | |
| 35 | - should 'list recent comments in the category' do | |
| 36 | - @controller.expects(:category).returns(@category).at_least_once | |
| 37 | - recent = [] | |
| 38 | - @category.expects(:recent_comments).returns(recent) | |
| 39 | - | |
| 40 | - get :view, :category_path => [ 'my-category' ] | |
| 41 | - assert_same recent, assigns(:recent_comments) | |
| 42 | - end | |
| 43 | - | |
| 44 | - should 'list most commented articles in the category' do | |
| 45 | - @controller.expects(:category).returns(@category).at_least_once | |
| 46 | - most_commented = [] | |
| 47 | - @category.expects(:most_commented_articles).returns(most_commented) | |
| 48 | - | |
| 49 | - get :view, :category_path => [ 'my-category' ] | |
| 50 | - assert_same most_commented, assigns(:most_commented_articles) | |
| 51 | - end | |
| 52 | - | |
| 53 | - should 'display category of products' do | |
| 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) | |
| 57 | - get :view, :category_path => cat.path.split('/') | |
| 58 | - assert_includes assigns(:products), p | |
| 59 | - end | |
| 60 | - | |
| 61 | -end |
test/functional/search_controller_test.rb
| ... | ... | @@ -9,6 +9,8 @@ class SearchControllerTest < Test::Unit::TestCase |
| 9 | 9 | @controller = SearchController.new |
| 10 | 10 | @request = ActionController::TestRequest.new |
| 11 | 11 | @response = ActionController::TestResponse.new |
| 12 | + | |
| 13 | + @category = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 12 | 14 | end |
| 13 | 15 | |
| 14 | 16 | should 'filter stop words' do |
| ... | ... | @@ -52,11 +54,10 @@ class SearchControllerTest < Test::Unit::TestCase |
| 52 | 54 | |
| 53 | 55 | should 'search for articles in a specific category' do |
| 54 | 56 | person = create_user('teste').person |
| 55 | - category = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 56 | 57 | |
| 57 | 58 | # in category |
| 58 | 59 | art1 = person.articles.build(:name => 'an article to be found') |
| 59 | - art1.categories << category | |
| 60 | + art1.categories << @category | |
| 60 | 61 | art1.save! |
| 61 | 62 | |
| 62 | 63 | # not in category |
| ... | ... | @@ -83,11 +84,10 @@ class SearchControllerTest < Test::Unit::TestCase |
| 83 | 84 | |
| 84 | 85 | should 'search in comments in a specific category' do |
| 85 | 86 | person = create_user('teste').person |
| 86 | - category = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 87 | 87 | |
| 88 | 88 | # in category |
| 89 | 89 | art1 = person.articles.build(:name => 'an article to be found') |
| 90 | - art1.categories << category | |
| 90 | + art1.categories << @category | |
| 91 | 91 | art1.save! |
| 92 | 92 | comment1 = art1.comments.build(:title => 'comment to be found', :body => 'hfyfyh', :author => person); comment1.save! |
| 93 | 93 | |
| ... | ... | @@ -108,10 +108,9 @@ class SearchControllerTest < Test::Unit::TestCase |
| 108 | 108 | end |
| 109 | 109 | |
| 110 | 110 | should 'find enterprises in a specified category' do |
| 111 | - category = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 112 | 111 | |
| 113 | 112 | # in category |
| 114 | - ent1 = Enterprise.create!(:name => 'testing enterprise 1', :identifier => 'test1', :categories => [category]) | |
| 113 | + ent1 = Enterprise.create!(:name => 'testing enterprise 1', :identifier => 'test1', :categories => [@category]) | |
| 115 | 114 | |
| 116 | 115 | # not in category |
| 117 | 116 | ent2 = Enterprise.create!(:name => 'testing enterprise 2', :identifier => 'test2') |
| ... | ... | @@ -132,8 +131,7 @@ class SearchControllerTest < Test::Unit::TestCase |
| 132 | 131 | end |
| 133 | 132 | |
| 134 | 133 | should 'find people in a specific category' do |
| 135 | - c = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 136 | - p1 = create_user('people_1').person; p1.name = 'a beautiful person'; p1.categories << c; p1.save! | |
| 134 | + p1 = create_user('people_1').person; p1.name = 'a beautiful person'; p1.categories << @category; p1.save! | |
| 137 | 135 | p2 = create_user('people_2').person; p2.name = 'another beautiful person'; p2.save! |
| 138 | 136 | get :index, :category_path => [ 'my-category' ], :query => 'beautiful', :find_in => [ 'people' ] |
| 139 | 137 | assert_includes assigns(:results)[:people], p1 |
| ... | ... | @@ -150,10 +148,9 @@ class SearchControllerTest < Test::Unit::TestCase |
| 150 | 148 | end |
| 151 | 149 | |
| 152 | 150 | should 'find communities in a specified category' do |
| 153 | - c = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 154 | 151 | c1 = Community.create!(:name => 'a beautiful community', :identifier => 'bea_comm', :environment => Environment.default) |
| 155 | 152 | c2 = Community.create!(:name => 'another beautiful community', :identifier => 'an_bea_comm', :environment => Environment.default) |
| 156 | - c1.categories << c; c1.save! | |
| 153 | + c1.categories << @category; c1.save! | |
| 157 | 154 | get :index, :category_path => [ 'my-category' ], :query => 'beautiful', :find_in => [ 'communities' ] |
| 158 | 155 | assert_includes assigns(:results)[:communities], c1 |
| 159 | 156 | assert_not_includes assigns(:results)[:communities], c2 |
| ... | ... | @@ -169,8 +166,7 @@ class SearchControllerTest < Test::Unit::TestCase |
| 169 | 166 | end |
| 170 | 167 | |
| 171 | 168 | should 'find products in a specific category' do |
| 172 | - c = Category.create!(:name => 'my category', :environment => Environment.default) | |
| 173 | - ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1'); ent1.categories << c | |
| 169 | + ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1'); ent1.categories << @category | |
| 174 | 170 | ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2') |
| 175 | 171 | prod1 = ent1.products.create!(:name => 'a beautiful product') |
| 176 | 172 | prod2 = ent2.products.create!(:name => 'another beautiful product') |
| ... | ... | @@ -261,4 +257,49 @@ class SearchControllerTest < Test::Unit::TestCase |
| 261 | 257 | assert_tag :tag => 'form' , :attributes => { :method => 'get' } |
| 262 | 258 | end |
| 263 | 259 | |
| 260 | + def test_should_display_a_given_category | |
| 261 | + get :category_index, :category_path => [ 'my-category' ] | |
| 262 | + assert_equal @category, assigns(:category) | |
| 263 | + end | |
| 264 | + | |
| 265 | + should 'expose category in a method' do | |
| 266 | + get :category_index, :category_path => [ 'my-category' ] | |
| 267 | + assert_same assigns(:category), @controller.category | |
| 268 | + end | |
| 269 | + | |
| 270 | + should 'list recent articles in the category' do | |
| 271 | + @controller.expects(:category).returns(@category).at_least_once | |
| 272 | + recent = [] | |
| 273 | + @category.expects(:recent_articles).returns(recent) | |
| 274 | + | |
| 275 | + get :category_index, :category_path => [ 'my-category' ] | |
| 276 | + assert_same recent, assigns(:recent_articles) | |
| 277 | + end | |
| 278 | + | |
| 279 | + should 'list recent comments in the category' do | |
| 280 | + @controller.expects(:category).returns(@category).at_least_once | |
| 281 | + recent = [] | |
| 282 | + @category.expects(:recent_comments).returns(recent) | |
| 283 | + | |
| 284 | + get :category_index, :category_path => [ 'my-category' ] | |
| 285 | + assert_same recent, assigns(:recent_comments) | |
| 286 | + end | |
| 287 | + | |
| 288 | + should 'list most commented articles in the category' do | |
| 289 | + @controller.expects(:category).returns(@category).at_least_once | |
| 290 | + most_commented = [] | |
| 291 | + @category.expects(:most_commented_articles).returns(most_commented) | |
| 292 | + | |
| 293 | + get :category_index, :category_path => [ 'my-category' ] | |
| 294 | + assert_same most_commented, assigns(:most_commented_articles) | |
| 295 | + end | |
| 296 | + | |
| 297 | + should 'display category of products' do | |
| 298 | + cat = ProductCategory.create!(:name => 'Food', :environment => Environment.default) | |
| 299 | + ent = Enterprise.create!(:name => 'Enterprise test', :identifier => 'enterprise_test') | |
| 300 | + p = cat.products.create!(:name => 'product test', :enterprise => ent) | |
| 301 | + get :category_index, :category_path => cat.path.split('/') | |
| 302 | + assert_includes assigns(:products), p | |
| 303 | + end | |
| 304 | + | |
| 264 | 305 | end | ... | ... |
test/integration/routing_test.rb
| ... | ... | @@ -69,8 +69,7 @@ class RoutingTest < ActionController::IntegrationTest |
| 69 | 69 | end |
| 70 | 70 | |
| 71 | 71 | def test_category_browser |
| 72 | - assert_routing('/cat/products/eletronics', :controller => 'category', :action => 'view', :category_path => [ 'products', 'eletronics']) | |
| 73 | - assert_routing('/cat', :controller => 'category', :action => 'index') | |
| 72 | + assert_routing('/cat/products/eletronics', :controller => 'search', :action => 'category_index', :category_path => [ 'products', 'eletronics']) | |
| 74 | 73 | end |
| 75 | 74 | |
| 76 | 75 | #FIXME remove this if design_blocks is not going to be used; or uncomment otherwise; |
| ... | ... | @@ -99,4 +98,8 @@ class RoutingTest < ActionController::IntegrationTest |
| 99 | 98 | assert_routing('/search/filter/a/b', :controller => 'search', :action => 'filter', :category_path => ['a','b']) |
| 100 | 99 | end |
| 101 | 100 | |
| 101 | + def test_assets_routing | |
| 102 | + assert_routing('/assets/my-asset/a/b/c', :controller => 'search', :action => 'assets', :asset => 'my-asset', :category_path => ['a', 'b', 'c']) | |
| 103 | + end | |
| 104 | + | |
| 102 | 105 | end | ... | ... |
test/unit/application_helper_test.rb
| ... | ... | @@ -67,7 +67,7 @@ class ApplicationHelperTest < Test::Unit::TestCase |
| 67 | 67 | cat.expects(:full_name).returns('category name') |
| 68 | 68 | |
| 69 | 69 | result = "/cat/my-category/my-subcatagory" |
| 70 | - expects(:link_to).with('category name', :controller => 'category', :action => 'view', :category_path => ['my-category', 'my-subcatagory']).returns(result) | |
| 70 | + expects(:link_to).with('category name', :controller => 'search', :action => 'category_index', :category_path => ['my-category', 'my-subcatagory']).returns(result) | |
| 71 | 71 | assert_same result, link_to_category(cat) |
| 72 | 72 | end |
| 73 | 73 | ... | ... |