From bca86c858b361f3b5a19abcfc03972c95f4b2d2a Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Tue, 3 Oct 2017 00:33:13 -0500 Subject: [PATCH] Add test for external HTML artifact --- .../javascripts/lib/utils/url_utility.js | 2 +- .../projects/artifacts/_tree_file.html.haml | 2 +- .../pipelines/img/job_artifacts_browser.png | Bin 3944 -> 0 bytes .../projects/artifacts/browse_spec.rb | 28 +++++++++++++++--- 4 files changed, 26 insertions(+), 6 deletions(-) delete mode 100644 doc/user/project/pipelines/img/job_artifacts_browser.png diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js index 6512f7c8a94..78c7a094127 100644 --- a/app/assets/javascripts/lib/utils/url_utility.js +++ b/app/assets/javascripts/lib/utils/url_utility.js @@ -90,7 +90,7 @@ w.gl.utils.refreshCurrentPage = () => gl.utils.visitUrl(document.location.href); // eslint-disable-next-line import/prefer-default-export export function visitUrl(url, external = false) { if (external) { - // Simulate `target="blank" ref="noopener noreferrer"` + // Simulate `target="blank" rel="noopener noreferrer"` // See https://mathiasbynens.github.io/rel-noopener/ const otherWindow = window.open(); otherWindow.opener = null; diff --git a/app/views/projects/artifacts/_tree_file.html.haml b/app/views/projects/artifacts/_tree_file.html.haml index 78df1dab9d6..10e238b6ba1 100644 --- a/app/views/projects/artifacts/_tree_file.html.haml +++ b/app/views/projects/artifacts/_tree_file.html.haml @@ -12,6 +12,6 @@ title: ('Opens in a new window' if is_external_link) do %span.str-truncated>= blob.name - if is_external_link - = icon('external-link') + = icon('external-link', class: 'js-artifact-tree-external-icon') %td = number_to_human_size(blob.size, precision: 2) diff --git a/doc/user/project/pipelines/img/job_artifacts_browser.png b/doc/user/project/pipelines/img/job_artifacts_browser.png deleted file mode 100644 index d3d8de5ac600361022aa51437d6569a76c89f79d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3944 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 G@BIgSj`Yp| diff --git a/spec/features/projects/artifacts/browse_spec.rb b/spec/features/projects/artifacts/browse_spec.rb index 42b47cb3301..40af0247bce 100644 --- a/spec/features/projects/artifacts/browse_spec.rb +++ b/spec/features/projects/artifacts/browse_spec.rb @@ -1,19 +1,20 @@ require 'spec_helper' feature 'Browse artifact', :js do + include ArtifactHelper + let(:project) { create(:project, :public) } let(:pipeline) { create(:ci_empty_pipeline, project: project) } let(:job) { create(:ci_build, :artifacts, pipeline: pipeline) } + let(:browse_url) do + browse_path('other_artifacts_0.1.2') + end def browse_path(path) browse_project_job_artifacts_path(project, job, path) end context 'when visiting old URL' do - let(:browse_url) do - browse_path('other_artifacts_0.1.2') - end - before do visit browse_url.sub('/-/jobs', '/builds') end @@ -22,4 +23,23 @@ feature 'Browse artifact', :js do expect(page.current_path).to eq(browse_url) end end + + context 'when browsing a directory with an HTML file' do + let(:html_entry) { job.artifacts_metadata_entry("other_artifacts_0.1.2/index.html") } + + before do + allow(Gitlab.config.pages).to receive(:enabled).and_return(true) + allow(Gitlab.config.pages).to receive(:artifacts_server).and_return(true) + + visit browse_url + end + + it "shows external link icon and styles" do + link = first('.tree-item-file-external-link') + + expect(link).to have_content('index.html') + expect(link[:href]).to eq(html_artifact_url(project, job, html_entry.blob)) + expect(page).to have_selector('.js-artifact-tree-external-icon') + end + end end