Commit e4d07f12 authored by Zeger-Jan van de Weg's avatar Zeger-Jan van de Weg

Test against public projects

parent d5486807
...@@ -29,7 +29,7 @@ class Projects::ArtifactsController < Projects::ApplicationController ...@@ -29,7 +29,7 @@ class Projects::ArtifactsController < Projects::ApplicationController
blob = @entry.blob blob = @entry.blob
conditionally_expand_blob(blob) conditionally_expand_blob(blob)
if blob.external_link? if blob.external_link?(build)
redirect_to blob.external_url(@project, build) redirect_to blob.external_url(@project, build)
else else
respond_to do |format| respond_to do |format|
......
...@@ -34,7 +34,7 @@ module Ci ...@@ -34,7 +34,7 @@ module Ci
end end
def external_url(project, job) def external_url(project, job)
return unless external_link? return unless external_link?(job)
components = project.full_path_components components = project.full_path_components
components << "-/jobs/#{job.id}/artifacts/file/#{path}" components << "-/jobs/#{job.id}/artifacts/file/#{path}"
...@@ -43,10 +43,11 @@ module Ci ...@@ -43,10 +43,11 @@ module Ci
"#{pages_config.protocol}://#{components[0]}.#{pages_config.host}/#{artifact_path}" "#{pages_config.protocol}://#{components[0]}.#{pages_config.host}/#{artifact_path}"
end end
def external_link? def external_link?(job)
pages_config.enabled && pages_config.enabled &&
pages_config.artifacts_server && pages_config.artifacts_server &&
EXTENTIONS_SERVED_BY_PAGES.include?(File.extname(name)) EXTENTIONS_SERVED_BY_PAGES.include?(File.extname(name)) &&
job.project.public?
end end
private private
......
- blob = file.blob - blob = file.blob
- path_to_file = file_project_job_artifacts_path(@project, @build, path: file.path) - path_to_file = file_project_job_artifacts_path(@project, @build, path: file.path)
- external_link = blob.external_link? && @project.public? - external_link = blob.external_link?(@build)
%tr.tree-item.js-artifact-tree-row{ data: { link: path_to_file, external_link: "#{external_link}" } } %tr.tree-item.js-artifact-tree-row{ data: { link: path_to_file, external_link: "#{external_link}" } }
%td.tree-item-file-name %td.tree-item-file-name
......
...@@ -2,7 +2,7 @@ require 'spec_helper' ...@@ -2,7 +2,7 @@ require 'spec_helper'
describe Projects::ArtifactsController do describe Projects::ArtifactsController do
set(:user) { create(:user) } set(:user) { create(:user) }
set(:project) { create(:project, :repository) } set(:project) { create(:project, :repository, :public) }
let(:pipeline) do let(:pipeline) do
create(:ci_pipeline, create(:ci_pipeline,
...@@ -91,6 +91,25 @@ describe Projects::ArtifactsController do ...@@ -91,6 +91,25 @@ describe Projects::ArtifactsController do
end end
end end
end end
context 'when the project is private' do
let(:private_project) { create(:project, :repository, :private) }
let(:pipeline) { create(:ci_pipeline, project: private_project) }
let(:job) { create(:ci_build, :success, :artifacts, pipeline: pipeline) }
before do
private_project.add_developer(user)
allow(Gitlab.config.pages).to receive(:artifacts_server).and_return(true)
end
it 'does not redirect the request' do
get :file, namespace_id: private_project.namespace, project_id: private_project, job_id: job, path: 'ci_artifacts.txt'
expect(response).to have_http_status(:ok)
expect(response).to render_template('projects/artifacts/file')
end
end
end end
describe 'GET raw' do describe 'GET raw' do
......
...@@ -28,18 +28,40 @@ feature 'Browse artifact', :js do ...@@ -28,18 +28,40 @@ feature 'Browse artifact', :js do
before do before do
allow(Gitlab.config.pages).to receive(:enabled).and_return(true) allow(Gitlab.config.pages).to receive(:enabled).and_return(true)
allow(Gitlab.config.pages).to receive(:artifacts_server).and_return(true) allow(Gitlab.config.pages).to receive(:artifacts_server).and_return(true)
end
context 'when the project is public' do
it "shows external link icon and styles" do
visit browse_url
link = first('.tree-item-file-external-link')
visit browse_url expect(page).to have_link('doc_sample.txt', href: file_project_job_artifacts_path(project, job, path: txt_entry.blob.path))
expect(link[:target]).to eq('_blank')
expect(link[:rel]).to include('noopener')
expect(link[:rel]).to include('noreferrer')
expect(page).to have_selector('.js-artifact-tree-external-icon')
end
end end
it "shows external link icon and styles" do context 'when the project is private' do
link = first('.tree-item-file-external-link') let!(:private_project) { create(:project, :private) }
let(:pipeline) { create(:ci_empty_pipeline, project: private_project) }
let(:job) { create(:ci_build, :artifacts, pipeline: pipeline) }
let(:user) { create(:user) }
before do
private_project.add_developer(user)
sign_in(user)
end
it 'shows internal link styles' do
visit browse_project_job_artifacts_path(private_project, job, 'other_artifacts_0.1.2')
expect(page).to have_link('doc_sample.txt', href: file_project_job_artifacts_path(project, job, path: txt_entry.blob.path)) expect(page).to have_link('doc_sample.txt')
expect(link[:target]).to eq('_blank') expect(page).not_to have_selector('.js-artifact-tree-external-icon')
expect(link[:rel]).to include('noopener') end
expect(link[:rel]).to include('noreferrer')
expect(page).to have_selector('.js-artifact-tree-external-icon')
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment