Commit 3882dfb2 authored by Sean Carroll's avatar Sean Carroll Committed by Fatih Acet
parent ea5991bc
...@@ -34,7 +34,7 @@ export default { ...@@ -34,7 +34,7 @@ export default {
<ul v-if="assets.links.length" class="pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list"> <ul v-if="assets.links.length" class="pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list">
<li v-for="link in assets.links" :key="link.name" class="append-bottom-8"> <li v-for="link in assets.links" :key="link.name" class="append-bottom-8">
<gl-link v-gl-tooltip.bottom :title="__('Download asset')" :href="link.url"> <gl-link v-gl-tooltip.bottom :title="__('Download asset')" :href="link.directAssetUrl">
<icon name="package" class="align-middle append-right-4 align-text-bottom" /> <icon name="package" class="align-middle append-right-4 align-text-bottom" />
{{ link.name }} {{ link.name }}
<span v-if="link.external">{{ __('(external source)') }}</span> <span v-if="link.external">{{ __('(external source)') }}</span>
......
---
title: Expose assets filepath URL on UI
merge_request: 25635
author:
type: added
...@@ -198,6 +198,46 @@ describe Projects::ReleasesController do ...@@ -198,6 +198,46 @@ describe Projects::ReleasesController do
end end
end end
context 'GET #downloads' do
subject do
get :downloads, params: { namespace_id: project.namespace, project_id: project, tag: tag, filepath: filepath }
end
before do
sign_in(user)
end
let(:release) { create(:release, project: project, tag: tag ) }
let!(:link) { create(:release_link, release: release, name: 'linux-amd64 binaries', filepath: '/binaries/linux-amd64', url: 'https://downloads.example.com/bin/gitlab-linux-amd64') }
let(:tag) { 'v11.9.0-rc2' }
context 'valid filepath' do
let(:filepath) { CGI.escape('/binaries/linux-amd64') }
it 'redirects to the asset direct link' do
subject
expect(response).to redirect_to('https://downloads.example.com/bin/gitlab-linux-amd64')
end
it 'redirects with a status of 302' do
subject
expect(response).to have_gitlab_http_status(:redirect)
end
end
context 'invalid filepath' do
let(:filepath) { CGI.escape('/binaries/win32') }
it 'is not found' do
subject
expect(response).to have_gitlab_http_status(:not_found)
end
end
end
context 'GET #downloads' do context 'GET #downloads' do
subject do subject do
get :downloads, params: { get :downloads, params: {
......
...@@ -24,16 +24,31 @@ describe 'User views releases', :js do ...@@ -24,16 +24,31 @@ describe 'User views releases', :js do
context 'when there is a link as an asset' do context 'when there is a link as an asset' do
let!(:release_link) { create(:release_link, release: release, url: url ) } let!(:release_link) { create(:release_link, release: release, url: url ) }
let(:url) { "#{project.web_url}/-/jobs/1/artifacts/download" } let(:url) { "#{project.web_url}/-/jobs/1/artifacts/download" }
let(:direct_asset_link) { Gitlab::Routing.url_helpers.project_release_url(project, release) << release_link.filepath }
it 'sees the link' do it 'sees the link' do
visit project_releases_path(project) visit project_releases_path(project)
page.within('.js-assets-list') do page.within('.js-assets-list') do
expect(page).to have_link release_link.name, href: release_link.url expect(page).to have_link release_link.name, href: direct_asset_link
expect(page).not_to have_content('(external source)') expect(page).not_to have_content('(external source)')
end end
end end
context 'when there is a link redirect' do
let!(:release_link) { create(:release_link, release: release, name: 'linux-amd64 binaries', filepath: '/binaries/linux-amd64', url: url) }
let(:url) { "#{project.web_url}/-/jobs/1/artifacts/download" }
it 'sees the link' do
visit project_releases_path(project)
page.within('.js-assets-list') do
expect(page).to have_link release_link.name, href: direct_asset_link
expect(page).not_to have_content('(external source)')
end
end
end
context 'when url points to external resource' do context 'when url points to external resource' do
let(:url) { 'http://google.com/download' } let(:url) { 'http://google.com/download' }
......
...@@ -92,7 +92,7 @@ describe('Release block', () => { ...@@ -92,7 +92,7 @@ describe('Release block', () => {
expect(wrapper.findAll('.js-assets-list li').length).toEqual(release.assets.links.length); expect(wrapper.findAll('.js-assets-list li').length).toEqual(release.assets.links.length);
expect(wrapper.find('.js-assets-list li a').attributes().href).toEqual( expect(wrapper.find('.js-assets-list li a').attributes().href).toEqual(
first(release.assets.links).url, first(release.assets.links).directAssetUrl,
); );
expect(wrapper.find('.js-assets-list li a').text()).toContain( expect(wrapper.find('.js-assets-list li a').text()).toContain(
......
...@@ -96,6 +96,7 @@ export const release = { ...@@ -96,6 +96,7 @@ export const release = {
id: 1, id: 1,
name: 'my link', name: 'my link',
url: 'https://google.com', url: 'https://google.com',
direct_asset_url: 'https://redirected.google.com',
external: true, external: true,
}, },
{ {
...@@ -103,6 +104,7 @@ export const release = { ...@@ -103,6 +104,7 @@ export const release = {
name: 'my second link', name: 'my second link',
url: url:
'https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50', 'https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/artifacts/v11.6.0-rc4/download?job=rspec-mysql+41%2F50',
direct_asset_url: 'https://redirected.google.com',
external: false, external: false,
}, },
], ],
......
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