- UI will show the breach in the conversation list. - UI will show the breach in the conversation header. Fixes: https://linear.app/chatwoot/issue/CW-3146/update-the-ui-to-show-the-breach-in-the-conversation-list Fixes: https://linear.app/chatwoot/issue/CW-3144/ui-update-to-show-the-breachgoing-to-breach
151 lines
4.2 KiB
JavaScript
151 lines
4.2 KiB
JavaScript
import { evaluateSLAStatus } from '../SLAHelper';
|
|
|
|
beforeEach(() => {
|
|
jest
|
|
.spyOn(Date, 'now')
|
|
.mockImplementation(() => new Date('2024-01-01T00:00:00Z').getTime());
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
describe('SLAHelper', () => {
|
|
describe('evaluateSLAStatus', () => {
|
|
it('returns an empty object when sla or chat is not present', () => {
|
|
expect(evaluateSLAStatus(null, null)).toEqual({
|
|
type: '',
|
|
threshold: '',
|
|
icon: '',
|
|
isSlaMissed: false,
|
|
});
|
|
});
|
|
|
|
// Case when FRT SLA is missed
|
|
it('correctly identifies a missed FRT SLA', () => {
|
|
const appliedSla = {
|
|
sla_first_response_time_threshold: 600,
|
|
sla_next_response_time_threshold: 1200,
|
|
sla_resolution_time_threshold: 1800,
|
|
created_at: 1704066540,
|
|
};
|
|
const chatMissed = {
|
|
first_reply_created_at: 0,
|
|
waiting_since: 0,
|
|
status: 'open',
|
|
};
|
|
expect(evaluateSLAStatus(appliedSla, chatMissed)).toEqual({
|
|
type: 'FRT',
|
|
threshold: '1m',
|
|
icon: 'flame',
|
|
isSlaMissed: true,
|
|
});
|
|
});
|
|
|
|
// Case when FRT SLA is not missed
|
|
it('correctly identifies an FRT SLA not yet breached', () => {
|
|
const appliedSla = {
|
|
sla_first_response_time_threshold: 600,
|
|
sla_next_response_time_threshold: 1200,
|
|
sla_resolution_time_threshold: 1800,
|
|
created_at: 1704066660,
|
|
};
|
|
const chatNotMissed = {
|
|
first_reply_created_at: 0,
|
|
waiting_since: 0,
|
|
status: 'open',
|
|
};
|
|
expect(evaluateSLAStatus(appliedSla, chatNotMissed)).toEqual({
|
|
type: 'FRT',
|
|
threshold: '1m',
|
|
icon: 'alarm',
|
|
isSlaMissed: false,
|
|
});
|
|
});
|
|
|
|
// Case when NRT SLA is missed
|
|
it('correctly identifies a missed NRT SLA', () => {
|
|
const appliedSla = {
|
|
sla_first_response_time_threshold: 600,
|
|
sla_next_response_time_threshold: 1200,
|
|
sla_resolution_time_threshold: 1800,
|
|
created_at: 1704065200,
|
|
};
|
|
const chatMissed = {
|
|
first_reply_created_at: 1704066200,
|
|
waiting_since: 1704065940,
|
|
status: 'open',
|
|
};
|
|
expect(evaluateSLAStatus(appliedSla, chatMissed)).toEqual({
|
|
type: 'NRT',
|
|
threshold: '1m',
|
|
icon: 'flame',
|
|
isSlaMissed: true,
|
|
});
|
|
});
|
|
|
|
// Case when NRT SLA is not missed
|
|
it('correctly identifies an NRT SLA not yet breached', () => {
|
|
const appliedSla = {
|
|
sla_first_response_time_threshold: 600,
|
|
sla_next_response_time_threshold: 1200,
|
|
sla_resolution_time_threshold: 1800,
|
|
created_at: 1704065200 - 2000,
|
|
};
|
|
const chatNotMissed = {
|
|
first_reply_created_at: 1704066200,
|
|
waiting_since: 1704066060,
|
|
status: 'open',
|
|
};
|
|
expect(evaluateSLAStatus(appliedSla, chatNotMissed)).toEqual({
|
|
type: 'NRT',
|
|
threshold: '1m',
|
|
icon: 'alarm',
|
|
isSlaMissed: false,
|
|
});
|
|
});
|
|
|
|
// Case when RT SLA is missed
|
|
it('correctly identifies a missed RT SLA', () => {
|
|
const appliedSla = {
|
|
sla_first_response_time_threshold: 600,
|
|
sla_next_response_time_threshold: 1200,
|
|
sla_resolution_time_threshold: 1800,
|
|
created_at: 1704065340,
|
|
};
|
|
const chatMissed = {
|
|
first_reply_created_at: 1704066200,
|
|
waiting_since: 0,
|
|
status: 'open',
|
|
};
|
|
expect(evaluateSLAStatus(appliedSla, chatMissed)).toEqual({
|
|
type: 'RT',
|
|
threshold: '1m',
|
|
icon: 'flame',
|
|
isSlaMissed: true,
|
|
});
|
|
});
|
|
|
|
// Case when RT SLA is not missed
|
|
it('correctly identifies an RT SLA not yet breached', () => {
|
|
const appliedSla = {
|
|
sla_first_response_time_threshold: 600,
|
|
sla_next_response_time_threshold: 1200,
|
|
sla_resolution_time_threshold: 1800,
|
|
created_at: 1704065460,
|
|
};
|
|
const chatNotMissed = {
|
|
first_reply_created_at: 1704066200,
|
|
waiting_since: 0,
|
|
status: 'open',
|
|
};
|
|
expect(evaluateSLAStatus(appliedSla, chatNotMissed)).toEqual({
|
|
type: 'RT',
|
|
threshold: '1m',
|
|
icon: 'alarm',
|
|
isSlaMissed: false,
|
|
});
|
|
});
|
|
});
|
|
});
|