307118b235
- Adds error message retry option for widget bubbles - Adds a fallback for widget images with file type bubble
214 lines
5.9 KiB
JavaScript
214 lines
5.9 KiB
JavaScript
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: [
|
|
{
|
|
id: 1,
|
|
text: 'hey',
|
|
content_attributes: {},
|
|
},
|
|
{
|
|
id: 2,
|
|
text: 'welcome',
|
|
content_attributes: { deleted: true },
|
|
},
|
|
],
|
|
});
|
|
await actions.fetchOldConversations({ commit }, {});
|
|
expect(commit.mock.calls).toEqual([
|
|
['setConversationListLoading', true],
|
|
[
|
|
'setMessagesInConversation',
|
|
[
|
|
{
|
|
id: 1,
|
|
text: 'hey',
|
|
content_attributes: {},
|
|
},
|
|
],
|
|
],
|
|
['setConversationListLoading', false],
|
|
]);
|
|
});
|
|
});
|
|
});
|