Skip to content
Open
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
32 changes: 23 additions & 9 deletions playwright/Utils/campaignPreviewUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,18 +298,19 @@ export async function removeCampaignPreviewTask(

/**
* Stubs the SDK's campaign preview action methods (acceptPreviewContact, skipPreviewContact,
* removePreviewContact) on window['store'].cc so that test assertions can check whether
* the action was invoked and control whether it resolves or rejects.
* removePreviewContact) on window['store'].cc and the task's end() method (used by cancel)
* so that test assertions can check whether the action was invoked and control whether it
* resolves or rejects.
*
* @param page - Playwright Page object
* @param failAction - If set, that action will reject with an error (for error dialog tests)
*/
export async function stubCampaignPreviewActions(
page: Page,
failAction?: 'accept' | 'skip' | 'remove'
failAction?: 'accept' | 'skip' | 'remove' | 'cancel'
): Promise<void> {
await page.evaluate(
({failAction}) => {
({failAction, campaignInteractionId}) => {
const store = (window as unknown as Record<string, unknown>)['store'] as Record<string, unknown>;
if (!store) return;
const cc = store.cc as Record<string, (...args: unknown[]) => unknown>;
Expand All @@ -320,6 +321,7 @@ export async function stubCampaignPreviewActions(
accept: 0,
skip: 0,
remove: 0,
cancel: 0,
});

cc.acceptPreviewContact = () => {
Expand All @@ -345,25 +347,37 @@ export async function stubCampaignPreviewActions(
}
return Promise.resolve({});
};

// Stub the task's end() method (used by cancelPreviewContact) if cancel failure is needed
if (failAction === 'cancel') {
const taskList = store.taskList as Record<string, Record<string, unknown>>;
const task = taskList[campaignInteractionId];
if (task) {
task.end = () => {
tracker.cancel++;
return Promise.reject(new Error('Cancel failed (stubbed)'));
};
}
}
},
{failAction: failAction ?? null}
{failAction: failAction ?? null, campaignInteractionId: CAMPAIGN_INTERACTION_ID}
);
}

/**
* Returns the number of times each campaign action was called.
*
* @param page - Playwright Page object
* @returns Call counts for accept, skip, and remove
* @returns Call counts for accept, skip, remove, and cancel
*/
export async function getCampaignActionCounts(
page: Page
): Promise<{accept: number; skip: number; remove: number}> {
): Promise<{accept: number; skip: number; remove: number; cancel: number}> {
return page.evaluate(() => {
const tracker = (window as unknown as Record<string, unknown>)['__campaignPreviewCalls'] as
| {accept: number; skip: number; remove: number}
| {accept: number; skip: number; remove: number; cancel: number}
| undefined;
return tracker ?? {accept: 0, skip: 0, remove: 0};
return tracker ?? {accept: 0, skip: 0, remove: 0, cancel: 0};
});
}

Expand Down
24 changes: 24 additions & 0 deletions playwright/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,30 @@ export const RONA_OPTIONS = {

export type RonaOption = (typeof RONA_OPTIONS)[keyof typeof RONA_OPTIONS];

// Campaign Preview test IDs — must match data-testid values in CampaignTask components
export const CAMPAIGN_TEST_IDS = {
TASK: 'campaign-task',
LIST_ITEM: 'campaign-task-list-item',
TITLE: 'campaign-task-title',
PHONE: 'campaign-task-phone',
HANDLE_TIME: 'campaign-task-handle-time',
ACTIONS: 'campaign-task-actions',
ACCEPT_BUTTON: 'campaign-task-accept-button',
CONNECTING_BUTTON: 'campaign-task-connecting-button',
SKIP_REMOVE: 'campaign-task-skip-remove',
SKIP_BUTTON: 'campaign-task-skip-button',
REMOVE_BUTTON: 'campaign-task-remove-button',
EXPANDED: 'campaign-task-expanded',
CANCEL_BUTTON: 'campaign-task-cancel-button',
POPOVER: 'campaign-task-popover',
COUNTDOWN: 'campaign-countdown',
GLOBAL_VARIABLES_PANEL: 'global-variables-panel',
ERROR_DIALOG: 'campaign-error-dialog',
ERROR_DIALOG_TITLE: 'campaign-error-dialog-title',
ERROR_DIALOG_MESSAGE: 'campaign-error-dialog-message',
ERROR_DIALOG_OK: 'campaign-error-dialog-ok-button',
};

// Test Data Constants
export const TEST_DATA = {
CHAT_NAME: 'Playwright Test',
Expand Down
11 changes: 11 additions & 0 deletions playwright/test-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,15 @@ export const USER_SETS = {
ENTRY_POINT: env.PW_ENTRY_POINT9,
TEST_SUITE: 'multiparty-conference-set-9-tests.spec.ts',
},
SET_10: {
AGENTS: {
AGENT1: {username: 'user37', extension: '1037', agentName: 'User37 Agent37'},
AGENT2: {username: 'user38', extension: '1038', agentName: 'User38 Agent38'},
},
QUEUE_NAME: 'Queue e2e 10',
CHAT_URL: `${env.PW_CHAT_URL}-e2e-10.html`,
EMAIL_ENTRY_POINT: `${env.PW_SANDBOX}.e2e10@gmail.com`,
ENTRY_POINT: env.PW_ENTRY_POINT10,
TEST_SUITE: 'campaign-preview-tests.spec.ts',
},
};
8 changes: 8 additions & 0 deletions playwright/test-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,14 @@ export class TestManager {
);
}

async setupForCampaignPreview(browser: Browser): Promise<void> {
await this.setup(browser, {
needsAgent1: true,
agent1LoginMode: LOGIN_MODE.DESKTOP,
enableConsoleLogging: true,
});
}

async setupForMultipartyConference(browser: Browser) {
await this.setup(browser, {
needsAgent1: true,
Expand Down
Loading
Loading