Commit 2ec6c0872e30a30c1d3a9e8d785a42b239f9fa69
1 parent
b2fad82f
Exists in
master
and in
29 other branches
ActionItem243: updating search controller tests
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1605 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
4 changed files
with
52 additions
and
49 deletions
Show diff stats
app/controllers/public/search_controller.rb
... | ... | @@ -16,29 +16,18 @@ class SearchController < ApplicationController |
16 | 16 | |
17 | 17 | ###################################################### |
18 | 18 | |
19 | - class Finder | |
20 | - attr_reader :environment | |
21 | - def initialize(env) | |
22 | - @environment = env | |
23 | - end | |
24 | - | |
25 | - def articles | |
26 | - environment.articles | |
27 | - end | |
28 | - | |
29 | - def comments | |
30 | - environment.comments | |
31 | - end | |
32 | - end | |
33 | - | |
34 | 19 | def index |
35 | 20 | @query = params[:query] || '' |
36 | 21 | @filtered_query = remove_stop_words(@query) |
37 | 22 | |
38 | - @finder ||= SearchController::Finder.new(@environment) | |
23 | + @finder ||= @environment | |
39 | 24 | |
40 | - @results = { :articles => search(@finder.articles, @query), | |
41 | - :comments => search(@finder.comments, @query) } | |
25 | + @results = { | |
26 | + :articles => search(@finder.articles, @filtered_query), | |
27 | + :comments => search(@finder.comments, @filtered_query), | |
28 | + :enterprises => search(@finder.enterprises, @filtered_query), | |
29 | + :people => search(@finder.people, @filtered_query), | |
30 | + } | |
42 | 31 | end |
43 | 32 | |
44 | 33 | before_filter :load_category, :only => :filter | ... | ... |
app/models/category.rb
... | ... | @@ -26,7 +26,8 @@ class Category < ActiveRecord::Base |
26 | 26 | has_many :comments, :through => :articles |
27 | 27 | |
28 | 28 | has_many :profile_categorizations |
29 | - has_many :profiles, :through => :profile_categorizations | |
29 | + has_many :enterprises, :through => :profile_categorizations, :source => :profile | |
30 | + has_many :people, :through => :profile_categorizations, :source => :profile | |
30 | 31 | |
31 | 32 | def recent_articles(limit = 10) |
32 | 33 | self.articles.recent(limit) | ... | ... |
test/functional/search_controller_test.rb
... | ... | @@ -19,6 +19,13 @@ class SearchControllerTest < Test::Unit::TestCase |
19 | 19 | assert_equal 'carne vaca', assigns('filtered_query') |
20 | 20 | end |
21 | 21 | |
22 | + should 'search with filtered query' do | |
23 | + @controller.expects(:locale).returns('pt_BR').at_least_once | |
24 | + @controller.expects(:search).with(anything, 'carne vaca').at_least_once | |
25 | + @controller.expects(:search).with(anything, 'a carne da vaca').never | |
26 | + get 'index', :query => 'a carne da vaca' | |
27 | + end | |
28 | + | |
22 | 29 | should 'search only in specified types of content' do |
23 | 30 | get :index, :query => 'something not important', :find_in => [ 'articles' ] |
24 | 31 | assert_equal [:articles], assigns(:results).keys |
... | ... | @@ -94,24 +101,9 @@ class SearchControllerTest < Test::Unit::TestCase |
94 | 101 | assert_not_includes assigns(:results)[:comments], comment2 |
95 | 102 | end |
96 | 103 | |
97 | - | |
98 | - should 'find in environment' do | |
99 | - env = mock | |
100 | - finder = SearchController::Finder.new(env) | |
101 | - assert_same env, finder.environment | |
102 | - end | |
103 | - | |
104 | - should 'delegate to environment in default finder' do | |
105 | - env = mock | |
106 | - articles = mock | |
107 | - finder = SearchController::Finder.new(env) | |
108 | - env.expects(:articles).returns(articles) | |
109 | - assert_same articles, finder.articles | |
110 | - end | |
111 | - | |
112 | 104 | should 'find enterprises' do |
113 | 105 | ent = Enterprise.create!(:name => 'teste', :identifier => 'teste') |
114 | - get 'index', :query => 'teste' | |
106 | + get 'index', :query => 'teste', :find_in => [ 'enterprises' ] | |
115 | 107 | assert_includes assigns(:results)[:enterprises], ent |
116 | 108 | end |
117 | 109 | |
... | ... | @@ -119,22 +111,34 @@ class SearchControllerTest < Test::Unit::TestCase |
119 | 111 | category = Category.create!(:name => 'my category', :environment => Environment.default) |
120 | 112 | |
121 | 113 | # in category |
122 | - ent1 = Enterprise.create!(:name => 'test enterprise 1', :identifier => 'test1', :categories => [category]) | |
114 | + ent1 = Enterprise.create!(:name => 'testing enterprise 1', :identifier => 'test1', :categories => [category]) | |
123 | 115 | |
124 | 116 | # not in category |
125 | - ent2 = Enterprise.create!(:name => 'test enterprise 2', :identifier => 'test1') | |
117 | + ent2 = Enterprise.create!(:name => 'testing enterprise 2', :identifier => 'test2') | |
126 | 118 | |
127 | - get :filter, :category_path => [ 'my-category' ], :query => 'test', :find_in => [ 'enterprises' ] | |
119 | + get :filter, :category_path => [ 'my-category' ], :query => 'testing', :find_in => [ 'enterprises' ] | |
128 | 120 | |
129 | - assert_includes ent1, assigns(:results)[:enterprises] | |
130 | - assert_not_includes ent2, assigns(:results)[:enterprises] | |
121 | + assert_includes assigns(:results)[:enterprises], ent1 | |
122 | + assert_not_includes assigns(:results)[:enterprises], ent2 | |
131 | 123 | end |
132 | 124 | |
133 | 125 | # 'assets' menu |
134 | 126 | should 'list enterprises in a specified category' |
135 | 127 | |
136 | - should 'find people' | |
137 | - should 'find people in a specific category' | |
128 | + should 'find people' do | |
129 | + p1 = create_user('people_1').person; p1.name = 'a beatiful person'; p1.save! | |
130 | + get :index, :query => 'beatiful', :find_in => [ 'people' ] | |
131 | + assert_includes assigns(:results)[:people], p1 | |
132 | + end | |
133 | + | |
134 | + 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 beatiful person'; p1.categories << c; p1.save! | |
137 | + p2 = create_user('people_2').person; p2.name = 'another beatiful person'; p2.save! | |
138 | + get :filter, :category_path => [ 'my-category' ], :query => 'beatiful', :find_in => [ 'people' ] | |
139 | + assert_includes assigns(:results)[:people], p1 | |
140 | + assert_not_includes assigns(:results)[:people], p2 | |
141 | + end | |
138 | 142 | |
139 | 143 | # 'assets' menu |
140 | 144 | should 'list people in a specified category' | ... | ... |
test/unit/category_test.rb
... | ... | @@ -276,14 +276,23 @@ class CategoryTest < Test::Unit::TestCase |
276 | 276 | assert_equivalent [c1, c2, c3], c.comments |
277 | 277 | end |
278 | 278 | |
279 | - should 'have profiles' do | |
279 | + should 'have enterprises' do | |
280 | 280 | c = @env.categories.build(:name => 'my category'); c.save! |
281 | - person1 = create_user('testuser_one').person | |
282 | - person1.categories << c | |
283 | - person2 = create_user('testuser_two').person | |
284 | - person2.categories << c | |
285 | - assert_includes c.profiles, person1 | |
286 | - assert_includes c.profiles, person2 | |
281 | + ent1 = Enterprise.create!(:identifier => 'enterprise_1', :name => 'Enterprise one') | |
282 | + ent1.categories << c | |
283 | + ent2 = Enterprise.create!(:identifier => 'enterprise_2', :name => 'Enterprise one') | |
284 | + ent2.categories << c | |
285 | + assert_includes c.enterprises, ent1 | |
286 | + assert_includes c.enterprises, ent2 | |
287 | + end | |
288 | + | |
289 | + should 'have people' do | |
290 | + c = @env.categories.build(:name => 'my category'); c.save! | |
291 | + p1 = create_user('testuser_1').person | |
292 | + p1.categories << c | |
293 | + p2 = create_user('testuser_2').person | |
294 | + p2.categories << c | |
295 | + assert_equal [p1, p2], c.people | |
287 | 296 | end |
288 | 297 | |
289 | 298 | end | ... | ... |