mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 04:27:53 +00:00
176 lines
4.8 KiB
JavaScript
176 lines
4.8 KiB
JavaScript
import { describe, it, expect, vi } from 'vitest';
|
|
import { useMacros } from '../useMacros';
|
|
import { useStoreGetters } from 'dashboard/composables/store';
|
|
import { PRIORITY_CONDITION_VALUES } from 'dashboard/constants/automation';
|
|
|
|
vi.mock('dashboard/composables/store');
|
|
vi.mock('dashboard/helper/automationHelper.js');
|
|
|
|
describe('useMacros', () => {
|
|
const mockLabels = [
|
|
{
|
|
id: 6,
|
|
title: 'sales',
|
|
description: 'sales team',
|
|
color: '#8EA20F',
|
|
show_on_sidebar: true,
|
|
},
|
|
{
|
|
id: 2,
|
|
title: 'billing',
|
|
description: 'billing',
|
|
color: '#4077DA',
|
|
show_on_sidebar: true,
|
|
},
|
|
{
|
|
id: 1,
|
|
title: 'snoozed',
|
|
description: 'Items marked for later',
|
|
color: '#D12F42',
|
|
show_on_sidebar: true,
|
|
},
|
|
{
|
|
id: 5,
|
|
title: 'mobile-app',
|
|
description: 'tech team',
|
|
color: '#2DB1CC',
|
|
show_on_sidebar: true,
|
|
},
|
|
{
|
|
id: 14,
|
|
title: 'human-resources-department-with-long-title',
|
|
description: 'Test',
|
|
color: '#FF6E09',
|
|
show_on_sidebar: true,
|
|
},
|
|
{
|
|
id: 22,
|
|
title: 'priority',
|
|
description: 'For important sales leads',
|
|
color: '#7E7CED',
|
|
show_on_sidebar: true,
|
|
},
|
|
];
|
|
const mockTeams = [
|
|
{
|
|
id: 1,
|
|
name: '⚙️ sales team',
|
|
description: 'This is our internal sales team',
|
|
allow_auto_assign: true,
|
|
account_id: 1,
|
|
is_member: true,
|
|
},
|
|
{
|
|
id: 2,
|
|
name: '🤷♂️ fayaz',
|
|
description: 'Test',
|
|
allow_auto_assign: true,
|
|
account_id: 1,
|
|
is_member: true,
|
|
},
|
|
{
|
|
id: 3,
|
|
name: '🇮🇳 apac sales',
|
|
description: 'Sales team for France Territory',
|
|
allow_auto_assign: true,
|
|
account_id: 1,
|
|
is_member: true,
|
|
},
|
|
];
|
|
const mockAgents = [
|
|
{
|
|
id: 1,
|
|
account_id: 1,
|
|
availability_status: 'offline',
|
|
auto_offline: true,
|
|
confirmed: true,
|
|
email: 'john@doe.com',
|
|
available_name: 'John Doe',
|
|
name: 'John Doe',
|
|
role: 'agent',
|
|
thumbnail: 'https://example.com/image.png',
|
|
},
|
|
{
|
|
id: 9,
|
|
account_id: 1,
|
|
availability_status: 'offline',
|
|
auto_offline: true,
|
|
confirmed: true,
|
|
email: 'clark@kent.com',
|
|
available_name: 'Clark Kent',
|
|
name: 'Clark Kent',
|
|
role: 'agent',
|
|
thumbnail: '',
|
|
},
|
|
];
|
|
|
|
beforeEach(() => {
|
|
useStoreGetters.mockReturnValue({
|
|
'labels/getLabels': { value: mockLabels },
|
|
'teams/getTeams': { value: mockTeams },
|
|
'agents/getAgents': { value: mockAgents },
|
|
});
|
|
});
|
|
|
|
it('initializes computed properties correctly', () => {
|
|
const { getMacroDropdownValues } = useMacros();
|
|
expect(getMacroDropdownValues('add_label')).toHaveLength(mockLabels.length);
|
|
expect(getMacroDropdownValues('assign_team')).toHaveLength(
|
|
mockTeams.length
|
|
);
|
|
expect(getMacroDropdownValues('assign_agent')).toHaveLength(
|
|
mockAgents.length + 1
|
|
); // +1 for "Self"
|
|
});
|
|
|
|
it('returns teams for assign_team and send_email_to_team types', () => {
|
|
const { getMacroDropdownValues } = useMacros();
|
|
expect(getMacroDropdownValues('assign_team')).toEqual(mockTeams);
|
|
expect(getMacroDropdownValues('send_email_to_team')).toEqual(mockTeams);
|
|
});
|
|
|
|
it('returns agents with "Self" option for assign_agent type', () => {
|
|
const { getMacroDropdownValues } = useMacros();
|
|
const result = getMacroDropdownValues('assign_agent');
|
|
expect(result[0]).toEqual({ id: 'self', name: 'Self' });
|
|
expect(result.slice(1)).toEqual(mockAgents);
|
|
});
|
|
|
|
it('returns formatted labels for add_label and remove_label types', () => {
|
|
const { getMacroDropdownValues } = useMacros();
|
|
const expectedLabels = mockLabels.map(i => ({
|
|
id: i.title,
|
|
name: i.title,
|
|
}));
|
|
expect(getMacroDropdownValues('add_label')).toEqual(expectedLabels);
|
|
expect(getMacroDropdownValues('remove_label')).toEqual(expectedLabels);
|
|
});
|
|
|
|
it('returns PRIORITY_CONDITION_VALUES for change_priority type', () => {
|
|
const { getMacroDropdownValues } = useMacros();
|
|
expect(getMacroDropdownValues('change_priority')).toEqual(
|
|
PRIORITY_CONDITION_VALUES
|
|
);
|
|
});
|
|
|
|
it('returns an empty array for unknown types', () => {
|
|
const { getMacroDropdownValues } = useMacros();
|
|
expect(getMacroDropdownValues('unknown_type')).toEqual([]);
|
|
});
|
|
|
|
it('handles empty data correctly', () => {
|
|
useStoreGetters.mockReturnValue({
|
|
'labels/getLabels': { value: [] },
|
|
'teams/getTeams': { value: [] },
|
|
'agents/getAgents': { value: [] },
|
|
});
|
|
|
|
const { getMacroDropdownValues } = useMacros();
|
|
expect(getMacroDropdownValues('add_label')).toEqual([]);
|
|
expect(getMacroDropdownValues('assign_team')).toEqual([]);
|
|
expect(getMacroDropdownValues('assign_agent')).toEqual([
|
|
{ id: 'self', name: 'Self' },
|
|
]);
|
|
});
|
|
});
|