mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-05 13:37:55 +00:00
# Pull Request Template ## Description With these fixes, I could improve some translations in portuguese, and also I added some improvements to make some drowpdown values, that were not translatable into translatable strings, into the Automations, Macros and Custom Attributes page. I also fixed some typos. Here are the main improvements. - ~Fixed typo in portuguese into `Reports > Agents` page:~ ~Before:  After: ~ - Added the possibility to make the `Priority` and `Message types` translatables in other languages, into Macros and Automations page. Also added the same feature for Custom attributes page at `applies to` and `type` fields: Before:     After:     - ~Improve Bots page. In the Brazilian portuguese is very common and widely used bots to refer to chatbots, using `robô` as a direct translations sounds weird, `robô` is used more often when we are talking about robots, not chatbots. Before:  After: ~ - Added multiselect both `no options` and `Select` placeholder translatable strings: Before:   After:  - Added `.pnpm-store` to `.gitignore`, when I'm using docker, the pnpm always creates this folder into my root directory, so I imagine the same could happens with others, so I fixed it. ## Type of change Please delete options that are not relevant. - [x] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality not to work as expected) - [ ] This change requires a documentation update ## How Has This Been Tested? I've added some translations for my language (brazilian portuguese), so i just switched the languages between the original in EN to PT_BR. ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [x] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: iamsivin <iamsivin@gmail.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
181 lines
5.0 KiB
JavaScript
181 lines
5.0 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');
|
|
vi.mock('vue-i18n', () => ({
|
|
useI18n: () => ({ t: key => key }),
|
|
}));
|
|
|
|
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();
|
|
const expectedPriority = PRIORITY_CONDITION_VALUES.map(item => ({
|
|
id: item.id,
|
|
name: `MACROS.PRIORITY_TYPES.${item.i18nKey}`,
|
|
}));
|
|
expect(getMacroDropdownValues('change_priority')).toEqual(expectedPriority);
|
|
});
|
|
|
|
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' },
|
|
]);
|
|
});
|
|
});
|