From 02a2ca6ae4ab6f2b64ff00f5750a68e9371a4fb7 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 7 Jun 2018 14:47:09 +0100 Subject: Fixes IDE button on merge requests not working with relative URL config Closes #46438 --- app/assets/javascripts/lib/utils/url_utility.js | 2 +- .../unreleased/ide-url-util-relative-url-fix.yml | 6 ++++++ spec/javascripts/lib/utils/url_utility_spec.js | 25 ++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/ide-url-util-relative-url-fix.yml create mode 100644 spec/javascripts/lib/utils/url_utility_spec.js diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js index dd17544b656..061fb72ffef 100644 --- a/app/assets/javascripts/lib/utils/url_utility.js +++ b/app/assets/javascripts/lib/utils/url_utility.js @@ -87,7 +87,7 @@ export function redirectTo(url) { export function webIDEUrl(route = undefined) { let returnUrl = `${gon.relative_url_root}/-/ide/`; if (route) { - returnUrl += `project${route}`; + returnUrl += `project${route.replace(new RegExp(`^${gon.relative_url_root}`), '')}`; } return returnUrl; } diff --git a/changelogs/unreleased/ide-url-util-relative-url-fix.yml b/changelogs/unreleased/ide-url-util-relative-url-fix.yml new file mode 100644 index 00000000000..9f0f4a0f7be --- /dev/null +++ b/changelogs/unreleased/ide-url-util-relative-url-fix.yml @@ -0,0 +1,6 @@ +--- +title: Fixes Web IDE button on merge requests when GitLab is installed with relative + URL +merge_request: +author: +type: fixed diff --git a/spec/javascripts/lib/utils/url_utility_spec.js b/spec/javascripts/lib/utils/url_utility_spec.js new file mode 100644 index 00000000000..8ed4950ee09 --- /dev/null +++ b/spec/javascripts/lib/utils/url_utility_spec.js @@ -0,0 +1,25 @@ +import { webIDEUrl } from '~/lib/utils/url_utility'; + +describe('URL utility', () => { + describe('webIDEUrl', () => { + describe('without relative_url_root', () => { + it('returns IDE path with route', () => { + expect(webIDEUrl('/gitlab-org/gitlab-ce/merge_requests/1')).toBe( + '/-/ide/project/gitlab-org/gitlab-ce/merge_requests/1', + ); + }); + }); + + describe('with relative_url_root', () => { + beforeEach(() => { + gon.relative_url_root = '/gitlab'; + }); + + it('returns IDE path with route', () => { + expect(webIDEUrl('/gitlab/gitlab-org/gitlab-ce/merge_requests/1')).toBe( + '/gitlab/-/ide/project/gitlab-org/gitlab-ce/merge_requests/1', + ); + }); + }); + }); +}); -- cgit v1.2.1 From 132db99a5b98daf7629f416ebb4ff817010cc0a9 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 7 Jun 2018 15:11:10 +0100 Subject: fixed karma --- app/assets/javascripts/lib/utils/url_utility.js | 4 ++-- spec/javascripts/lib/utils/url_utility_spec.js | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js index 061fb72ffef..72b72f4247d 100644 --- a/app/assets/javascripts/lib/utils/url_utility.js +++ b/app/assets/javascripts/lib/utils/url_utility.js @@ -85,9 +85,9 @@ export function redirectTo(url) { } export function webIDEUrl(route = undefined) { - let returnUrl = `${gon.relative_url_root}/-/ide/`; + let returnUrl = `${gon.relative_url_root || ''}/-/ide/`; if (route) { - returnUrl += `project${route.replace(new RegExp(`^${gon.relative_url_root}`), '')}`; + returnUrl += `project${route.replace(new RegExp(`^${gon.relative_url_root || ''}`), '')}`; } return returnUrl; } diff --git a/spec/javascripts/lib/utils/url_utility_spec.js b/spec/javascripts/lib/utils/url_utility_spec.js index 8ed4950ee09..c7f4092911c 100644 --- a/spec/javascripts/lib/utils/url_utility_spec.js +++ b/spec/javascripts/lib/utils/url_utility_spec.js @@ -2,6 +2,10 @@ import { webIDEUrl } from '~/lib/utils/url_utility'; describe('URL utility', () => { describe('webIDEUrl', () => { + afterEach(() => { + gon.relative_url_root = ''; + }); + describe('without relative_url_root', () => { it('returns IDE path with route', () => { expect(webIDEUrl('/gitlab-org/gitlab-ce/merge_requests/1')).toBe( -- cgit v1.2.1 From cb6a16a2c6b15bbd51c02e74a6086ae33e83d3c8 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 7 Jun 2018 15:53:14 +0100 Subject: fixed more specs --- .../vue_mr_widget/components/mr_widget_header_spec.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js index 9b9c9656979..3d36e46d863 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js @@ -12,6 +12,7 @@ describe('MRWidgetHeader', () => { afterEach(() => { vm.$destroy(); + gon.relative_url_root = ''; }); describe('computed', () => { @@ -145,7 +146,16 @@ describe('MRWidgetHeader', () => { const button = vm.$el.querySelector('.js-web-ide'); expect(button.textContent.trim()).toEqual('Web IDE'); - expect(button.getAttribute('href')).toEqual('undefined/-/ide/projectabc'); + expect(button.getAttribute('href')).toEqual('/-/ide/projectabc'); + }); + + it('renders web ide button with relative URL', () => { + gon.relative_url_root = '/gitlab'; + + const button = vm.$el.querySelector('.js-web-ide'); + + expect(button.textContent.trim()).toEqual('Web IDE'); + expect(button.getAttribute('href')).toEqual('/-/ide/projectabc'); }); it('renders download dropdown with links', () => { -- cgit v1.2.1