summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/search_controller.rb27
-rw-r--r--spec/controllers/search_controller_spec.rb18
2 files changed, 35 insertions, 10 deletions
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index 2a2748dc1fb..2bdc9c366f2 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -3,16 +3,7 @@ class SearchController < ApplicationController
project_id = params[:project_id]
group_id = params[:group_id]
- project_ids = current_user.authorized_projects.map(&:id)
-
- if group_id.present?
- @group = Group.find(group_id)
- group_project_ids = @group.projects.map(&:id)
- project_ids.select! { |id| group_project_ids.include?(id)}
- elsif project_id.present?
- @project = Project.find(params[:project_id])
- project_ids.select! { |id| id == project_id.to_i}
- end
+ project_ids = find_project_ids(group_id, project_id)
result = SearchContext.new(project_ids, current_user, params).execute
@@ -23,4 +14,20 @@ class SearchController < ApplicationController
@blobs = Kaminari.paginate_array(result[:blobs]).page(params[:page]).per(20)
@total_results = @projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.total_count
end
+
+ private
+
+ def find_project_ids(group_id, project_id)
+ project_ids = current_user.authorized_projects.map(&:id)
+
+ if group_id.present?
+ @group = Group.find(group_id)
+ group_project_ids = @group.projects.map(&:id)
+ project_ids.select! { |id| group_project_ids.include?(id) }
+ elsif project_id.present?
+ @project = Project.find(project_id)
+ project_ids = @project.public ? [@project.id] : project_ids.select { |id| id == project_id.to_i }
+ end
+ project_ids
+ end
end
diff --git a/spec/controllers/search_controller_spec.rb b/spec/controllers/search_controller_spec.rb
new file mode 100644
index 00000000000..8742789a3b1
--- /dev/null
+++ b/spec/controllers/search_controller_spec.rb
@@ -0,0 +1,18 @@
+require 'spec_helper'
+
+describe SearchController do
+ let(:project) { create(:project, public: true) }
+ let(:user) { create(:user) }
+
+ before do
+ sign_in(user)
+ end
+
+ describe '#find_project_ids' do
+ it 'should include public projects ids when searching within a single project' do
+ project_ids = controller.send(:find_project_ids,nil, project.id)
+ project_ids.size.should == 1
+ project_ids[0].should == project.id
+ end
+ end
+end