Merge branch '_acet-disable-ide-button' into 'master'
Disable Web IDE button if user is not allowed to push the source branch. Closes #45026 See merge request gitlab-org/gitlab-ce!21288
This commit is contained in:
commit
a6ca7efb4c
|
@ -4,6 +4,7 @@ import { n__, s__, sprintf } from '~/locale';
|
||||||
import { mergeUrlParams, webIDEUrl } from '~/lib/utils/url_utility';
|
import { mergeUrlParams, webIDEUrl } from '~/lib/utils/url_utility';
|
||||||
import Icon from '~/vue_shared/components/icon.vue';
|
import Icon from '~/vue_shared/components/icon.vue';
|
||||||
import clipboardButton from '~/vue_shared/components/clipboard_button.vue';
|
import clipboardButton from '~/vue_shared/components/clipboard_button.vue';
|
||||||
|
import tooltip from '~/vue_shared/directives/tooltip';
|
||||||
import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate.vue';
|
import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -13,6 +14,9 @@ export default {
|
||||||
clipboardButton,
|
clipboardButton,
|
||||||
TooltipOnTruncate,
|
TooltipOnTruncate,
|
||||||
},
|
},
|
||||||
|
directives: {
|
||||||
|
tooltip,
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
mr: {
|
mr: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
@ -40,10 +44,19 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
webIdePath() {
|
webIdePath() {
|
||||||
|
if (this.mr.canPushToSourceBranch) {
|
||||||
return mergeUrlParams({
|
return mergeUrlParams({
|
||||||
target_project: this.mr.sourceProjectFullPath !== this.mr.targetProjectFullPath ?
|
target_project: this.mr.sourceProjectFullPath !== this.mr.targetProjectFullPath ?
|
||||||
this.mr.targetProjectFullPath : '',
|
this.mr.targetProjectFullPath : '',
|
||||||
}, webIDEUrl(`/${this.mr.sourceProjectFullPath}/merge_requests/${this.mr.iid}`));
|
}, webIDEUrl(`/${this.mr.sourceProjectFullPath}/merge_requests/${this.mr.iid}`));
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
ideButtonTitle() {
|
||||||
|
return !this.mr.canPushToSourceBranch
|
||||||
|
? s__('mrWidget|You are not allowed to edit this project directly. Please fork to make changes.')
|
||||||
|
: '';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -92,14 +105,23 @@ export default {
|
||||||
<div
|
<div
|
||||||
v-if="mr.isOpen"
|
v-if="mr.isOpen"
|
||||||
class="branch-actions"
|
class="branch-actions"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
v-tooltip
|
||||||
|
:title="ideButtonTitle"
|
||||||
|
data-placement="bottom"
|
||||||
|
tabindex="0"
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
v-if="!mr.sourceBranchRemoved"
|
v-if="!mr.sourceBranchRemoved"
|
||||||
:href="webIdePath"
|
:href="webIdePath"
|
||||||
|
:class="{ disabled: !mr.canPushToSourceBranch }"
|
||||||
class="btn btn-default inline js-web-ide d-none d-md-inline-block"
|
class="btn btn-default inline js-web-ide d-none d-md-inline-block"
|
||||||
|
role="button"
|
||||||
>
|
>
|
||||||
{{ s__("mrWidget|Open in Web IDE") }}
|
{{ s__("mrWidget|Open in Web IDE") }}
|
||||||
</a>
|
</a>
|
||||||
|
</span>
|
||||||
<button
|
<button
|
||||||
:disabled="mr.sourceBranchRemoved"
|
:disabled="mr.sourceBranchRemoved"
|
||||||
data-target="#modal_merge_info"
|
data-target="#modal_merge_info"
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Disable Web IDE button if user is not allowed to push the source branch.
|
||||||
|
merge_request: 21288
|
||||||
|
author:
|
||||||
|
type: added
|
|
@ -6835,6 +6835,9 @@ msgstr ""
|
||||||
msgid "mrWidget|This project is archived, write access has been disabled"
|
msgid "mrWidget|This project is archived, write access has been disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "mrWidget|You are not allowed to edit this project directly. Please fork to make changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "mrWidget|You can merge this merge request manually using the"
|
msgid "mrWidget|You can merge this merge request manually using the"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -114,13 +114,7 @@ describe('MRWidgetHeader', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('with an open merge request', () => {
|
describe('with an open merge request', () => {
|
||||||
afterEach(() => {
|
const mrDefaultOptions = {
|
||||||
vm.$destroy();
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
vm = mountComponent(Component, {
|
|
||||||
mr: {
|
|
||||||
iid: 1,
|
iid: 1,
|
||||||
divergedCommitsCount: 12,
|
divergedCommitsCount: 12,
|
||||||
sourceBranch: 'mr-widget-refactor',
|
sourceBranch: 'mr-widget-refactor',
|
||||||
|
@ -130,12 +124,21 @@ describe('MRWidgetHeader', () => {
|
||||||
targetBranchTreePath: 'foo/bar/tree/path',
|
targetBranchTreePath: 'foo/bar/tree/path',
|
||||||
targetBranch: 'master',
|
targetBranch: 'master',
|
||||||
isOpen: true,
|
isOpen: true,
|
||||||
|
canPushToSourceBranch: true,
|
||||||
emailPatchesPath: '/mr/email-patches',
|
emailPatchesPath: '/mr/email-patches',
|
||||||
plainDiffPath: '/mr/plainDiffPath',
|
plainDiffPath: '/mr/plainDiffPath',
|
||||||
statusPath: 'abc',
|
statusPath: 'abc',
|
||||||
sourceProjectFullPath: 'root/gitlab-ce',
|
sourceProjectFullPath: 'root/gitlab-ce',
|
||||||
targetProjectFullPath: 'gitlab-org/gitlab-ce',
|
targetProjectFullPath: 'gitlab-org/gitlab-ce',
|
||||||
},
|
};
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
vm.$destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
vm = mountComponent(Component, {
|
||||||
|
mr: Object.assign({}, mrDefaultOptions),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -151,11 +154,21 @@ describe('MRWidgetHeader', () => {
|
||||||
const button = vm.$el.querySelector('.js-web-ide');
|
const button = vm.$el.querySelector('.js-web-ide');
|
||||||
|
|
||||||
expect(button.textContent.trim()).toEqual('Open in Web IDE');
|
expect(button.textContent.trim()).toEqual('Open in Web IDE');
|
||||||
|
expect(button.classList.contains('disabled')).toBe(false);
|
||||||
expect(button.getAttribute('href')).toEqual(
|
expect(button.getAttribute('href')).toEqual(
|
||||||
'/-/ide/project/root/gitlab-ce/merge_requests/1?target_project=gitlab-org%2Fgitlab-ce',
|
'/-/ide/project/root/gitlab-ce/merge_requests/1?target_project=gitlab-org%2Fgitlab-ce',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('renders web ide button in disabled state with no href', () => {
|
||||||
|
const mr = Object.assign({}, mrDefaultOptions, { canPushToSourceBranch: false });
|
||||||
|
vm = mountComponent(Component, { mr });
|
||||||
|
|
||||||
|
const link = vm.$el.querySelector('.js-web-ide');
|
||||||
|
expect(link.classList.contains('disabled')).toBe(true);
|
||||||
|
expect(link.getAttribute('href')).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
it('renders web ide button with blank query string if target & source project branch', done => {
|
it('renders web ide button with blank query string if target & source project branch', done => {
|
||||||
vm.mr.targetProjectFullPath = 'root/gitlab-ce';
|
vm.mr.targetProjectFullPath = 'root/gitlab-ce';
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue