Commit d13ca399 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab-ce master

parents f935b688 95ce5e8a
/* eslint-disable no-underscore-dangle, class-methods-use-this, consistent-return, no-shadow, no-param-reassign */
/* global ListIssue */
import { __ } from '~/locale';
import ListLabel from './label';
import ListAssignee from './assignee';
import ListIssue from './issue';
import { urlParamsToObject } from '~/lib/utils/common_utils';
import boardsStore from '../stores/boards_store';
import ListMilestone from './milestone';
......
......@@ -35,6 +35,13 @@ export default {
required: true,
},
},
computed: {
userCanResolveDiscussion() {
return this.discussion.notes.every(
note => note.current_user && note.current_user.can_resolve,
);
},
},
};
</script>
......@@ -46,7 +53,7 @@ export default {
@onClick="$emit('showReplyForm')"
/>
<div class="btn-group discussion-actions" role="group">
<div v-if="userCanResolveDiscussion" class="btn-group discussion-actions" role="group">
<div class="btn-group">
<resolve-discussion-button
v-if="discussion.resolvable"
......
---
title: Hide resolve thread button from guest
merge_request: 32859
author:
type: changed
......@@ -88,16 +88,20 @@ major differences:
Therefore, we will set up the HA components one-by-one, and include deviations
from the normal HA setup.
### Step 1: Configure the Redis and NFS services on the **secondary** node
### Step 1: Configure the Redis and Gitaly services on the **secondary** node
Configure the following services, again using the non-Geo high availability
documentation:
- [Configuring Redis for GitLab HA](../../high_availability/redis.md) for high
availability.
- [NFS](../../high_availability/nfs.md) which will store data that is
- [Gitaly](../../high_availability/gitaly.md), which will store data that is
synchronized from the **primary** node.
NOTE: **Note:**
[NFS](../../high_availability/nfs.md) can be used in place of Gitaly but is not
recommended.
### Step 2: Configure the main read-only replica PostgreSQL database on the **secondary** node
NOTE: **Note:** The following documentation assumes the database will be run on
......
......@@ -65,6 +65,15 @@ describe('DiscussionActions', () => {
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', () => {
......
......@@ -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 });
......
......@@ -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,
......
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