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