import types from '../../../mutation-types'; import { mutations } from '../../conversations'; describe('#mutations', () => { describe('#EMPTY_ALL_CONVERSATION', () => { it('empty conversations', () => { const state = { allConversations: [{ id: 1 }], selectedChatId: 1 }; mutations[types.EMPTY_ALL_CONVERSATION](state); expect(state.allConversations).toEqual([]); expect(state.selectedChatId).toEqual(null); }); }); describe('#MARK_MESSAGE_READ', () => { it('mark conversation as read', () => { const state = { allConversations: [{ id: 1 }] }; const lastSeen = new Date().getTime() / 1000; mutations[types.MARK_MESSAGE_READ](state, { id: 1, lastSeen }); expect(state.allConversations).toEqual([ { id: 1, agent_last_seen_at: lastSeen }, ]); }); it('doesnot send any mutation if chat doesnot exist', () => { const state = { allConversations: [] }; const lastSeen = new Date().getTime() / 1000; mutations[types.MARK_MESSAGE_READ](state, { id: 1, lastSeen }); expect(state.allConversations).toEqual([]); }); }); describe('#CLEAR_CURRENT_CHAT_WINDOW', () => { it('clears current chat window', () => { const state = { selectedChatId: 1 }; mutations[types.CLEAR_CURRENT_CHAT_WINDOW](state); expect(state.selectedChatId).toEqual(null); }); }); describe('#ASSIGN_TEAM', () => { it('clears current chat window', () => { const state = { allConversations: [{ id: 1, meta: {} }] }; mutations[types.ASSIGN_TEAM](state, { team: { id: 1, name: 'Team 1' }, conversationId: 1, }); expect(state.allConversations).toEqual([ { id: 1, meta: { team: { id: 1, name: 'Team 1' } } }, ]); }); }); describe('#SET_CURRENT_CHAT_WINDOW', () => { it('set current chat window', () => { const state = { selectedChatId: 1 }; mutations[types.SET_CURRENT_CHAT_WINDOW](state, { id: 2 }); expect(state.selectedChatId).toEqual(2); }); it('does not set current chat window', () => { const state = { selectedChatId: 1 }; mutations[types.SET_CURRENT_CHAT_WINDOW](state); expect(state.selectedChatId).toEqual(1); }); }); describe('#SET_CONVERSATION_CAN_REPLY', () => { it('set canReply flag', () => { const state = { allConversations: [{ id: 1, can_reply: false }] }; mutations[types.SET_CONVERSATION_CAN_REPLY](state, { conversationId: 1, canReply: true, }); expect(state.allConversations[0].can_reply).toEqual(true); }); }); describe('#ADD_MESSAGE', () => { it('does not add message to the store if conversation does not exist', () => { const state = { allConversations: [] }; mutations[types.ADD_MESSAGE](state, { conversationId: 1 }); expect(state.allConversations).toEqual([]); }); it('add message to the conversation if it does not exist in the store', () => { global.bus = { $emit: jest.fn() }; const state = { allConversations: [{ id: 1, messages: [] }], selectedChatId: -1, }; mutations[types.ADD_MESSAGE](state, { conversation_id: 1, content: 'Test message', created_at: 1602256198, }); expect(state.allConversations).toEqual([ { id: 1, messages: [ { conversation_id: 1, content: 'Test message', created_at: 1602256198, }, ], timestamp: 1602256198, }, ]); expect(global.bus.$emit).not.toHaveBeenCalled(); }); it('add message to the conversation and emit scrollToMessage if it does not exist in the store', () => { global.bus = { $emit: jest.fn() }; const state = { allConversations: [{ id: 1, messages: [] }], selectedChatId: 1, }; mutations[types.ADD_MESSAGE](state, { conversation_id: 1, content: 'Test message', created_at: 1602256198, }); expect(state.allConversations).toEqual([ { id: 1, messages: [ { conversation_id: 1, content: 'Test message', created_at: 1602256198, }, ], timestamp: 1602256198, }, ]); expect(global.bus.$emit).toHaveBeenCalledWith('SCROLL_TO_MESSAGE'); }); it('update message if it exist in the store', () => { global.bus = { $emit: jest.fn() }; const state = { allConversations: [ { id: 1, messages: [ { conversation_id: 1, content: 'Test message', created_at: 1602256198, }, ], }, ], selectedChatId: 1, }; mutations[types.ADD_MESSAGE](state, { conversation_id: 1, content: 'Test message 1', created_at: 1602256198, }); expect(state.allConversations).toEqual([ { id: 1, messages: [ { conversation_id: 1, content: 'Test message 1', created_at: 1602256198, }, ], }, ]); expect(global.bus.$emit).not.toHaveBeenCalled(); }); }); describe('#CHANGE_CONVERSATION_STATUS', () => { it('updates the conversation status correctly', () => { const state = { allConversations: [ { id: 1, messages: [], status: 'open', }, ], }; mutations[types.CHANGE_CONVERSATION_STATUS](state, { conversationId: '1', status: 'resolved', }); expect(state.allConversations).toEqual([ { id: 1, messages: [], status: 'resolved', }, ]); }); describe('#UPDATE_CONVERSATION_CUSTOM_ATTRIBUTES', () => { it('update conversation custom attributes', () => { const custom_attributes = { order_id: 1001 }; const state = { allConversations: [{ id: 1 }], selectedChatId: 1 }; mutations[types.UPDATE_CONVERSATION_CUSTOM_ATTRIBUTES](state, { conversationId: 1, custom_attributes, }); expect( state.allConversations[0].custom_attributes.custom_attributes ).toEqual(custom_attributes); }); }); }); describe('#SET_CONVERSATION_FILTERS', () => { it('set conversation filter', () => { const appliedFilters = [ { attribute_key: 'status', filter_operator: 'equal_to', values: [{ id: 'snoozed', name: 'Snoozed' }], query_operator: 'and', }, ]; mutations[types.SET_CONVERSATION_FILTERS](appliedFilters); expect(appliedFilters).toEqual([ { attribute_key: 'status', filter_operator: 'equal_to', values: [{ id: 'snoozed', name: 'Snoozed' }], query_operator: 'and', }, ]); }); }); describe('#CLEAR_CONVERSATION_FILTERS', () => { it('clears applied conversation filters', () => { const state = { appliedFilters: [ { attribute_key: 'status', filter_operator: 'equal_to', values: [{ id: 'snoozed', name: 'Snoozed' }], query_operator: 'and', }, ], }; mutations[types.CLEAR_CONVERSATION_FILTERS](state); expect(state.appliedFilters).toEqual([]); }); }); });