diff options
Diffstat (limited to 'spec/frontend/set_status_modal/set_status_modal_wrapper_spec.js')
-rw-r--r-- | spec/frontend/set_status_modal/set_status_modal_wrapper_spec.js | 58 |
1 files changed, 49 insertions, 9 deletions
diff --git a/spec/frontend/set_status_modal/set_status_modal_wrapper_spec.js b/spec/frontend/set_status_modal/set_status_modal_wrapper_spec.js index 21b9721438d..403f9509f84 100644 --- a/spec/frontend/set_status_modal/set_status_modal_wrapper_spec.js +++ b/spec/frontend/set_status_modal/set_status_modal_wrapper_spec.js @@ -44,6 +44,7 @@ describe('SetStatusModalWrapper', () => { const findNoEmojiPlaceholder = () => wrapper.find('.js-no-emoji-placeholder'); const findToggleEmojiButton = () => wrapper.find('.js-toggle-emoji-menu'); const findAvailabilityCheckbox = () => wrapper.find(GlFormCheckbox); + const findClearStatusAtMessage = () => wrapper.find('[data-testid="clear-status-at-message"]'); const initModal = ({ mockOnUpdateSuccess = true, mockOnUpdateFailure = true } = {}) => { const modal = findModal(); @@ -57,18 +58,18 @@ describe('SetStatusModalWrapper', () => { return wrapper.vm.$nextTick(); }; - beforeEach(async () => { - mockEmoji = await initEmojiMock(); - wrapper = createComponent(); - return initModal(); - }); - afterEach(() => { wrapper.destroy(); mockEmoji.restore(); }); describe('with minimum props', () => { + beforeEach(async () => { + mockEmoji = await initEmojiMock(); + wrapper = createComponent(); + return initModal(); + }); + it('sets the hidden status emoji field', () => { const field = findFormField('emoji'); expect(field.exists()).toBe(true); @@ -96,6 +97,14 @@ describe('SetStatusModalWrapper', () => { findToggleEmojiButton().trigger('click'); expect(wrapper.vm.showEmojiMenu).toHaveBeenCalled(); }); + + it('displays the clear status at dropdown', () => { + expect(wrapper.find('[data-testid="clear-status-at-dropdown"]').exists()).toBe(true); + }); + + it('does not display the clear status at message', () => { + expect(findClearStatusAtMessage().exists()).toBe(false); + }); }); describe('with no currentMessage set', () => { @@ -146,9 +155,28 @@ describe('SetStatusModalWrapper', () => { }); }); + describe('with currentClearStatusAfter set', () => { + beforeEach(async () => { + mockEmoji = await initEmojiMock(); + wrapper = createComponent({ currentClearStatusAfter: '2021-01-01 00:00:00 UTC' }); + return initModal(); + }); + + it('displays the clear status at message', () => { + const clearStatusAtMessage = findClearStatusAtMessage(); + + expect(clearStatusAtMessage.exists()).toBe(true); + expect(clearStatusAtMessage.text()).toBe('Your status resets on 2021-01-01 00:00:00 UTC.'); + }); + }); + describe('update status', () => { describe('succeeds', () => { - beforeEach(() => { + beforeEach(async () => { + mockEmoji = await initEmojiMock(); + wrapper = createComponent(); + await initModal(); + jest.spyOn(UserApi, 'updateUserStatus').mockResolvedValue(); }); @@ -167,18 +195,26 @@ describe('SetStatusModalWrapper', () => { // set the availability status findAvailabilityCheckbox().vm.$emit('input', true); + // set the currentClearStatusAfter to 30 minutes + wrapper.find('[data-testid="thirtyMinutes"]').vm.$emit('click'); + findModal().vm.$emit('ok'); await wrapper.vm.$nextTick(); - const commonParams = { emoji: defaultEmoji, message: defaultMessage }; + const commonParams = { + emoji: defaultEmoji, + message: defaultMessage, + }; expect(UserApi.updateUserStatus).toHaveBeenCalledTimes(2); expect(UserApi.updateUserStatus).toHaveBeenNthCalledWith(1, { availability: AVAILABILITY_STATUS.NOT_SET, + clearStatusAfter: null, ...commonParams, }); expect(UserApi.updateUserStatus).toHaveBeenNthCalledWith(2, { availability: AVAILABILITY_STATUS.BUSY, + clearStatusAfter: '30_minutes', ...commonParams, }); }); @@ -208,7 +244,11 @@ describe('SetStatusModalWrapper', () => { }); describe('with errors', () => { - beforeEach(() => { + beforeEach(async () => { + mockEmoji = await initEmojiMock(); + wrapper = createComponent(); + await initModal(); + jest.spyOn(UserApi, 'updateUserStatus').mockRejectedValue(); }); |