summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinnie Hellmann <winnie@gitlab.com>2019-02-06 12:43:12 +0000
committerWinnie Hellmann <winnie@gitlab.com>2019-02-06 12:43:12 +0000
commit16b825d3f01eef6c3b92d11feba82e88c9491f0e (patch)
tree25fa11b2e836ac66694625b874be09ca1cb0099f
parent7c54409fe91b73f3e5ddfe7078d0421be2cab772 (diff)
downloadgitlab-ce-revert-880afe22.tar.gz
Revert "Merge branch '30299-discussion-from-individual-note' into 'master'"revert-880afe22
This reverts merge request !24480
-rw-r--r--app/assets/javascripts/notes/components/note_actions.vue20
-rw-r--r--app/assets/javascripts/notes/components/note_actions/reply_button.vue40
-rw-r--r--app/assets/javascripts/notes/components/noteable_discussion.vue1
-rw-r--r--app/assets/javascripts/notes/components/noteable_note.vue22
-rw-r--r--app/assets/javascripts/notes/components/notes_app.vue7
-rw-r--r--app/assets/javascripts/notes/stores/actions.js3
-rw-r--r--app/assets/javascripts/notes/stores/mutation_types.js1
-rw-r--r--app/assets/javascripts/notes/stores/mutations.js5
-rw-r--r--app/controllers/concerns/issuable_actions.rb3
-rw-r--r--app/models/concerns/noteable.rb15
-rw-r--r--app/models/discussion.rb6
-rw-r--r--app/models/individual_note_discussion.rb8
-rw-r--r--app/models/sent_notification.rb25
-rw-r--r--app/services/notes/build_service.rb2
-rw-r--r--app/services/notes/create_service.rb4
-rw-r--r--locale/gitlab.pot3
-rw-r--r--spec/features/merge_request/user_posts_notes_spec.rb32
-rw-r--r--spec/javascripts/notes/components/note_actions/reply_button_spec.js46
-rw-r--r--spec/javascripts/notes/components/note_actions_spec.js149
-rw-r--r--spec/javascripts/notes/stores/actions_spec.js14
-rw-r--r--spec/javascripts/notes/stores/mutation_spec.js23
-rw-r--r--spec/lib/gitlab/email/handler/create_note_handler_spec.rb26
-rw-r--r--spec/models/sent_notification_spec.rb34
-rw-r--r--spec/services/notes/build_service_spec.rb40
-rw-r--r--spec/services/notes/create_service_spec.rb37
25 files changed, 73 insertions, 493 deletions
diff --git a/app/assets/javascripts/notes/components/note_actions.vue b/app/assets/javascripts/notes/components/note_actions.vue
index 394f2a80a67..d99694b06e9 100644
--- a/app/assets/javascripts/notes/components/note_actions.vue
+++ b/app/assets/javascripts/notes/components/note_actions.vue
@@ -2,13 +2,11 @@
import { mapGetters } from 'vuex';
import Icon from '~/vue_shared/components/icon.vue';
import { GlLoadingIcon, GlTooltipDirective } from '@gitlab/ui';
-import ReplyButton from './note_actions/reply_button.vue';
export default {
name: 'NoteActions',
components: {
Icon,
- ReplyButton,
GlLoadingIcon,
},
directives: {
@@ -23,11 +21,6 @@ export default {
type: [String, Number],
required: true,
},
- discussionId: {
- type: String,
- required: false,
- default: '',
- },
noteUrl: {
type: String,
required: false,
@@ -43,10 +36,6 @@ export default {
required: false,
default: null,
},
- showReply: {
- type: Boolean,
- required: true,
- },
canEdit: {
type: Boolean,
required: true,
@@ -91,9 +80,6 @@ export default {
},
computed: {
...mapGetters(['getUserDataByProp']),
- showReplyButton() {
- return gon.features && gon.features.replyToIndividualNotes && this.showReply;
- },
shouldShowActionsDropdown() {
return this.currentUserId && (this.canEdit || this.canReportAsAbuse);
},
@@ -167,12 +153,6 @@ export default {
<icon css-classes="link-highlight award-control-icon-super-positive" name="emoji_smiley" />
</a>
</div>
- <reply-button
- v-if="showReplyButton"
- ref="replyButton"
- class="js-reply-button"
- :note-id="discussionId"
- />
<div v-if="canEdit" class="note-actions-item">
<button
v-gl-tooltip.bottom
diff --git a/app/assets/javascripts/notes/components/note_actions/reply_button.vue b/app/assets/javascripts/notes/components/note_actions/reply_button.vue
deleted file mode 100644
index b2f9d7f128a..00000000000
--- a/app/assets/javascripts/notes/components/note_actions/reply_button.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<script>
-import { mapActions } from 'vuex';
-import { GlTooltipDirective, GlButton } from '@gitlab/ui';
-import Icon from '~/vue_shared/components/icon.vue';
-
-export default {
- name: 'ReplyButton',
- components: {
- Icon,
- GlButton,
- },
- directives: {
- GlTooltip: GlTooltipDirective,
- },
- props: {
- noteId: {
- type: String,
- required: true,
- },
- },
- methods: {
- ...mapActions(['convertToDiscussion']),
- },
-};
-</script>
-
-<template>
- <div class="note-actions-item">
- <gl-button
- ref="button"
- v-gl-tooltip.bottom
- class="note-action-button"
- variant="transparent"
- :title="__('Reply to comment')"
- @click="convertToDiscussion(noteId)"
- >
- <icon name="comment" css-classes="link-highlight" />
- </gl-button>
- </div>
-</template>
diff --git a/app/assets/javascripts/notes/components/noteable_discussion.vue b/app/assets/javascripts/notes/components/noteable_discussion.vue
index b7e9f7c2028..e26cce1c47f 100644
--- a/app/assets/javascripts/notes/components/noteable_discussion.vue
+++ b/app/assets/javascripts/notes/components/noteable_discussion.vue
@@ -398,7 +398,6 @@ Please check your network connection and try again.`;
:line="line"
:commit="commit"
:help-page-path="helpPagePath"
- :show-reply-button="canReply"
@handleDeleteNote="deleteNoteHandler"
>
<note-edited-text
diff --git a/app/assets/javascripts/notes/components/noteable_note.vue b/app/assets/javascripts/notes/components/noteable_note.vue
index 56108a58010..3c48d81ed05 100644
--- a/app/assets/javascripts/notes/components/noteable_note.vue
+++ b/app/assets/javascripts/notes/components/noteable_note.vue
@@ -29,11 +29,6 @@ export default {
type: Object,
required: true,
},
- discussion: {
- type: Object,
- required: false,
- default: null,
- },
line: {
type: Object,
required: false,
@@ -59,7 +54,7 @@ export default {
};
},
computed: {
- ...mapGetters(['targetNoteHash', 'getNoteableData', 'getUserData', 'commentsDisabled']),
+ ...mapGetters(['targetNoteHash', 'getNoteableData', 'getUserData']),
author() {
return this.note.author;
},
@@ -85,19 +80,6 @@ export default {
isTarget() {
return this.targetNoteHash === this.noteAnchorId;
},
- discussionId() {
- if (this.discussion) {
- return this.discussion.id;
- }
- return '';
- },
- showReplyButton() {
- if (!this.discussion || !this.getNoteableData.current_user.can_create_note) {
- return false;
- }
-
- return this.discussion.individual_note && !this.commentsDisabled;
- },
actionText() {
if (!this.commit) {
return '';
@@ -249,7 +231,6 @@ export default {
:note-id="note.id"
:note-url="note.noteable_note_url"
:access-level="note.human_access"
- :show-reply="showReplyButton"
:can-edit="note.current_user.can_edit"
:can-award-emoji="note.current_user.can_award_emoji"
:can-delete="note.current_user.can_edit"
@@ -260,7 +241,6 @@ export default {
:is-resolved="note.resolved"
:is-resolving="isResolving"
:resolved-by="note.resolved_by"
- :discussion-id="discussionId"
@handleEdit="editHandler"
@handleDelete="deleteHandler"
@handleResolve="resolveHandler"
diff --git a/app/assets/javascripts/notes/components/notes_app.vue b/app/assets/javascripts/notes/components/notes_app.vue
index 6d72b72e628..5edceea043c 100644
--- a/app/assets/javascripts/notes/components/notes_app.vue
+++ b/app/assets/javascripts/notes/components/notes_app.vue
@@ -199,12 +199,7 @@ export default {
:key="discussion.id"
:note="discussion.notes[0]"
/>
- <noteable-note
- v-else
- :key="discussion.id"
- :note="discussion.notes[0]"
- :discussion="discussion"
- />
+ <noteable-note v-else :key="discussion.id" :note="discussion.notes[0]" />
</template>
<noteable-discussion
v-else
diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js
index ff65f14d529..2105a62cecb 100644
--- a/app/assets/javascripts/notes/stores/actions.js
+++ b/app/assets/javascripts/notes/stores/actions.js
@@ -426,8 +426,5 @@ export const submitSuggestion = (
});
};
-export const convertToDiscussion = ({ commit }, noteId) =>
- commit(types.CONVERT_TO_DISCUSSION, noteId);
-
// prevent babel-plugin-rewire from generating an invalid default during karma tests
export default () => {};
diff --git a/app/assets/javascripts/notes/stores/mutation_types.js b/app/assets/javascripts/notes/stores/mutation_types.js
index 2bffedad336..df943c155f4 100644
--- a/app/assets/javascripts/notes/stores/mutation_types.js
+++ b/app/assets/javascripts/notes/stores/mutation_types.js
@@ -17,7 +17,6 @@ export const SET_NOTES_FETCHED_STATE = 'SET_NOTES_FETCHED_STATE';
export const SET_NOTES_LOADING_STATE = 'SET_NOTES_LOADING_STATE';
export const DISABLE_COMMENTS = 'DISABLE_COMMENTS';
export const APPLY_SUGGESTION = 'APPLY_SUGGESTION';
-export const CONVERT_TO_DISCUSSION = 'CONVERT_TO_DISCUSSION';
// DISCUSSION
export const COLLAPSE_DISCUSSION = 'COLLAPSE_DISCUSSION';
diff --git a/app/assets/javascripts/notes/stores/mutations.js b/app/assets/javascripts/notes/stores/mutations.js
index d167f8ef421..33d39ad2ec9 100644
--- a/app/assets/javascripts/notes/stores/mutations.js
+++ b/app/assets/javascripts/notes/stores/mutations.js
@@ -264,9 +264,4 @@ export default {
).length;
state.hasUnresolvedDiscussions = state.unresolvedDiscussionsCount > 1;
},
-
- [types.CONVERT_TO_DISCUSSION](state, discussionId) {
- const discussion = utils.findNoteObjectById(state.discussions, discussionId);
- Object.assign(discussion, { individual_note: false });
- },
};
diff --git a/app/controllers/concerns/issuable_actions.rb b/app/controllers/concerns/issuable_actions.rb
index cd3fa641e89..8ef3b6502df 100644
--- a/app/controllers/concerns/issuable_actions.rb
+++ b/app/controllers/concerns/issuable_actions.rb
@@ -7,9 +7,6 @@ module IssuableActions
included do
before_action :authorize_destroy_issuable!, only: :destroy
before_action :authorize_admin_issuable!, only: :bulk_update
- before_action only: :show do
- push_frontend_feature_flag(:reply_to_individual_notes)
- end
end
def permitted_keys
diff --git a/app/models/concerns/noteable.rb b/app/models/concerns/noteable.rb
index 3c74034b527..29476654bf7 100644
--- a/app/models/concerns/noteable.rb
+++ b/app/models/concerns/noteable.rb
@@ -1,18 +1,9 @@
# frozen_string_literal: true
module Noteable
- extend ActiveSupport::Concern
-
- # `Noteable` class names that support resolvable notes.
+ # Names of all implementers of `Noteable` that support resolvable notes.
RESOLVABLE_TYPES = %w(MergeRequest).freeze
- class_methods do
- # `Noteable` class names that support replying to individual notes.
- def replyable_types
- %w(Issue MergeRequest)
- end
- end
-
def base_class_name
self.class.base_class.name
end
@@ -35,10 +26,6 @@ module Noteable
DiscussionNote.noteable_types.include?(base_class_name)
end
- def supports_replying_to_individual_notes?
- supports_discussions? && self.class.replyable_types.include?(base_class_name)
- end
-
def supports_suggestion?
false
end
diff --git a/app/models/discussion.rb b/app/models/discussion.rb
index f2678e0597d..dbc7b6e67be 100644
--- a/app/models/discussion.rb
+++ b/app/models/discussion.rb
@@ -17,8 +17,6 @@ class Discussion
:for_commit?,
:for_merge_request?,
- :save,
-
to: :first_note
def project_id
@@ -118,10 +116,6 @@ class Discussion
false
end
- def can_convert_to_discussion?
- false
- end
-
def new_discussion?
notes.length == 1
end
diff --git a/app/models/individual_note_discussion.rb b/app/models/individual_note_discussion.rb
index aab0ff93468..07ee7470ea2 100644
--- a/app/models/individual_note_discussion.rb
+++ b/app/models/individual_note_discussion.rb
@@ -13,14 +13,6 @@ class IndividualNoteDiscussion < Discussion
true
end
- def can_convert_to_discussion?
- noteable.supports_replying_to_individual_notes? && Feature.enabled?(:reply_to_individual_notes)
- end
-
- def convert_to_discussion!
- first_note.becomes!(Discussion.note_class).to_discussion
- end
-
def reply_attributes
super.tap { |attrs| attrs.delete(:discussion_id) }
end
diff --git a/app/models/sent_notification.rb b/app/models/sent_notification.rb
index 6caab24143b..e65b3df0fb6 100644
--- a/app/models/sent_notification.rb
+++ b/app/models/sent_notification.rb
@@ -48,7 +48,7 @@ class SentNotification < ActiveRecord::Base
end
def record_note(note, recipient_id, reply_key = self.reply_key, attrs = {})
- attrs[:in_reply_to_discussion_id] = note.discussion_id if note.part_of_discussion?
+ attrs[:in_reply_to_discussion_id] = note.discussion_id
record(note.noteable, recipient_id, reply_key, attrs)
end
@@ -99,12 +99,29 @@ class SentNotification < ActiveRecord::Base
private
def reply_params
- {
+ attrs = {
noteable_type: self.noteable_type,
noteable_id: self.noteable_id,
- commit_id: self.commit_id,
- in_reply_to_discussion_id: self.in_reply_to_discussion_id
+ commit_id: self.commit_id
}
+
+ if self.in_reply_to_discussion_id.present?
+ attrs[:in_reply_to_discussion_id] = self.in_reply_to_discussion_id
+ else
+ # Remove in GitLab 10.0, when we will not support replying to SentNotifications
+ # that don't have `in_reply_to_discussion_id` anymore.
+ attrs.merge!(
+ type: self.note_type,
+
+ # LegacyDiffNote
+ line_code: self.line_code,
+
+ # DiffNote
+ position: self.position.to_json
+ )
+ end
+
+ attrs
end
def note_valid
diff --git a/app/services/notes/build_service.rb b/app/services/notes/build_service.rb
index 541f3e0d23c..bae98ede561 100644
--- a/app/services/notes/build_service.rb
+++ b/app/services/notes/build_service.rb
@@ -15,8 +15,6 @@ module Notes
return note
end
- discussion = discussion.convert_to_discussion! if discussion.can_convert_to_discussion?
-
params.merge!(discussion.reply_attributes)
should_resolve = discussion.resolved?
end
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index b975c3a8cb6..c4546f30235 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -34,10 +34,6 @@ module Notes
end
if !only_commands && note.save
- if note.part_of_discussion? && note.discussion.can_convert_to_discussion?
- note.discussion.convert_to_discussion!.save(touch: false)
- end
-
todo_service.new_note(note, current_user)
clear_noteable_diffs_cache(note)
Suggestions::CreateService.new(note).execute
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 9ec590f90d8..d2822f22201 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -6022,9 +6022,6 @@ msgstr ""
msgid "Reopen milestone"
msgstr ""
-msgid "Reply to comment"
-msgstr ""
-
msgid "Reply to this email directly or %{view_it_on_gitlab}."
msgstr ""
diff --git a/spec/features/merge_request/user_posts_notes_spec.rb b/spec/features/merge_request/user_posts_notes_spec.rb
index 1bbcf455ac7..ee5f5377ca6 100644
--- a/spec/features/merge_request/user_posts_notes_spec.rb
+++ b/spec/features/merge_request/user_posts_notes_spec.rb
@@ -66,38 +66,6 @@ describe 'Merge request > User posts notes', :js do
is_expected.to have_css('.js-note-text', visible: true)
end
end
-
- describe 'when reply_to_individual_notes feature flag is not set' do
- before do
- stub_feature_flags(reply_to_individual_notes: false)
- visit project_merge_request_path(project, merge_request)
- end
-
- it 'does not show a reply button' do
- expect(page).to have_no_selector('.js-reply-button')
- end
- end
-
- describe 'when reply_to_individual_notes feature flag is set' do
- before do
- stub_feature_flags(reply_to_individual_notes: true)
- visit project_merge_request_path(project, merge_request)
- end
-
- it 'shows a reply button' do
- reply_button = find('.js-reply-button', match: :first)
-
- expect(reply_button).to have_selector('.ic-comment')
- end
-
- it 'shows reply placeholder when clicking reply button' do
- reply_button = find('.js-reply-button', match: :first)
-
- reply_button.click
-
- expect(page).to have_selector('.discussion-reply-holder')
- end
- end
end
describe 'when previewing a note' do
diff --git a/spec/javascripts/notes/components/note_actions/reply_button_spec.js b/spec/javascripts/notes/components/note_actions/reply_button_spec.js
deleted file mode 100644
index 11e1664a3f4..00000000000
--- a/spec/javascripts/notes/components/note_actions/reply_button_spec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import Vuex from 'vuex';
-import { createLocalVue, mount } from '@vue/test-utils';
-import ReplyButton from '~/notes/components/note_actions/reply_button.vue';
-
-describe('ReplyButton', () => {
- const noteId = 'dummy-note-id';
-
- let wrapper;
- let convertToDiscussion;
-
- beforeEach(() => {
- const localVue = createLocalVue();
- convertToDiscussion = jasmine.createSpy('convertToDiscussion');
-
- localVue.use(Vuex);
- const store = new Vuex.Store({
- actions: {
- convertToDiscussion,
- },
- });
-
- wrapper = mount(ReplyButton, {
- propsData: {
- noteId,
- },
- store,
- sync: false,
- localVue,
- });
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('dispatches convertToDiscussion with note ID on click', () => {
- const button = wrapper.find({ ref: 'button' });
-
- button.trigger('click');
-
- expect(convertToDiscussion).toHaveBeenCalledTimes(1);
- const [, payload] = convertToDiscussion.calls.argsFor(0);
-
- expect(payload).toBe(noteId);
- });
-});
diff --git a/spec/javascripts/notes/components/note_actions_spec.js b/spec/javascripts/notes/components/note_actions_spec.js
index 0c1962912b4..b102b7aecf7 100644
--- a/spec/javascripts/notes/components/note_actions_spec.js
+++ b/spec/javascripts/notes/components/note_actions_spec.js
@@ -2,38 +2,14 @@ import Vue from 'vue';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import createStore from '~/notes/stores';
import noteActions from '~/notes/components/note_actions.vue';
-import { TEST_HOST } from 'spec/test_constants';
import { userDataMock } from '../mock_data';
describe('noteActions', () => {
let wrapper;
let store;
- let props;
-
- const createWrapper = propsData => {
- const localVue = createLocalVue();
- return shallowMount(noteActions, {
- store,
- propsData,
- localVue,
- sync: false,
- });
- };
beforeEach(() => {
store = createStore();
- props = {
- accessLevel: 'Maintainer',
- authorId: 26,
- canDelete: true,
- canEdit: true,
- canAwardEmoji: true,
- canReportAsAbuse: true,
- noteId: '539',
- noteUrl: `${TEST_HOST}/group/project/merge_requests/1#note_1`,
- reportAbusePath: `${TEST_HOST}/abuse_reports/new?ref_url=http%3A%2F%2Flocalhost%3A3000%2Fgitlab-org%2Fgitlab-ce%2Fissues%2F7%23note_539&user_id=26`,
- showReply: false,
- };
});
afterEach(() => {
@@ -41,10 +17,31 @@ describe('noteActions', () => {
});
describe('user is logged in', () => {
+ let props;
+
beforeEach(() => {
+ props = {
+ accessLevel: 'Maintainer',
+ authorId: 26,
+ canDelete: true,
+ canEdit: true,
+ canAwardEmoji: true,
+ canReportAsAbuse: true,
+ noteId: '539',
+ noteUrl: 'https://localhost:3000/group/project/merge_requests/1#note_1',
+ reportAbusePath:
+ '/abuse_reports/new?ref_url=http%3A%2F%2Flocalhost%3A3000%2Fgitlab-org%2Fgitlab-ce%2Fissues%2F7%23note_539&user_id=26',
+ };
+
store.dispatch('setUserData', userDataMock);
- wrapper = createWrapper(props);
+ const localVue = createLocalVue();
+ wrapper = shallowMount(noteActions, {
+ store,
+ propsData: props,
+ localVue,
+ sync: false,
+ });
});
it('should render access level badge', () => {
@@ -94,14 +91,28 @@ describe('noteActions', () => {
});
describe('user is not logged in', () => {
+ let props;
+
beforeEach(() => {
store.dispatch('setUserData', {});
- wrapper = createWrapper({
- ...props,
+ props = {
+ accessLevel: 'Maintainer',
+ authorId: 26,
canDelete: false,
canEdit: false,
canAwardEmoji: false,
canReportAsAbuse: false,
+ noteId: '539',
+ noteUrl: 'https://localhost:3000/group/project/merge_requests/1#note_1',
+ reportAbusePath:
+ '/abuse_reports/new?ref_url=http%3A%2F%2Flocalhost%3A3000%2Fgitlab-org%2Fgitlab-ce%2Fissues%2F7%23note_539&user_id=26',
+ };
+ const localVue = createLocalVue();
+ wrapper = shallowMount(noteActions, {
+ store,
+ propsData: props,
+ localVue,
+ sync: false,
});
});
@@ -113,88 +124,4 @@ describe('noteActions', () => {
expect(wrapper.find('.more-actions').exists()).toBe(false);
});
});
-
- describe('with feature flag replyToIndividualNotes enabled', () => {
- beforeEach(() => {
- gon.features = {
- replyToIndividualNotes: true,
- };
- });
-
- afterEach(() => {
- gon.features = {};
- });
-
- describe('for showReply = true', () => {
- beforeEach(() => {
- wrapper = createWrapper({
- ...props,
- showReply: true,
- });
- });
-
- it('shows a reply button', () => {
- const replyButton = wrapper.find({ ref: 'replyButton' });
-
- expect(replyButton.exists()).toBe(true);
- });
- });
-
- describe('for showReply = false', () => {
- beforeEach(() => {
- wrapper = createWrapper({
- ...props,
- showReply: false,
- });
- });
-
- it('does not show a reply button', () => {
- const replyButton = wrapper.find({ ref: 'replyButton' });
-
- expect(replyButton.exists()).toBe(false);
- });
- });
- });
-
- describe('with feature flag replyToIndividualNotes disabled', () => {
- beforeEach(() => {
- gon.features = {
- replyToIndividualNotes: false,
- };
- });
-
- afterEach(() => {
- gon.features = {};
- });
-
- describe('for showReply = true', () => {
- beforeEach(() => {
- wrapper = createWrapper({
- ...props,
- showReply: true,
- });
- });
-
- it('does not show a reply button', () => {
- const replyButton = wrapper.find({ ref: 'replyButton' });
-
- expect(replyButton.exists()).toBe(false);
- });
- });
-
- describe('for showReply = false', () => {
- beforeEach(() => {
- wrapper = createWrapper({
- ...props,
- showReply: false,
- });
- });
-
- it('does not show a reply button', () => {
- const replyButton = wrapper.find({ ref: 'replyButton' });
-
- expect(replyButton.exists()).toBe(false);
- });
- });
- });
});
diff --git a/spec/javascripts/notes/stores/actions_spec.js b/spec/javascripts/notes/stores/actions_spec.js
index 73f960dd21e..2e3cd5e8f36 100644
--- a/spec/javascripts/notes/stores/actions_spec.js
+++ b/spec/javascripts/notes/stores/actions_spec.js
@@ -585,18 +585,4 @@ describe('Actions Notes Store', () => {
);
});
});
-
- describe('convertToDiscussion', () => {
- it('commits CONVERT_TO_DISCUSSION with noteId', done => {
- const noteId = 'dummy-note-id';
- testAction(
- actions.convertToDiscussion,
- noteId,
- {},
- [{ type: 'CONVERT_TO_DISCUSSION', payload: noteId }],
- [],
- done,
- );
- });
- });
});
diff --git a/spec/javascripts/notes/stores/mutation_spec.js b/spec/javascripts/notes/stores/mutation_spec.js
index 4f8d3069bb5..b6b2c7d60a5 100644
--- a/spec/javascripts/notes/stores/mutation_spec.js
+++ b/spec/javascripts/notes/stores/mutation_spec.js
@@ -517,27 +517,4 @@ describe('Notes Store mutations', () => {
);
});
});
-
- describe('CONVERT_TO_DISCUSSION', () => {
- let discussion;
- let state;
-
- beforeEach(() => {
- discussion = {
- id: 42,
- individual_note: true,
- };
- state = { discussions: [discussion] };
- });
-
- it('toggles individual_note', () => {
- mutations.CONVERT_TO_DISCUSSION(state, discussion.id);
-
- expect(discussion.individual_note).toBe(false);
- });
-
- it('throws if discussion was not found', () => {
- expect(() => mutations.CONVERT_TO_DISCUSSION(state, 99)).toThrow();
- });
- });
});
diff --git a/spec/lib/gitlab/email/handler/create_note_handler_spec.rb b/spec/lib/gitlab/email/handler/create_note_handler_spec.rb
index 50e473c459e..e5420ea6bea 100644
--- a/spec/lib/gitlab/email/handler/create_note_handler_spec.rb
+++ b/spec/lib/gitlab/email/handler/create_note_handler_spec.rb
@@ -155,7 +155,11 @@ describe Gitlab::Email::Handler::CreateNoteHandler do
it_behaves_like "checks permissions on noteable"
end
- shared_examples 'a reply to existing comment' do
+ context "when everything is fine" do
+ before do
+ setup_attachment
+ end
+
it "creates a comment" do
expect { receiver.execute }.to change { noteable.notes.count }.by(1)
new_note = noteable.notes.last
@@ -164,21 +168,7 @@ describe Gitlab::Email::Handler::CreateNoteHandler do
expect(new_note.position).to eq(note.position)
expect(new_note.note).to include("I could not disagree more.")
expect(new_note.in_reply_to?(note)).to be_truthy
-
- if note.part_of_discussion?
- expect(new_note.discussion_id).to eq(note.discussion_id)
- else
- expect(new_note.discussion_id).not_to eq(note.discussion_id)
- end
end
- end
-
- context "when everything is fine" do
- before do
- setup_attachment
- end
-
- it_behaves_like 'a reply to existing comment'
it "adds all attachments" do
receiver.execute
@@ -217,10 +207,4 @@ describe Gitlab::Email::Handler::CreateNoteHandler do
end
end
end
-
- context "when note is not a discussion" do
- let(:note) { create(:note_on_merge_request, project: project) }
-
- it_behaves_like 'a reply to existing comment'
- end
end
diff --git a/spec/models/sent_notification_spec.rb b/spec/models/sent_notification_spec.rb
index 6c35ed8f649..677613b7980 100644
--- a/spec/models/sent_notification_spec.rb
+++ b/spec/models/sent_notification_spec.rb
@@ -36,41 +36,19 @@ describe SentNotification do
end
end
- shared_examples 'a successful sent notification' do
- it 'creates a new SentNotification' do
- expect { subject }.to change { described_class.count }.by(1)
- end
- end
-
describe '.record' do
let(:issue) { create(:issue) }
- subject { described_class.record(issue, user.id) }
-
- it_behaves_like 'a successful sent notification'
+ it 'creates a new SentNotification' do
+ expect { described_class.record(issue, user.id) }.to change { described_class.count }.by(1)
+ end
end
describe '.record_note' do
- subject { described_class.record_note(note, note.author.id) }
-
- context 'for a discussion note' do
- let(:note) { create(:diff_note_on_merge_request) }
+ let(:note) { create(:diff_note_on_merge_request) }
- it_behaves_like 'a successful sent notification'
-
- it 'sets in_reply_to_discussion_id' do
- expect(subject.in_reply_to_discussion_id).to eq(note.discussion_id)
- end
- end
-
- context 'for an individual note' do
- let(:note) { create(:note_on_merge_request) }
-
- it_behaves_like 'a successful sent notification'
-
- it 'does not set in_reply_to_discussion_id' do
- expect(subject.in_reply_to_discussion_id).to be_nil
- end
+ it 'creates a new SentNotification' do
+ expect { described_class.record_note(note, note.author.id) }.to change { described_class.count }.by(1)
end
end
diff --git a/spec/services/notes/build_service_spec.rb b/spec/services/notes/build_service_spec.rb
index af4daff336b..9aaccb4bffe 100644
--- a/spec/services/notes/build_service_spec.rb
+++ b/spec/services/notes/build_service_spec.rb
@@ -123,46 +123,6 @@ describe Notes::BuildService do
end
end
- context 'when replying to individual note' do
- let(:note) { create(:note_on_issue) }
-
- subject { described_class.new(project, author, note: 'Test', in_reply_to_discussion_id: note.discussion_id).execute }
-
- shared_examples 'an individual note reply' do
- it 'builds another individual note' do
- expect(subject).to be_valid
- expect(subject).to be_a(Note)
- expect(subject.discussion_id).not_to eq(note.discussion_id)
- end
- end
-
- context 'when reply_to_individual_notes is disabled' do
- before do
- stub_feature_flags(reply_to_individual_notes: false)
- end
-
- it_behaves_like 'an individual note reply'
- end
-
- context 'when reply_to_individual_notes is enabled' do
- before do
- stub_feature_flags(reply_to_individual_notes: true)
- end
-
- it 'sets the note up to be in reply to that note' do
- expect(subject).to be_valid
- expect(subject).to be_a(DiscussionNote)
- expect(subject.discussion_id).to eq(note.discussion_id)
- end
-
- context 'when noteable does not support replies' do
- let(:note) { create(:note_on_commit) }
-
- it_behaves_like 'an individual note reply'
- end
- end
- end
-
it 'builds a note without saving it' do
new_note = described_class.new(project,
author,
diff --git a/spec/services/notes/create_service_spec.rb b/spec/services/notes/create_service_spec.rb
index 48f1d696ff6..1b9ba42cfd6 100644
--- a/spec/services/notes/create_service_spec.rb
+++ b/spec/services/notes/create_service_spec.rb
@@ -278,42 +278,5 @@ describe Notes::CreateService do
expect(note.note).to eq(':smile:')
end
end
-
- context 'reply to individual note' do
- let(:existing_note) { create(:note_on_issue, noteable: issue, project: project) }
- let(:reply_opts) { opts.merge(in_reply_to_discussion_id: existing_note.discussion_id) }
-
- subject { described_class.new(project, user, reply_opts).execute }
-
- context 'when reply_to_individual_notes is disabled' do
- before do
- stub_feature_flags(reply_to_individual_notes: false)
- end
-
- it 'creates an individual note' do
- expect(subject.type).to eq(nil)
- expect(subject.discussion_id).not_to eq(existing_note.discussion_id)
- end
-
- it 'does not convert existing note' do
- expect { subject }.not_to change { existing_note.reload.type }
- end
- end
-
- context 'when reply_to_individual_notes is enabled' do
- before do
- stub_feature_flags(reply_to_individual_notes: true)
- end
-
- it 'creates a DiscussionNote in reply to existing note' do
- expect(subject).to be_a(DiscussionNote)
- expect(subject.discussion_id).to eq(existing_note.discussion_id)
- end
-
- it 'converts existing note to DiscussionNote' do
- expect { subject }.to change { existing_note.reload.type }.from(nil).to('DiscussionNote')
- end
- end
- end
end
end