Feature #9909 » 9909_set_default_search_scope_to_project_and_its_subprojects.patch
| app/controllers/search_controller.rb | ||
|---|---|---|
| 48 | 48 |
nil |
| 49 | 49 |
when 'my_projects' |
| 50 | 50 |
User.current.projects |
| 51 |
when 'subprojects' |
|
| 52 |
@project ? (@project.self_and_descendants.active.to_a) : nil |
|
| 53 |
else |
|
| 51 |
when 'project' |
|
| 54 | 52 |
@project |
| 53 |
else |
|
| 54 |
@project ? (@project.self_and_descendants.active.to_a) : nil |
|
| 55 | 55 |
end |
| 56 | 56 | |
| 57 | 57 |
@object_types = Redmine::Search.available_search_types.dup |
| app/helpers/search_helper.rb | ||
|---|---|---|
| 46 | 46 |
def project_select_tag |
| 47 | 47 |
options = [[l(:label_project_all), 'all']] |
| 48 | 48 |
options << [l(:label_my_projects), 'my_projects'] unless User.current.memberships.empty? |
| 49 |
options << [l(:label_and_its_subprojects, @project.name), 'subprojects'] unless @project.nil? || @project.descendants.active.empty?
|
|
| 50 |
options << [@project.name, ''] unless @project.nil? |
|
| 49 |
options << [l(:label_and_its_subprojects, @project.name), ''] unless @project.nil? || @project.descendants.active.empty? |
|
| 50 |
options << [@project.name, 'project'] unless @project.nil?
|
|
| 51 | 51 |
label_tag("scope", l(:description_project_scope), :class => "hidden-for-sighted") +
|
| 52 | 52 |
select_tag('scope', options_for_select(options, params[:scope].to_s)) if options.size > 1
|
| 53 | 53 |
end |
| ... | ... | |
| 63 | 63 |
:all_words => params[:all_words], :scope => params[:scope], t => 1) |
| 64 | 64 |
end |
| 65 | 65 |
('<ul>'.html_safe +
|
| 66 |
links.map {|link| content_tag('li', link)}.join(' ').html_safe +
|
|
| 66 |
links.map {|link| content_tag('li', link)}.join(' ').html_safe +
|
|
| 67 | 67 |
'</ul>'.html_safe) unless links.empty? |
| 68 | 68 |
end |
| 69 | 69 |
end |
| test/functional/search_controller_test.rb | ||
|---|---|---|
| 169 | 169 |
end |
| 170 | 170 |
end |
| 171 | 171 | |
| 172 |
def test_search_project_and_subprojects
|
|
| 173 |
get :index, :params => {:id => 1, :q => 'recipe subproject', :scope => 'subprojects', :all_words => ''}
|
|
| 172 |
def test_search_only_in_project
|
|
| 173 |
get :index, :params => {:id => 1, :q => 'recipe subproject', :scope => 'project', :all_words => ''}
|
|
| 174 | 174 |
assert_response :success |
| 175 | 175 | |
| 176 | 176 |
assert_select '#search-results' do |
| 177 | 177 |
assert_select 'dt.issue', :text => /Bug #1/ |
| 178 |
assert_select 'dt.issue a[href="/issues/5"]', 0 |
|
| 179 |
end |
|
| 180 |
end |
|
| 181 | ||
| 182 |
def test_search_default_scope_should_search_in_project_and_subprojects |
|
| 183 |
get :index, :params => {:id => 1, :q => 'recipe subproject', :all_words => ''}
|
|
| 184 |
assert_response :success |
|
| 185 | ||
| 186 |
assert_select '#scope option[selected=selected]', :text => 'eCookbook and its subprojects' |
|
| 187 |
assert_select '#search-results' do |
|
| 188 |
assert_select 'dt.issue', :text => /Bug #1/ |
|
| 178 | 189 |
assert_select 'dt.issue', :text => /Bug #5/ |
| 179 | 190 |
end |
| 180 | 191 |
end |
| ... | ... | |
| 270 | 281 |
assert_select 'input[name=all_words]:not([checked])' |
| 271 | 282 |
assert_select '#search-results' do |
| 272 | 283 |
assert_select 'dt.issue', :text => / #3 / |
| 273 |
assert_select 'dt', 3
|
|
| 284 |
assert_select 'dt', 4
|
|
| 274 | 285 |
end |
| 275 | 286 |
end |
| 276 | 287 | |