mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	 c553997af8
			
		
	
	c553997af8
	
	
	
		
			
			# 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' },
 | |
|     ]);
 | |
|   });
 | |
| });
 |