From 589c8d5625f64edf4dfaf9ddf1f9f4b2fe7efb32 Mon Sep 17 00:00:00 2001 From: Samantha Ming Date: Thu, 12 Sep 2019 07:41:19 +0000 Subject: Hide resolve thread button from guest - Show if user can_resolve all of the notes --- app/assets/javascripts/notes/components/discussion_actions.vue | 9 ++++++++- .../unreleased/62122-hide-resolve-thread-button-from-guest.yml | 5 +++++ spec/frontend/notes/components/discussion_actions_spec.js | 9 +++++++++ spec/javascripts/notes/components/noteable_discussion_spec.js | 4 ++++ spec/javascripts/notes/mock_data.js | 3 +++ 5 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/62122-hide-resolve-thread-button-from-guest.yml diff --git a/app/assets/javascripts/notes/components/discussion_actions.vue b/app/assets/javascripts/notes/components/discussion_actions.vue index edab750b572..e3be91a4966 100644 --- a/app/assets/javascripts/notes/components/discussion_actions.vue +++ b/app/assets/javascripts/notes/components/discussion_actions.vue @@ -35,6 +35,13 @@ export default { required: true, }, }, + computed: { + userCanResolveDiscussion() { + return this.discussion.notes.every( + note => note.current_user && note.current_user.can_resolve, + ); + }, + }, }; @@ -46,7 +53,7 @@ export default { @onClick="$emit('showReplyForm')" /> -
+
{ expect(wrapper.find(JumpToNextDiscussionButton).exists()).toBe(false); }); + + it('does not renders discussion button for non-member', () => { + const discussion = JSON.parse(JSON.stringify(discussionMock)); + discussion.notes[1].current_user.can_resolve = false; + createComponent({ discussion }); + + expect(wrapper.find(ResolveDiscussionButton).exists()).toBe(false); + expect(wrapper.find(ResolveWithIssueButton).exists()).toBe(false); + }); }); describe('events handling', () => { diff --git a/spec/javascripts/notes/components/noteable_discussion_spec.js b/spec/javascripts/notes/components/noteable_discussion_spec.js index 74805ca8c00..ea5c57b8a7c 100644 --- a/spec/javascripts/notes/components/noteable_discussion_spec.js +++ b/spec/javascripts/notes/components/noteable_discussion_spec.js @@ -255,6 +255,10 @@ describe('noteable_discussion component', () => { discussion.notes = discussion.notes.map(note => ({ ...note, resolved: false, + current_user: { + ...note.current_user, + can_resolve: true, + }, })); wrapper.setProps({ discussion }); diff --git a/spec/javascripts/notes/mock_data.js b/spec/javascripts/notes/mock_data.js index 3812d46f838..f0e58cbda4d 100644 --- a/spec/javascripts/notes/mock_data.js +++ b/spec/javascripts/notes/mock_data.js @@ -200,6 +200,7 @@ export const discussionMock = { current_user: { can_edit: true, can_award_emoji: true, + can_resolve: true, }, discussion_id: '9e3bd2f71a01de45fd166e6719eb380ad9f270b1', emoji_awardable: true, @@ -246,6 +247,7 @@ export const discussionMock = { current_user: { can_edit: true, can_award_emoji: true, + can_resolve: true, }, discussion_id: '9e3bd2f71a01de45fd166e6719eb380ad9f270b1', emoji_awardable: true, @@ -292,6 +294,7 @@ export const discussionMock = { current_user: { can_edit: true, can_award_emoji: true, + can_resolve: true, }, discussion_id: '9e3bd2f71a01de45fd166e6719eb380ad9f270b1', emoji_awardable: true, -- cgit v1.2.1