mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-01 19:48:08 +00:00
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
230 lines
7.2 KiB
JavaScript
230 lines
7.2 KiB
JavaScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import SummaryReportsAPI from 'dashboard/api/summaryReports';
|
|
import store, { initialState } from '../summaryReports';
|
|
|
|
vi.mock('dashboard/api/summaryReports', () => ({
|
|
default: {
|
|
getInboxReports: vi.fn(),
|
|
getAgentReports: vi.fn(),
|
|
getTeamReports: vi.fn(),
|
|
getLabelReports: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
describe('Summary Reports Store', () => {
|
|
let commit;
|
|
|
|
beforeEach(() => {
|
|
// Reset all mocks before each test
|
|
vi.clearAllMocks();
|
|
commit = vi.fn();
|
|
});
|
|
|
|
describe('Initial State', () => {
|
|
it('should have the correct initial state structure', () => {
|
|
expect(initialState).toEqual({
|
|
inboxSummaryReports: [],
|
|
agentSummaryReports: [],
|
|
teamSummaryReports: [],
|
|
labelSummaryReports: [],
|
|
uiFlags: {
|
|
isFetchingInboxSummaryReports: false,
|
|
isFetchingAgentSummaryReports: false,
|
|
isFetchingTeamSummaryReports: false,
|
|
isFetchingLabelSummaryReports: false,
|
|
},
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Getters', () => {
|
|
const state = {
|
|
inboxSummaryReports: [{ id: 1 }],
|
|
agentSummaryReports: [{ id: 2 }],
|
|
teamSummaryReports: [{ id: 3 }],
|
|
labelSummaryReports: [{ id: 4 }],
|
|
uiFlags: { isFetchingInboxSummaryReports: true },
|
|
};
|
|
|
|
it('should return inbox summary reports', () => {
|
|
expect(store.getters.getInboxSummaryReports(state)).toEqual([{ id: 1 }]);
|
|
});
|
|
|
|
it('should return agent summary reports', () => {
|
|
expect(store.getters.getAgentSummaryReports(state)).toEqual([{ id: 2 }]);
|
|
});
|
|
|
|
it('should return team summary reports', () => {
|
|
expect(store.getters.getTeamSummaryReports(state)).toEqual([{ id: 3 }]);
|
|
});
|
|
|
|
it('should return label summary reports', () => {
|
|
expect(store.getters.getLabelSummaryReports(state)).toEqual([{ id: 4 }]);
|
|
});
|
|
|
|
it('should return UI flags', () => {
|
|
expect(store.getters.getUIFlags(state)).toEqual({
|
|
isFetchingInboxSummaryReports: true,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Mutations', () => {
|
|
it('should set inbox summary report', () => {
|
|
const state = { ...initialState };
|
|
const data = [{ id: 1 }];
|
|
|
|
store.mutations.setInboxSummaryReport(state, data);
|
|
expect(state.inboxSummaryReports).toEqual(data);
|
|
});
|
|
|
|
it('should set agent summary report', () => {
|
|
const state = { ...initialState };
|
|
const data = [{ id: 2 }];
|
|
|
|
store.mutations.setAgentSummaryReport(state, data);
|
|
expect(state.agentSummaryReports).toEqual(data);
|
|
});
|
|
|
|
it('should set team summary report', () => {
|
|
const state = { ...initialState };
|
|
const data = [{ id: 3 }];
|
|
|
|
store.mutations.setTeamSummaryReport(state, data);
|
|
expect(state.teamSummaryReports).toEqual(data);
|
|
});
|
|
|
|
it('should set label summary report', () => {
|
|
const state = { ...initialState };
|
|
const data = [{ id: 4 }];
|
|
|
|
store.mutations.setLabelSummaryReport(state, data);
|
|
expect(state.labelSummaryReports).toEqual(data);
|
|
});
|
|
|
|
it('should merge UI flags with existing flags', () => {
|
|
const state = {
|
|
uiFlags: { flag1: true, flag2: false },
|
|
};
|
|
const newFlags = { flag2: true, flag3: true };
|
|
|
|
store.mutations.setUIFlags(state, newFlags);
|
|
expect(state.uiFlags).toEqual({
|
|
flag1: true,
|
|
flag2: true,
|
|
flag3: true,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Actions', () => {
|
|
describe('fetchInboxSummaryReports', () => {
|
|
it('should fetch inbox reports successfully', async () => {
|
|
const params = { date: '2025-01-01' };
|
|
const mockResponse = {
|
|
data: [{ report_id: 1, report_name: 'Test' }],
|
|
};
|
|
|
|
SummaryReportsAPI.getInboxReports.mockResolvedValue(mockResponse);
|
|
|
|
await store.actions.fetchInboxSummaryReports({ commit }, params);
|
|
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingInboxSummaryReports: true,
|
|
});
|
|
expect(SummaryReportsAPI.getInboxReports).toHaveBeenCalledWith(params);
|
|
expect(commit).toHaveBeenCalledWith('setInboxSummaryReport', [
|
|
{ reportId: 1, reportName: 'Test' },
|
|
]);
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingInboxSummaryReports: false,
|
|
});
|
|
});
|
|
|
|
it('should handle errors gracefully', async () => {
|
|
SummaryReportsAPI.getInboxReports.mockRejectedValue(
|
|
new Error('API Error')
|
|
);
|
|
|
|
await store.actions.fetchInboxSummaryReports({ commit }, {});
|
|
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingInboxSummaryReports: false,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('fetchAgentSummaryReports', () => {
|
|
it('should fetch agent reports successfully', async () => {
|
|
const params = { agentId: 123 };
|
|
const mockResponse = {
|
|
data: [{ agent_id: 123, agent_name: 'Test Agent' }],
|
|
};
|
|
|
|
SummaryReportsAPI.getAgentReports.mockResolvedValue(mockResponse);
|
|
|
|
await store.actions.fetchAgentSummaryReports({ commit }, params);
|
|
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingAgentSummaryReports: true,
|
|
});
|
|
expect(SummaryReportsAPI.getAgentReports).toHaveBeenCalledWith(params);
|
|
expect(commit).toHaveBeenCalledWith('setAgentSummaryReport', [
|
|
{ agentId: 123, agentName: 'Test Agent' },
|
|
]);
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingAgentSummaryReports: false,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('fetchTeamSummaryReports', () => {
|
|
it('should fetch team reports successfully', async () => {
|
|
const params = { teamId: 456 };
|
|
const mockResponse = {
|
|
data: [{ team_id: 456, team_name: 'Test Team' }],
|
|
};
|
|
|
|
SummaryReportsAPI.getTeamReports.mockResolvedValue(mockResponse);
|
|
|
|
await store.actions.fetchTeamSummaryReports({ commit }, params);
|
|
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingTeamSummaryReports: true,
|
|
});
|
|
expect(SummaryReportsAPI.getTeamReports).toHaveBeenCalledWith(params);
|
|
expect(commit).toHaveBeenCalledWith('setTeamSummaryReport', [
|
|
{ teamId: 456, teamName: 'Test Team' },
|
|
]);
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingTeamSummaryReports: false,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('fetchLabelSummaryReports', () => {
|
|
it('should fetch label reports successfully', async () => {
|
|
const params = { labelId: 789 };
|
|
const mockResponse = {
|
|
data: [{ label_id: 789, label_name: 'Test Label' }],
|
|
};
|
|
|
|
SummaryReportsAPI.getLabelReports.mockResolvedValue(mockResponse);
|
|
|
|
await store.actions.fetchLabelSummaryReports({ commit }, params);
|
|
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingLabelSummaryReports: true,
|
|
});
|
|
expect(SummaryReportsAPI.getLabelReports).toHaveBeenCalledWith(params);
|
|
expect(commit).toHaveBeenCalledWith('setLabelSummaryReport', [
|
|
{ labelId: 789, labelName: 'Test Label' },
|
|
]);
|
|
expect(commit).toHaveBeenCalledWith('setUIFlags', {
|
|
isFetchingLabelSummaryReports: false,
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|