import { actions } from '../../conversation/actions'; import getUuid from '../../../../helpers/uuid'; import { API } from 'widget/helpers/axios'; jest.mock('../../../../helpers/uuid'); jest.mock('widget/helpers/axios'); const commit = jest.fn(); const dispatch = jest.fn(); describe('#actions', () => { describe('#createConversation', () => { it('sends correct mutations', async () => { API.post.mockResolvedValue({ data: { contact: { name: 'contact-name' }, messages: [{ id: 1, content: 'This is a test message' }], }, }); let windowSpy = jest.spyOn(window, 'window', 'get'); windowSpy.mockImplementation(() => ({ WOOT_WIDGET: { $root: { $i18n: { locale: 'el', }, }, }, location: { search: '?param=1', }, })); await actions.createConversation( { commit }, { contact: {}, message: 'This is a test message' } ); expect(commit.mock.calls).toEqual([ ['setConversationUIFlag', { isCreating: true }], [ 'pushMessageToConversation', { id: 1, content: 'This is a test message' }, ], ['setConversationUIFlag', { isCreating: false }], ]); windowSpy.mockRestore(); }); }); describe('#addOrUpdateMessage', () => { it('sends correct actions for non-deleted message', () => { actions.addOrUpdateMessage( { commit }, { id: 1, content: 'Hey', content_attributes: {}, } ); expect(commit).toBeCalledWith('pushMessageToConversation', { id: 1, content: 'Hey', content_attributes: {}, }); }); it('sends correct actions for non-deleted message', () => { actions.addOrUpdateMessage( { commit }, { id: 1, content: 'Hey', content_attributes: { deleted: true }, } ); expect(commit).toBeCalledWith('deleteMessage', 1); }); it('plays audio when agent sends a message', () => { actions.addOrUpdateMessage({ commit }, { id: 1, message_type: 1 }); expect(commit).toBeCalledWith('pushMessageToConversation', { id: 1, message_type: 1, }); }); }); describe('#toggleAgentTyping', () => { it('sends correct mutations', () => { actions.toggleAgentTyping({ commit }, { status: true }); expect(commit).toBeCalledWith('toggleAgentTypingStatus', { status: true, }); }); }); describe('#sendMessage', () => { it('sends correct mutations', async () => { const mockDate = new Date(1466424490000); getUuid.mockImplementationOnce(() => '1111'); const spy = jest.spyOn(global, 'Date').mockImplementation(() => mockDate); const windowSpy = jest.spyOn(window, 'window', 'get'); windowSpy.mockImplementation(() => ({ WOOT_WIDGET: { $root: { $i18n: { locale: 'ar', }, }, }, location: { search: '?param=1', }, })); await actions.sendMessage({ commit, dispatch }, { content: 'hello' }); spy.mockRestore(); windowSpy.mockRestore(); expect(dispatch).toBeCalledWith('sendMessageWithData', { attachments: undefined, content: 'hello', created_at: 1466424490, id: '1111', message_type: 0, status: 'in_progress', }); }); }); describe('#sendAttachment', () => { it('sends correct mutations', () => { const mockDate = new Date(1466424490000); getUuid.mockImplementationOnce(() => '1111'); const spy = jest.spyOn(global, 'Date').mockImplementation(() => mockDate); const thumbUrl = ''; const attachment = { thumbUrl, fileType: 'file' }; actions.sendAttachment({ commit, dispatch }, { attachment }); spy.mockRestore(); expect(commit).toBeCalledWith('pushMessageToConversation', { id: '1111', content: undefined, status: 'in_progress', created_at: 1466424490, message_type: 0, attachments: [ { thumb_url: '', data_url: '', file_type: 'file', status: 'in_progress', }, ], }); }); }); describe('#setUserLastSeen', () => { it('sends correct mutations', async () => { API.post.mockResolvedValue({ data: { success: true } }); await actions.setUserLastSeen({ commit, getters: { getConversationSize: 2 }, }); expect(commit.mock.calls[0][0]).toEqual('setMetaUserLastSeenAt'); }); it('sends correct mutations', async () => { API.post.mockResolvedValue({ data: { success: true } }); await actions.setUserLastSeen({ commit, getters: { getConversationSize: 0 }, }); expect(commit.mock.calls).toEqual([]); }); }); describe('#clearConversations', () => { it('sends correct mutations', () => { actions.clearConversations({ commit }); expect(commit).toBeCalledWith('clearConversations'); }); }); describe('#fetchOldConversations', () => { it('sends correct actions', async () => { API.get.mockResolvedValue({ data: { payload: [ { id: 1, text: 'hey', content_attributes: {}, }, { id: 2, text: 'welcome', content_attributes: { deleted: true }, }, ], meta: { contact_last_seen_at: 1466424490, }, }, }); await actions.fetchOldConversations({ commit }, {}); expect(commit.mock.calls).toEqual([ ['setConversationListLoading', true], ['conversation/setMetaUserLastSeenAt', 1466424490, { root: true }], [ 'setMessagesInConversation', [ { id: 1, text: 'hey', content_attributes: {}, }, ], ], ['setConversationListLoading', false], ]); }); }); });