diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-17 21:09:16 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-17 21:09:16 +0000 |
commit | 154b9bae142ba15fec753f44327654595094b879 (patch) | |
tree | 027f8ae024961778d5b00c77a72fe302f985d4f3 /spec/services/search_service_spec.rb | |
parent | 2c156e3c7bbade01c36eee18327f1ced6eebea79 (diff) | |
download | gitlab-ce-154b9bae142ba15fec753f44327654595094b879.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/search_service_spec.rb')
-rw-r--r-- | spec/services/search_service_spec.rb | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb index 48065bf596a..10dafaebe85 100644 --- a/spec/services/search_service_spec.rb +++ b/spec/services/search_service_spec.rb @@ -10,13 +10,16 @@ describe SearchService do let!(:group_member) { create(:group_member, group: accessible_group, user: user) } let!(:accessible_project) { create(:project, :private, name: 'accessible_project') } - let!(:inaccessible_project) { create(:project, :private, name: 'inaccessible_project') } let(:note) { create(:note_on_issue, project: accessible_project) } + let!(:inaccessible_project) { create(:project, :private, name: 'inaccessible_project') } + let(:snippet) { create(:snippet, author: user) } let(:group_project) { create(:project, group: accessible_group, name: 'group_project') } let(:public_project) { create(:project, :public, name: 'public_project') } + subject(:search_service) { described_class.new(user, search: search, scope: scope, page: 1) } + before do accessible_project.add_maintainer(user) end @@ -293,5 +296,70 @@ describe SearchService do expect(search_objects.first).to eq public_project end end + + context 'redacting search results' do + shared_examples 'it redacts incorrect results' do + before do + allow(Ability).to receive(:allowed?).and_return(allowed) + end + + context 'when allowed' do + let(:allowed) { true } + + it 'does nothing' do + expect(results).not_to be_empty + expect(results).to all(be_an(model_class)) + end + end + + context 'when disallowed' do + let(:allowed) { false } + + it 'does nothing' do + expect(results).to be_empty + end + end + end + + context 'issues' do + let(:issue) { create(:issue, project: accessible_project) } + let(:scope) { 'issues' } + let(:model_class) { Issue } + let(:ability) { :read_issue } + let(:search) { issue.title } + let(:results) { subject.search_objects } + + it_behaves_like 'it redacts incorrect results' + end + + context 'notes' do + let(:note) { create(:note_on_commit, project: accessible_project) } + let(:scope) { 'notes' } + let(:model_class) { Note } + let(:ability) { :read_note } + let(:search) { note.note } + let(:results) do + described_class.new( + user, + project_id: accessible_project.id, + scope: scope, + search: note.note + ).search_objects + end + + it_behaves_like 'it redacts incorrect results' + end + + context 'merge_requests' do + let(:scope) { 'merge_requests' } + let(:model_class) { MergeRequest } + let(:ability) { :read_merge_request } + let(:merge_request) { create(:merge_request, source_project: accessible_project, author: user) } + let(:search) { merge_request.title } + let(:results) { subject.search_objects } + + it_behaves_like 'it redacts incorrect results' + end + end end end |