summaryrefslogtreecommitdiff
path: root/spec/controllers/projects/releases/evidences_controller_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers/projects/releases/evidences_controller_spec.rb')
-rw-r--r--spec/controllers/projects/releases/evidences_controller_spec.rb63
1 files changed, 42 insertions, 21 deletions
diff --git a/spec/controllers/projects/releases/evidences_controller_spec.rb b/spec/controllers/projects/releases/evidences_controller_spec.rb
index d3808087681..d5a9665d6a5 100644
--- a/spec/controllers/projects/releases/evidences_controller_spec.rb
+++ b/spec/controllers/projects/releases/evidences_controller_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Projects::Releases::EvidencesController do
+RSpec.describe Projects::Releases::EvidencesController do
let!(:project) { create(:project, :repository, :public) }
let_it_be(:private_project) { create(:project, :repository, :private) }
let_it_be(:developer) { create(:user) }
@@ -31,8 +31,8 @@ describe Projects::Releases::EvidencesController do
end
describe 'GET #show' do
- let_it_be(:tag_name) { "v1.1.0-evidence" }
- let!(:release) { create(:release, :with_evidence, project: project, tag: tag_name) }
+ let(:tag_name) { "v1.1.0-evidence" }
+ let!(:release) { create(:release, project: project, tag: tag_name) }
let(:evidence) { release.evidences.first }
let(:tag) { CGI.escape(release.tag) }
let(:format) { :json }
@@ -48,6 +48,8 @@ describe Projects::Releases::EvidencesController do
end
before do
+ ::Releases::CreateEvidenceService.new(release).execute
+
sign_in(user)
end
@@ -84,14 +86,9 @@ describe Projects::Releases::EvidencesController do
end
context 'when release is associated to a milestone which includes an issue' do
- let_it_be(:project) { create(:project, :repository, :public) }
- let_it_be(:issue) { create(:issue, project: project) }
- let_it_be(:milestone) { create(:milestone, project: project, issues: [issue]) }
- let_it_be(:release) { create(:release, project: project, tag: tag_name, milestones: [milestone]) }
-
- before do
- create(:evidence, release: release)
- end
+ let(:issue) { create(:issue, project: project) }
+ let(:milestone) { create(:milestone, project: project, issues: [issue]) }
+ let(:release) { create(:release, project: project, tag: tag_name, milestones: [milestone]) }
shared_examples_for 'does not show the issue in evidence' do
it do
@@ -111,7 +108,9 @@ describe Projects::Releases::EvidencesController do
end
end
- shared_examples_for 'safely expose evidence' do
+ context 'when user is non-project member' do
+ let(:user) { create(:user) }
+
it_behaves_like 'does not show the issue in evidence'
context 'when the issue is confidential' do
@@ -127,28 +126,50 @@ describe Projects::Releases::EvidencesController do
end
context 'when project is private' do
- let!(:project) { create(:project, :repository, :private) }
+ let(:project) { create(:project, :repository, :private) }
it_behaves_like 'evidence not found'
end
context 'when project restricts the visibility of issues to project members only' do
- let!(:project) { create(:project, :repository, :issues_private) }
+ let(:project) { create(:project, :repository, :issues_private) }
it_behaves_like 'evidence not found'
end
end
- context 'when user is non-project member' do
- let(:user) { create(:user) }
-
- it_behaves_like 'safely expose evidence'
- end
-
context 'when user is auditor', if: Gitlab.ee? do
let(:user) { create(:user, :auditor) }
- it_behaves_like 'safely expose evidence'
+ it_behaves_like 'does not show the issue in evidence'
+
+ context 'when the issue is confidential' do
+ let(:issue) { create(:issue, :confidential, project: project) }
+
+ it_behaves_like 'does not show the issue in evidence'
+ end
+
+ context 'when the user is the author of the confidential issue' do
+ let(:issue) { create(:issue, :confidential, project: project, author: user) }
+
+ it_behaves_like 'does not show the issue in evidence'
+ end
+
+ context 'when project is private' do
+ let(:project) { create(:project, :repository, :private) }
+
+ it 'returns evidence ' do
+ subject
+
+ expect(json_response).to eq(evidence.summary)
+ end
+ end
+
+ context 'when project restricts the visibility of issues to project members only' do
+ let(:project) { create(:project, :repository, :issues_private) }
+
+ it_behaves_like 'evidence not found'
+ end
end
context 'when external authorization control is enabled' do