Co-authored-by: Pranav <pranav@chatwoot.com> Co-authored-by: Pranav <pranavrajs@gmail.com>
172 lines
4.8 KiB
JavaScript
172 lines
4.8 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { INBOX_TYPES } from 'dashboard/helper/inbox';
|
|
import * as helpers from '../composeConversationHelper';
|
|
|
|
describe('composeConversationHelper', () => {
|
|
describe('convertChannelTypeToLabel', () => {
|
|
it('converts channel type with namespace to capitalized label', () => {
|
|
expect(helpers.convertChannelTypeToLabel('Channel::Email')).toBe('Email');
|
|
expect(helpers.convertChannelTypeToLabel('Channel::Whatsapp')).toBe(
|
|
'Whatsapp'
|
|
);
|
|
});
|
|
|
|
it('returns original value if no namespace found', () => {
|
|
expect(helpers.convertChannelTypeToLabel('email')).toBe('email');
|
|
});
|
|
});
|
|
|
|
describe('generateLabelForContactableInboxesList', () => {
|
|
const contact = {
|
|
name: 'John Doe',
|
|
email: 'john@example.com',
|
|
phoneNumber: '+1234567890',
|
|
};
|
|
|
|
it('generates label for email inbox', () => {
|
|
expect(
|
|
helpers.generateLabelForContactableInboxesList({
|
|
...contact,
|
|
channelType: INBOX_TYPES.EMAIL,
|
|
})
|
|
).toBe('John Doe (john@example.com)');
|
|
});
|
|
|
|
it('generates label for twilio inbox', () => {
|
|
expect(
|
|
helpers.generateLabelForContactableInboxesList({
|
|
...contact,
|
|
channelType: INBOX_TYPES.TWILIO,
|
|
})
|
|
).toBe('John Doe (+1234567890)');
|
|
});
|
|
|
|
it('generates label for whatsapp inbox', () => {
|
|
expect(
|
|
helpers.generateLabelForContactableInboxesList({
|
|
...contact,
|
|
channelType: INBOX_TYPES.WHATSAPP,
|
|
})
|
|
).toBe('John Doe (+1234567890)');
|
|
});
|
|
|
|
it('generates label for other inbox types', () => {
|
|
expect(
|
|
helpers.generateLabelForContactableInboxesList({
|
|
...contact,
|
|
channelType: 'Channel::Api',
|
|
})
|
|
).toBe('John Doe (Api)');
|
|
});
|
|
});
|
|
|
|
describe('buildContactableInboxesList', () => {
|
|
it('returns empty array if no contact inboxes', () => {
|
|
expect(helpers.buildContactableInboxesList(null)).toEqual([]);
|
|
expect(helpers.buildContactableInboxesList(undefined)).toEqual([]);
|
|
});
|
|
|
|
it('builds list of contactable inboxes with correct format', () => {
|
|
const inboxes = [
|
|
{
|
|
id: 1,
|
|
name: 'Email Inbox',
|
|
email: 'support@example.com',
|
|
channelType: INBOX_TYPES.EMAIL,
|
|
phoneNumber: null,
|
|
},
|
|
];
|
|
|
|
const result = helpers.buildContactableInboxesList(inboxes);
|
|
expect(result[0]).toMatchObject({
|
|
id: 1,
|
|
label: 'Email Inbox (support@example.com)',
|
|
action: 'inbox',
|
|
value: 1,
|
|
name: 'Email Inbox',
|
|
email: 'support@example.com',
|
|
channelType: INBOX_TYPES.EMAIL,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('prepareAttachmentPayload', () => {
|
|
it('prepares direct upload files', () => {
|
|
const files = [{ blobSignedId: 'signed1' }];
|
|
expect(helpers.prepareAttachmentPayload(files, true)).toEqual([
|
|
'signed1',
|
|
]);
|
|
});
|
|
|
|
it('prepares regular files', () => {
|
|
const files = [{ resource: { file: 'file1' } }];
|
|
expect(helpers.prepareAttachmentPayload(files, false)).toEqual(['file1']);
|
|
});
|
|
});
|
|
|
|
describe('prepareNewMessagePayload', () => {
|
|
const baseParams = {
|
|
targetInbox: { id: 1, sourceId: 'source1' },
|
|
selectedContact: { id: '2' },
|
|
message: 'Hello',
|
|
currentUser: { id: 3 },
|
|
};
|
|
|
|
it('prepares basic message payload', () => {
|
|
const result = helpers.prepareNewMessagePayload(baseParams);
|
|
expect(result).toEqual({
|
|
inboxId: 1,
|
|
sourceId: 'source1',
|
|
contactId: 2,
|
|
message: { content: 'Hello' },
|
|
assigneeId: 3,
|
|
});
|
|
});
|
|
|
|
it('includes optional fields when provided', () => {
|
|
const result = helpers.prepareNewMessagePayload({
|
|
...baseParams,
|
|
subject: 'Test',
|
|
ccEmails: 'cc@test.com',
|
|
bccEmails: 'bcc@test.com',
|
|
attachedFiles: [{ blobSignedId: 'file1' }],
|
|
directUploadsEnabled: true,
|
|
});
|
|
|
|
expect(result).toMatchObject({
|
|
mailSubject: 'Test',
|
|
message: {
|
|
content: 'Hello',
|
|
cc_emails: 'cc@test.com',
|
|
bcc_emails: 'bcc@test.com',
|
|
},
|
|
files: ['file1'],
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('prepareWhatsAppMessagePayload', () => {
|
|
it('prepares whatsapp message payload', () => {
|
|
const params = {
|
|
targetInbox: { id: 1, sourceId: 'source1' },
|
|
selectedContact: { id: 2 },
|
|
message: 'Hello',
|
|
templateParams: { param1: 'value1' },
|
|
currentUser: { id: 3 },
|
|
};
|
|
|
|
const result = helpers.prepareWhatsAppMessagePayload(params);
|
|
expect(result).toEqual({
|
|
inboxId: 1,
|
|
sourceId: 'source1',
|
|
contactId: 2,
|
|
message: {
|
|
content: 'Hello',
|
|
template_params: { param1: 'value1' },
|
|
},
|
|
assigneeId: 3,
|
|
});
|
|
});
|
|
});
|
|
});
|