From 56c62208f6be6392ad428d0be40befc918de8c67 Mon Sep 17 00:00:00 2001 From: Martin Hobert Date: Mon, 28 Jan 2019 22:44:17 +0000 Subject: [PATCH] refactor(NoteableDiscussion): Extracted ResolveDiscussionButton from --- .../components/discussion_resolve_button.vue | 28 +++++++ .../notes/components/noteable_discussion.vue | 18 ++--- ...6366-extract-resolve-discussion-button.yml | 5 ++ .../discussion_resolve_button_spec.js | 74 +++++++++++++++++++ 4 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 app/assets/javascripts/notes/components/discussion_resolve_button.vue create mode 100644 changelogs/unreleased/refactor-56366-extract-resolve-discussion-button.yml create mode 100644 spec/javascripts/notes/components/discussion_resolve_button_spec.js diff --git a/app/assets/javascripts/notes/components/discussion_resolve_button.vue b/app/assets/javascripts/notes/components/discussion_resolve_button.vue new file mode 100644 index 00000000000..2b29d710236 --- /dev/null +++ b/app/assets/javascripts/notes/components/discussion_resolve_button.vue @@ -0,0 +1,28 @@ + + + diff --git a/app/assets/javascripts/notes/components/noteable_discussion.vue b/app/assets/javascripts/notes/components/noteable_discussion.vue index 8add7278f9b..695efe3602f 100644 --- a/app/assets/javascripts/notes/components/noteable_discussion.vue +++ b/app/assets/javascripts/notes/components/noteable_discussion.vue @@ -12,6 +12,7 @@ import { SYSTEM_NOTE } from '../constants'; import userAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue'; import noteableNote from './noteable_note.vue'; import noteHeader from './note_header.vue'; +import resolveDiscussionButton from './discussion_resolve_button.vue'; import toggleRepliesWidget from './toggle_replies_widget.vue'; import noteSignedOutWidget from './note_signed_out_widget.vue'; import noteEditedText from './note_edited_text.vue'; @@ -35,6 +36,7 @@ export default { noteSignedOutWidget, noteEditedText, noteForm, + resolveDiscussionButton, jumpToNextDiscussionButton, toggleRepliesWidget, placeholderNote, @@ -453,16 +455,12 @@ Please check your network connection and try again.`; > Reply... -
- -
+
{ + let wrapper; + let localVue; + + const factory = options => { + localVue = createLocalVue(); + wrapper = shallowMount(resolveDiscussionButton, { + localVue, + ...options, + }); + }; + + beforeEach(() => { + factory({ + propsData: { + isResolving: false, + buttonTitle, + }, + }); + }); + + afterEach(() => { + wrapper.destroy(); + }); + + it('should emit a onClick event on button click', () => { + const button = wrapper.find({ ref: 'button' }); + + button.trigger('click'); + + expect(wrapper.emitted()).toEqual({ + onClick: [[]], + }); + }); + + it('should contain the provided button title', () => { + const button = wrapper.find({ ref: 'button' }); + + expect(button.text()).toContain(buttonTitle); + }); + + it('should show a loading spinner while resolving', () => { + factory({ + propsData: { + isResolving: true, + buttonTitle, + }, + }); + + const button = wrapper.find({ ref: 'isResolvingIcon' }); + + expect(button.exists()).toEqual(true); + }); + + it('should only show a loading spinner while resolving', () => { + factory({ + propsData: { + isResolving: false, + buttonTitle, + }, + }); + + const button = wrapper.find({ ref: 'isResolvingIcon' }); + + localVue.nextTick(() => { + expect(button.exists()).toEqual(false); + }); + }); +});