diff options
author | Micaël Bergeron <mbergeron@gitlab.com> | 2018-03-09 18:09:00 +0300 |
---|---|---|
committer | Micaël Bergeron <mbergeron@gitlab.com> | 2018-03-22 15:49:04 +0300 |
commit | 44f37504fb229ab78606a5fd11f75316ebc2667b (patch) | |
tree | 084a49e025463f67942c85c3f99edd4a827e1a89 /spec/requests/api | |
parent | e1f076ecb5c0e92e62ee628b6c18bc8869812b2e (diff) |
Backport ee-40781-os-to-ce
Diffstat (limited to 'spec/requests/api')
-rw-r--r-- | spec/requests/api/jobs_spec.rb | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/spec/requests/api/jobs_spec.rb b/spec/requests/api/jobs_spec.rb index 62ed9fd00a1..81335e72350 100644 --- a/spec/requests/api/jobs_spec.rb +++ b/spec/requests/api/jobs_spec.rb @@ -21,6 +21,7 @@ describe API::Jobs do let(:guest) { create(:project_member, :guest, project: project).user } before do + stub_licensed_features(cross_project_pipelines: true) project.add_developer(user) end @@ -316,11 +317,6 @@ describe API::Jobs do end end - before do - stub_artifacts_object_storage - get api("/projects/#{project.id}/jobs/#{job.id}/artifacts", api_user) - end - context 'normal authentication' do context 'job with artifacts' do context 'when artifacts are stored locally' do @@ -344,8 +340,10 @@ describe API::Jobs do end context 'when artifacts are stored remotely' do + let(:proxy_download) { false } + before do - stub_artifacts_object_storage + stub_artifacts_object_storage(proxy_download: proxy_download) end let(:job) { create(:ci_build, pipeline: pipeline) } @@ -357,6 +355,20 @@ describe API::Jobs do get api("/projects/#{project.id}/jobs/#{job.id}/artifacts", api_user) end + context 'when proxy download is enabled' do + let(:proxy_download) { true } + + it 'responds with the workhorse send-url' do + expect(response.headers[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("send-url:") + end + end + + context 'when proxy download is disabled' do + it 'returns location redirect' do + expect(response).to have_gitlab_http_status(302) + end + end + context 'authorized user' do it 'returns the file remote URL' do expect(response).to redirect_to(artifact.file.url) @@ -495,6 +507,29 @@ describe API::Jobs do it_behaves_like 'a valid file' end + + context 'when using job_token to authenticate' do + before do + pipeline.reload + pipeline.update(ref: 'master', + sha: project.commit('master').sha) + + get api("/projects/#{project.id}/jobs/artifacts/master/download"), job: job.name, job_token: job.token + end + + context 'when user is reporter' do + it_behaves_like 'a valid file' + end + + context 'when user is admin, but not member' do + let(:api_user) { create(:admin) } + let(:job) { create(:ci_build, :artifacts, pipeline: pipeline, user: api_user) } + + it 'does not allow to see that artfiact is present' do + expect(response).to have_gitlab_http_status(404) + end + end + end end end |