diff --git a/packages/contact-center/cc-components/src/components/task/CallControlCAD/call-control-cad.tsx b/packages/contact-center/cc-components/src/components/task/CallControlCAD/call-control-cad.tsx index b2f31072a..d361b02b8 100644 --- a/packages/contact-center/cc-components/src/components/task/CallControlCAD/call-control-cad.tsx +++ b/packages/contact-center/cc-components/src/components/task/CallControlCAD/call-control-cad.tsx @@ -69,14 +69,22 @@ const CallControlCADComponent: React.FC = (props) => //@ts-expect-error To be fixed in SDK - https://jira-eng-sjc12.cisco.com/jira/browse/CAI-6762 const dn = currentTask?.data?.interaction?.callAssociatedDetails?.dn; + // Check if this is an outdial call - for outdial, show dialed number instead of entrypoint + const isOutdial = currentTask?.data?.interaction?.outboundType === 'OUTDIAL'; + // Create unique IDs for tooltips const customerNameTriggerId = `customer-name-trigger-${currentTask.data.interaction.interactionId}`; const customerNameTooltipId = `customer-name-tooltip-${currentTask.data.interaction.interactionId}`; const phoneNumberTriggerId = `phone-number-trigger-${currentTask.data.interaction.interactionId}`; const phoneNumberTooltipId = `phone-number-tooltip-${currentTask.data.interaction.interactionId}`; + // For telephony calls, ani is the phone number and dn is the entry point/DNIS. + // Inbound: ani = caller's number, dn = entry point dialed by caller + // Outdial: ani = customer's number dialed by agent, dn = agent's entry point + const callerNumber = isOutdial ? dn || ani : ani; + const renderCustomerName = () => { - const customerText = isSocial ? customerName || NO_CUSTOMER_NAME : ani || NO_CALLER_ID; + const customerText = isSocial ? customerName || NO_CUSTOMER_NAME : callerNumber || NO_CALLER_ID; const textComponent = ( = (props) => }; const renderPhoneNumber = () => { - const phoneText = isSocial ? customerName || NO_CUSTOMER_NAME : dn || NO_PHONE_NUMBER; + const phoneText = isSocial ? customerName || NO_CUSTOMER_NAME : ani || NO_PHONE_NUMBER; const labelText = isSocial ? CUSTOMER_NAME : PHONE_NUMBER; const textComponent = ( diff --git a/packages/contact-center/cc-components/src/components/task/IncomingTask/incoming-task.utils.tsx b/packages/contact-center/cc-components/src/components/task/IncomingTask/incoming-task.utils.tsx index 4da1f8745..35e9c960a 100644 --- a/packages/contact-center/cc-components/src/components/task/IncomingTask/incoming-task.utils.tsx +++ b/packages/contact-center/cc-components/src/components/task/IncomingTask/incoming-task.utils.tsx @@ -35,6 +35,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; @@ -46,6 +47,9 @@ export const extractIncomingTaskData = ( const isTelephony = mediaType === MEDIA_CHANNEL.TELEPHONY; const isSocial = mediaType === MEDIA_CHANNEL.SOCIAL; + // Check if this is an outdial call + const isOutdial = incomingTask?.data?.interaction?.outboundType === 'OUTDIAL'; + // Compute button text based on conditions const acceptText = !incomingTask.data.wrapUpRequired ? isTelephony && !isBrowser @@ -56,7 +60,8 @@ export const extractIncomingTaskData = ( const declineText = !incomingTask.data.wrapUpRequired && isTelephony && isBrowser ? 'Decline' : undefined; // Compute title based on media type - const title = isSocial ? customerName : ani; + // For outdial calls, show the dialed number (dn) instead of the entrypoint (ani) + const title = isSocial ? customerName : isOutdial ? dn || ani : ani; // Compute disable state for accept button when auto-answering const isAutoAnswering = incomingTask.data.isAutoAnswering || false; diff --git a/packages/contact-center/cc-components/src/components/task/TaskList/task-list.utils.ts b/packages/contact-center/cc-components/src/components/task/TaskList/task-list.utils.ts index aa1591ffc..29a4b9d16 100644 --- a/packages/contact-center/cc-components/src/components/task/TaskList/task-list.utils.ts +++ b/packages/contact-center/cc-components/src/components/task/TaskList/task-list.utils.ts @@ -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; @@ -33,13 +34,17 @@ export const extractTaskListItemData = ( const isTelephony = mediaType === MEDIA_CHANNEL.TELEPHONY; const isSocial = mediaType === MEDIA_CHANNEL.SOCIAL; + // Check if this is an outdial call + const isOutdial = task?.data?.interaction?.outboundType === 'OUTDIAL'; + // Compute button text based on conditions const acceptText = isTaskIncoming ? (isTelephony && !isBrowser ? 'Ringing...' : 'Accept') : undefined; const declineText = isTaskIncoming && isTelephony && isBrowser ? 'Decline' : undefined; // Compute title based on media type - const title = isSocial ? customerName : ani; + // For outdial calls, show the dialed number (dn) instead of the entrypoint (ani) + const title = isSocial ? customerName : isOutdial ? dn || ani : ani; const isAutoAnswering = task.data.isAutoAnswering || false; diff --git a/packages/contact-center/cc-components/tests/components/task/CallControlCAD/__snapshots__/call-control-cad.snapshot.tsx.snap b/packages/contact-center/cc-components/tests/components/task/CallControlCAD/__snapshots__/call-control-cad.snapshot.tsx.snap index ccecd713c..dfe728504 100644 --- a/packages/contact-center/cc-components/tests/components/task/CallControlCAD/__snapshots__/call-control-cad.snapshot.tsx.snap +++ b/packages/contact-center/cc-components/tests/components/task/CallControlCAD/__snapshots__/call-control-cad.snapshot.tsx.snap @@ -198,7 +198,7 @@ exports[`CallControlCADComponent Snapshots should handle edge cases and control - No Phone Number + 555-123-4567 @@ -376,7 +376,7 @@ exports[`CallControlCADComponent Snapshots should handle edge cases and control - No Phone Number + 555-123-4567 @@ -908,7 +908,7 @@ exports[`CallControlCADComponent Snapshots should render basic call states and m - No Phone Number + chat-customer@example.com - No Phone Number + chat-customer@example.com @@ -1178,7 +1178,7 @@ exports[`CallControlCADComponent Snapshots should render basic call states and m - No Phone Number + 555-123-4567 @@ -1438,7 +1438,7 @@ exports[`CallControlCADComponent Snapshots should render basic call states and m - No Phone Number + 555-123-4567 @@ -1925,7 +1925,7 @@ exports[`CallControlCADComponent Snapshots should render consultation and wrapup - No Phone Number + 555-123-4567 @@ -2219,7 +2219,7 @@ exports[`CallControlCADComponent Snapshots should render consultation and wrapup - No Phone Number + 555-123-4567 @@ -2480,7 +2480,7 @@ exports[`CallControlCADComponent Snapshots should render consultation and wrapup - No Phone Number + 555-123-4567 @@ -2741,7 +2741,7 @@ exports[`CallControlCADComponent Snapshots should render consultation and wrapup - No Phone Number + 555-123-4567 diff --git a/packages/contact-center/cc-components/tests/components/task/CallControlCAD/call-control-cad.tsx b/packages/contact-center/cc-components/tests/components/task/CallControlCAD/call-control-cad.tsx index 4bb2c77f4..e095d1e2b 100644 --- a/packages/contact-center/cc-components/tests/components/task/CallControlCAD/call-control-cad.tsx +++ b/packages/contact-center/cc-components/tests/components/task/CallControlCAD/call-control-cad.tsx @@ -55,6 +55,7 @@ describe('CallControlCADComponent', () => { callAssociatedDetails: { customerName: 'John Doe', ani: '555-123-4567', + dn: '555-999-0000', virtualTeamName: 'Support Team', ronaTimeout: '30', }, @@ -265,6 +266,40 @@ describe('CallControlCADComponent', () => { chatConsultScreen.unmount(); }); + it('should display correct phone number for inbound vs outdial calls', () => { + // Inbound call: caller ID = ani, phone number = ani + const inboundScreen = render(); + // ani (555-123-4567) should appear as both caller ID and phone number + const aniElements = inboundScreen.getAllByText('555-123-4567'); + expect(aniElements.length).toBe(2); // caller ID + phone number + // dn (555-999-0000) should NOT appear anywhere + expect(inboundScreen.queryByText('555-999-0000')).not.toBeInTheDocument(); + inboundScreen.unmount(); + + // Outdial call: caller ID = dn, phone number = ani + const outdialProps = { + ...defaultProps, + currentTask: { + ...defaultProps.currentTask, + data: { + ...defaultProps.currentTask.data, + interaction: { + ...defaultProps.currentTask.data.interaction, + outboundType: 'OUTDIAL', + }, + }, + }, + }; + const outdialScreen = render(); + // Caller ID should show dn (555-999-0000) + expect(outdialScreen.getByText('555-999-0000')).toBeInTheDocument(); + // Phone number should show ani (555-123-4567) + const phoneLabel = outdialScreen.getByText('Phone Number:'); + const phoneValue = phoneLabel.nextElementSibling; + expect(phoneValue?.textContent).toBe('555-123-4567'); + outdialScreen.unmount(); + }); + it('should handle wrapup mode and edge cases', () => { // Test wrapup mode hides elements const wrapupProps = { diff --git a/packages/contact-center/cc-components/tests/components/task/IncomingTask/incoming-task.utils.tsx b/packages/contact-center/cc-components/tests/components/task/IncomingTask/incoming-task.utils.tsx index 0198dd810..5d79684c6 100644 --- a/packages/contact-center/cc-components/tests/components/task/IncomingTask/incoming-task.utils.tsx +++ b/packages/contact-center/cc-components/tests/components/task/IncomingTask/incoming-task.utils.tsx @@ -105,6 +105,179 @@ describe('incoming-task.utils', () => { }); }); + describe('Outdial tasks', () => { + it('should use dn (dialed number) as title for outdial telephony tasks', () => { + const originalMediaType = mockTask.data.interaction.mediaType; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + ronaTimeout: '30', + }; + + const result = extractIncomingTaskData(mockTask, true); + + expect(result.title).toBe('+14155559876'); // Should show dn, not ani + expect(result.ani).toBe('+18005551234'); + expect(result.isTelephony).toBe(true); + + // Restore + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should fall back to ani when dn is not available for outdial tasks', () => { + const originalMediaType = mockTask.data.interaction.mediaType; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + }; + + const result = extractIncomingTaskData(mockTask, true); + + expect(result.title).toBe('+18005551234'); // Falls back to ani + + // Restore + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should use ani as title for non-outdial telephony tasks', () => { + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Inbound Customer', + virtualTeamName: 'Support Team', + }; + + const result = extractIncomingTaskData(mockTask, true); + + expect(result.title).toBe('+18005551234'); // Should show ani for inbound + + // Restore + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + }); + + it('should fall back to ani when dn is empty string for outdial tasks', () => { + const originalMediaType = mockTask.data.interaction.mediaType; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + }; + + const result = extractIncomingTaskData(mockTask, true); + + expect(result.title).toBe('+18005551234'); // Empty dn falls back to ani + + // Restore + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should use ani for CALLBACK outboundType (not OUTDIAL)', () => { + const originalMediaType = mockTask.data.interaction.mediaType; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'CALLBACK'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Callback Customer', + virtualTeamName: 'Callback Team', + }; + + const result = extractIncomingTaskData(mockTask, true); + + expect(result.title).toBe('+18005551234'); // CALLBACK uses ani, not dn + + // Restore + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should still use customerName for social media outdial tasks', () => { + const originalMediaType = mockTask.data.interaction.mediaType; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.SOCIAL; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: 'social-ani', + dn: 'social-dn', + customerName: 'Social Outdial Customer', + virtualTeamName: 'Social Team', + }; + + const result = extractIncomingTaskData(mockTask, true); + + expect(result.title).toBe('Social Outdial Customer'); // Social always uses customerName + + // Restore + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should extract correct button states for outdial telephony on non-browser', () => { + const originalMediaType = mockTask.data.interaction.mediaType; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalOutboundType = mockTask.data.interaction.outboundType; + const originalWrapUpRequired = mockTask.data.wrapUpRequired; + + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.wrapUpRequired = false; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + ronaTimeout: '30', + }; + + const result = extractIncomingTaskData(mockTask, false); + + expect(result.title).toBe('+14155559876'); + expect(result.acceptText).toBe('Ringing...'); + expect(result.declineText).toBeUndefined(); + expect(result.disableAccept).toBe(true); + + // Restore + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.outboundType = originalOutboundType; + mockTask.data.wrapUpRequired = originalWrapUpRequired; + }); + }); + describe('Edge cases', () => { it('should handle missing call association details', () => { const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; diff --git a/packages/contact-center/cc-components/tests/components/task/TaskList/task-list.utils.tsx b/packages/contact-center/cc-components/tests/components/task/TaskList/task-list.utils.tsx index ac93a7a84..a9bb2c65d 100644 --- a/packages/contact-center/cc-components/tests/components/task/TaskList/task-list.utils.tsx +++ b/packages/contact-center/cc-components/tests/components/task/TaskList/task-list.utils.tsx @@ -243,6 +243,205 @@ describe('task-list.utils', () => { mockTask.data.interaction.mediaType = originalMediaType; }); }); + + describe('Outdial tasks', () => { + it('should use dn (dialed number) as title for outdial telephony tasks', () => { + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.state = 'connected'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + }; + + const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId); + + expect(result.title).toBe('+14155559876'); // Should show dn, not ani + expect(result.ani).toBe('+18005551234'); + expect(result.isTelephony).toBe(true); + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should fall back to ani when dn is not available for outdial tasks', () => { + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.state = 'connected'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + }; + + const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId); + + expect(result.title).toBe('+18005551234'); // Falls back to ani + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should use ani as title for non-outdial telephony tasks even when dn is present', () => { + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + + mockTask.data.interaction.state = 'connected'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Inbound Customer', + virtualTeamName: 'Support Team', + }; + + const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId); + + expect(result.title).toBe('+18005551234'); // Should show ani for inbound + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + }); + + it('should fall back to ani when dn is empty string for outdial tasks', () => { + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.state = 'connected'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + }; + + const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId); + + expect(result.title).toBe('+18005551234'); // Empty dn falls back to ani + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should use ani for CALLBACK outboundType (not OUTDIAL)', () => { + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.state = 'connected'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'CALLBACK'; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Callback Customer', + virtualTeamName: 'Callback Team', + }; + + const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId); + + expect(result.title).toBe('+18005551234'); // CALLBACK uses ani, not dn + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should still use customerName for social media outdial tasks', () => { + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + const originalOutboundType = mockTask.data.interaction.outboundType; + + mockTask.data.interaction.state = 'connected'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.SOCIAL; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.interaction.callAssociatedDetails = { + ani: 'social-ani', + dn: 'social-dn', + customerName: 'Social Outdial Customer', + virtualTeamName: 'Social Team', + }; + + const result = extractTaskListItemData(mockTask, true, mockTask.data.agentId); + + expect(result.title).toBe('Social Outdial Customer'); // Social always uses customerName + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.outboundType = originalOutboundType; + }); + + it('should extract correct button states for incoming outdial telephony on non-browser', () => { + // Mock isIncomingTask to return true for this test + (isIncomingTask as jest.Mock).mockReturnValueOnce(true); + + const originalState = mockTask.data.interaction.state; + const originalCallAssociatedDetails = mockTask.data.interaction.callAssociatedDetails; + const originalMediaType = mockTask.data.interaction.mediaType; + const originalOutboundType = mockTask.data.interaction.outboundType; + const originalWrapUpRequired = mockTask.data.wrapUpRequired; + + mockTask.data.interaction.state = 'new'; + mockTask.data.interaction.mediaType = MEDIA_CHANNEL.TELEPHONY; + mockTask.data.interaction.outboundType = 'OUTDIAL'; + mockTask.data.wrapUpRequired = false; + mockTask.data.interaction.callAssociatedDetails = { + ani: '+18005551234', + dn: '+14155559876', + customerName: 'Outdial Customer', + virtualTeamName: 'Outbound Team', + ronaTimeout: '30', + }; + + const result = extractTaskListItemData(mockTask, false, mockTask.data.agentId); + + expect(result.title).toBe('+14155559876'); + expect(result.acceptText).toBe('Ringing...'); + expect(result.declineText).toBeUndefined(); + expect(result.disableAccept).toBe(true); + + // Restore + mockTask.data.interaction.state = originalState; + mockTask.data.interaction.callAssociatedDetails = originalCallAssociatedDetails; + mockTask.data.interaction.mediaType = originalMediaType; + mockTask.data.interaction.outboundType = originalOutboundType; + mockTask.data.wrapUpRequired = originalWrapUpRequired; + }); + }); }); describe('isTaskSelectable', () => {