Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {ITask} from '@webex/cc-store';

export interface IncomingTaskData {
ani: string;
dn: string;
customerName: string;
virtualTeamName: string;
ronaTimeout: number | null;
Expand Down Expand Up @@ -35,6 +36,7 @@ export const extractIncomingTaskData = (
//@ts-expect-error To be fixed in SDK - https://jira-eng-sjc12.cisco.com/jira/browse/CAI-6762
const callAssociationDetails = incomingTask?.data?.interaction?.callAssociatedDetails;
const ani = callAssociationDetails?.ani;
const dn = callAssociationDetails?.dn;
const customerName = callAssociationDetails?.customerName;
const virtualTeamName = callAssociationDetails?.virtualTeamName;
const ronaTimeout = callAssociationDetails?.ronaTimeout ? Number(callAssociationDetails?.ronaTimeout) : null;
Expand All @@ -56,7 +58,7 @@ export const extractIncomingTaskData = (
const declineText = !incomingTask.data.wrapUpRequired && isTelephony && isBrowser ? 'Decline' : undefined;

// Compute title based on media type
const title = isSocial ? customerName : ani;
const title = isSocial ? customerName : dn || ani;

// Compute disable state for accept button when auto-answering
const isAutoAnswering = incomingTask.data.isAutoAnswering || false;
Expand All @@ -67,6 +69,7 @@ export const extractIncomingTaskData = (

return {
ani,
dn,
customerName,
virtualTeamName,
ronaTimeout,
Expand All @@ -90,6 +93,7 @@ export const extractIncomingTaskData = (
// Return safe default
return {
ani: '',
dn: '',
customerName: '',
virtualTeamName: '',
ronaTimeout: null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export const extractTaskListItemData = (
//@ts-expect-error To be fixed in SDK - https://jira-eng-sjc12.cisco.com/jira/browse/CAI-6762
const callAssociationDetails = task?.data?.interaction?.callAssociatedDetails;
const ani = callAssociationDetails?.ani;
const dn = callAssociationDetails?.dn;
const customerName = callAssociationDetails?.customerName;
const virtualTeamName = callAssociationDetails?.virtualTeamName;

Expand All @@ -39,7 +40,7 @@ export const extractTaskListItemData = (
const declineText = isTaskIncoming && isTelephony && isBrowser ? 'Decline' : undefined;

// Compute title based on media type
const title = isSocial ? customerName : ani;
const title = isSocial ? customerName : dn || ani;

const isAutoAnswering = task.data.isAutoAnswering || false;

Expand All @@ -56,6 +57,7 @@ export const extractTaskListItemData = (

return {
ani,
dn,
customerName,
virtualTeamName,
ronaTimeout,
Expand All @@ -82,6 +84,7 @@ export const extractTaskListItemData = (
// Return safe default
return {
ani: '',
dn: '',
customerName: '',
virtualTeamName: '',
ronaTimeout: null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,7 @@ export interface TaskComponentData {

export interface TaskListItemData {
ani: string;
dn: string;
customerName: string;
virtualTeamName: string;
ronaTimeout: number | null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,47 @@ describe('incoming-task.utils', () => {
});
});

describe('Outdial tasks (dn field)', () => {
it('should use dn as title when dn is provided for telephony task', () => {
const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails;

mockTask.data.interaction.callAssociatedDetails = {
ani: '+18005551000',
dn: '+14155559999',
customerName: '',
virtualTeamName: 'Outbound Team',
ronaTimeout: '30',
};

const result = extractIncomingTaskData(mockTask, true);

expect(result.dn).toBe('+14155559999');
expect(result.ani).toBe('+18005551000');
expect(result.title).toBe('+14155559999'); // dn takes priority over ani

mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails;
});

it('should fall back to ani when dn is not provided', () => {
const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails;

mockTask.data.interaction.callAssociatedDetails = {
ani: '+14155551234',
customerName: '',
virtualTeamName: 'Support Team',
ronaTimeout: '30',
};

const result = extractIncomingTaskData(mockTask, true);

expect(result.dn).toBeUndefined();
expect(result.ani).toBe('+14155551234');
expect(result.title).toBe('+14155551234'); // falls back to ani

mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails;
});
});

describe('Edge cases', () => {
it('should handle missing call association details', () => {
const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,65 @@ describe('task-list.utils', () => {
});
});

describe('Outdial tasks (dn field)', () => {
it('should use dn as title when dn is provided for telephony task', () => {
const originalState = mockTask.data.interaction.state;
const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails;
const originalWrapUpRequired = mockTask.data.wrapUpRequired;
const originalMediaType = mockTask.data.interaction.mediaType;

mockTask.data.interaction.state = 'active';
mockTask.data.interaction.callAssociatedDetails = {
ani: '+18005551000',
dn: '+14155559999',
customerName: '',
virtualTeamName: 'Outbound Team',
ronaTimeout: '30',
};
mockTask.data.wrapUpRequired = false;
mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY;

const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId);

expect(result.dn).toBe('+14155559999');
expect(result.ani).toBe('+18005551000');
expect(result.title).toBe('+14155559999'); // dn takes priority over ani

mockTask.data.interaction.state = originalState;
mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails;
mockTask.data.wrapUpRequired = originalWrapUpRequired;
mockTask.data.interaction.mediaType = originalMediaType;
});

it('should fall back to ani when dn is not provided', () => {
const originalState = mockTask.data.interaction.state;
const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails;
const originalWrapUpRequired = mockTask.data.wrapUpRequired;
const originalMediaType = mockTask.data.interaction.mediaType;

mockTask.data.interaction.state = 'active';
mockTask.data.interaction.callAssociatedDetails = {
ani: '+14155551234',
customerName: '',
virtualTeamName: 'Support Team',
ronaTimeout: '30',
};
mockTask.data.wrapUpRequired = false;
mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY;

const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId);

expect(result.dn).toBeUndefined();
expect(result.ani).toBe('+14155551234');
expect(result.title).toBe('+14155551234'); // falls back to ani

mockTask.data.interaction.state = originalState;
mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails;
mockTask.data.wrapUpRequired = originalWrapUpRequired;
mockTask.data.interaction.mediaType = originalMediaType;
});
});

describe('Incoming tasks', () => {
it('should extract correct data for incoming telephony task on browser', () => {
// Mock isIncomingTask to return true for this test
Expand Down