summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2017-05-12 11:58:48 +0100
committerPhil Hughes <me@iamphill.com>2017-05-15 11:33:31 +0100
commit3bd37bc4a0d6b8ab6ebaabc2ee1c130201b20a21 (patch)
tree6a52c734aea370000d887cb763a39eeae6e0db48
parent86700b97d3a357b572e6eb92759a64d594aa06c5 (diff)
downloadgitlab-ce-3bd37bc4a0d6b8ab6ebaabc2ee1c130201b20a21.tar.gz
Shows delete button if permissions are correct
[ci skip]
-rw-r--r--app/assets/javascripts/issue_show/components/app.vue7
-rw-r--r--app/assets/javascripts/issue_show/components/edit_actions.vue7
-rw-r--r--app/assets/javascripts/issue_show/index.js3
-rw-r--r--app/views/projects/issues/show.html.haml1
-rw-r--r--spec/javascripts/issue_show/components/app_spec.js28
-rw-r--r--spec/javascripts/issue_show/components/edit_actions_spec.js18
6 files changed, 61 insertions, 3 deletions
diff --git a/app/assets/javascripts/issue_show/components/app.vue b/app/assets/javascripts/issue_show/components/app.vue
index 27ea962c144..9b6f6d866dd 100644
--- a/app/assets/javascripts/issue_show/components/app.vue
+++ b/app/assets/javascripts/issue_show/components/app.vue
@@ -19,6 +19,10 @@ export default {
required: true,
type: Boolean,
},
+ canDestroy: {
+ required: true,
+ type: Boolean,
+ },
issuableRef: {
type: String,
required: true,
@@ -134,6 +138,7 @@ export default {
:updated-at="state.updatedAt"
:task-status="state.taskStatus" />
<edit-actions
- v-if="canUpdate && showForm" />
+ v-if="canUpdate && showForm"
+ :can-destroy="canDestroy" />
</div>
</template>
diff --git a/app/assets/javascripts/issue_show/components/edit_actions.vue b/app/assets/javascripts/issue_show/components/edit_actions.vue
index bb200c3a53c..4cefb236d32 100644
--- a/app/assets/javascripts/issue_show/components/edit_actions.vue
+++ b/app/assets/javascripts/issue_show/components/edit_actions.vue
@@ -2,6 +2,12 @@
import eventHub from '../event_hub';
export default {
+ props: {
+ canDestroy: {
+ type: Boolean,
+ required: true,
+ },
+ },
data() {
return {
deleteLoading: false,
@@ -50,6 +56,7 @@
Cancel
</button>
<button
+ v-if="canDestroy"
class="btn btn-danger pull-right append-right-default"
:class="{ disabled: deleteLoading }"
type="button"
diff --git a/app/assets/javascripts/issue_show/index.js b/app/assets/javascripts/issue_show/index.js
index 5d45f1b7bf8..246ccf66323 100644
--- a/app/assets/javascripts/issue_show/index.js
+++ b/app/assets/javascripts/issue_show/index.js
@@ -22,12 +22,14 @@ document.addEventListener('DOMContentLoaded', () => {
const issuableDescriptionTextarea = issuableElement.querySelector('.js-task-list-field');
const {
canUpdate,
+ canDestroy,
endpoint,
issuableRef,
} = issuableElement.dataset;
return {
canUpdate: gl.utils.convertPermissionToBoolean(canUpdate),
+ canDestroy: gl.utils.convertPermissionToBoolean(canDestroy),
endpoint,
issuableRef,
initialTitle: issuableTitleElement.innerHTML,
@@ -56,6 +58,7 @@ document.addEventListener('DOMContentLoaded', () => {
return createElement('issuable-app', {
props: {
canUpdate: this.canUpdate,
+ canDestroy: this.canDestroy,
endpoint: this.endpoint,
issuableRef: this.issuableRef,
initialTitle: this.initialTitle,
diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml
index d33e2a7491d..d0783009a58 100644
--- a/app/views/projects/issues/show.html.haml
+++ b/app/views/projects/issues/show.html.haml
@@ -53,6 +53,7 @@
.detail-page-description.content-block
#js-issuable-app{ "data" => { "endpoint" => namespace_project_issue_path(@project.namespace, @project, @issue),
"can-update" => can?(current_user, :update_issue, @issue).to_s,
+ "can-destroy" => can?(current_user, :destroy_issue, @issue).to_s,
"issuable-ref" => @issue.to_reference,
} }
%h2.title= markdown_field(@issue, :title)
diff --git a/spec/javascripts/issue_show/components/app_spec.js b/spec/javascripts/issue_show/components/app_spec.js
index 9c066a5908b..0af4d1e1f6a 100644
--- a/spec/javascripts/issue_show/components/app_spec.js
+++ b/spec/javascripts/issue_show/components/app_spec.js
@@ -28,12 +28,13 @@ describe('Issuable output', () => {
vm = new IssuableDescriptionComponent({
propsData: {
canUpdate: true,
+ canDestroy: true,
endpoint: '/gitlab-org/gitlab-shell/issues/9/rendered_title',
issuableRef: '#1',
initialTitle: '',
initialDescriptionHtml: '',
initialDescriptionText: '',
- showForm: true,
+ showForm: false,
},
}).$mount();
});
@@ -62,6 +63,31 @@ describe('Issuable output', () => {
});
});
+ it('shows actions if permissions are correct', (done) => {
+ vm.showForm = true;
+
+ Vue.nextTick(() => {
+ expect(
+ vm.$el.querySelector('.btn'),
+ ).not.toBeNull();
+
+ done();
+ });
+ });
+
+ it('does not show actions if permissions are incorrect', (done) => {
+ vm.showForm = true;
+ vm.canUpdate = false;
+
+ Vue.nextTick(() => {
+ expect(
+ vm.$el.querySelector('.btn'),
+ ).toBeNull();
+
+ done();
+ });
+ });
+
describe('updateIssuable', () => {
it('correctly updates issuable data', (done) => {
spyOn(vm.service, 'updateIssuable').and.callFake(() => new Promise((resolve) => {
diff --git a/spec/javascripts/issue_show/components/edit_actions_spec.js b/spec/javascripts/issue_show/components/edit_actions_spec.js
index a0fccccc961..8fbaf6cfb2b 100644
--- a/spec/javascripts/issue_show/components/edit_actions_spec.js
+++ b/spec/javascripts/issue_show/components/edit_actions_spec.js
@@ -10,7 +10,11 @@ describe('Edit Actions components', () => {
spyOn(eventHub, '$emit');
- vm = new Component().$mount();
+ vm = new Component({
+ propsData: {
+ canDestroy: true,
+ },
+ }).$mount();
Vue.nextTick(done);
});
@@ -25,6 +29,18 @@ describe('Edit Actions components', () => {
).toBe(0);
});
+ it('does not render delete button if canUpdate is false', (done) => {
+ vm.canDestroy = false;
+
+ Vue.nextTick(() => {
+ expect(
+ vm.$el.querySelector('.btn-danger'),
+ ).toBeNull();
+
+ done();
+ });
+ });
+
describe('updateIssuable', () => {
it('sends update.issauble event when clicking save button', () => {
vm.$el.querySelector('.btn-save').click();