Some checks failed
Admin | Playwright Tests / Admin | Playwright Tests | Shard 1 Of 6 (push) Failing after 37s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 2 Of 6 (push) Failing after 7s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 4 Of 6 (push) Failing after 7s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 6 Of 6 (push) Failing after 6s
Linting Tests / PHP 8.3 test on ubuntu-latest (push) Failing after 5s
CI / PHP 8.3 test on ubuntu-latest (push) Failing after 6s
Skills Consistency / validate-skills (push) Successful in 10s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 3 Of 6 (push) Failing after 7s
Admin | Playwright Tests / Admin | Playwright Tests | Shard 5 Of 6 (push) Failing after 6s
115 lines
4.5 KiB
TypeScript
115 lines
4.5 KiB
TypeScript
import { Page, Locator, expect } from '@playwright/test';
|
|
import { generateFullName, generateLastName, generateRandomNumericString } from '../../utils/faker';
|
|
import { SettingsPage } from '../SettingsPage';
|
|
import { eventdata, EventData } from './EventsPage';
|
|
|
|
export type CampaignData = {
|
|
name: string;
|
|
subject: string;
|
|
emailTemplateId: string;
|
|
event: EventData;
|
|
active: number;
|
|
}
|
|
export const campaignData: CampaignData = {
|
|
name: generateFullName(),
|
|
subject: generateLastName(),
|
|
emailTemplateId: generateRandomNumericString(),
|
|
event: eventdata,
|
|
active: 1,
|
|
}
|
|
|
|
export class CampaignsPage extends SettingsPage {
|
|
readonly page: Page;
|
|
|
|
// Campaign locators
|
|
readonly createCampaignButton: Locator;
|
|
readonly campaignNameInput: Locator;
|
|
readonly campaignSubjectInput: Locator;
|
|
readonly emailTemplateDropdown: Locator;
|
|
readonly eventDropdown: Locator;
|
|
readonly activeToggle: Locator;
|
|
readonly saveCampaignButton: Locator;
|
|
readonly firstCampaignEditButton: Locator;
|
|
readonly firstCampaignDeleteButton: Locator;
|
|
readonly confirmDeleteButton: Locator;
|
|
readonly successCreatedMessage: Locator;
|
|
readonly successUpdatedMessage: Locator;
|
|
readonly successDeletedMessage: Locator;
|
|
|
|
constructor(page: Page) {
|
|
super(page);
|
|
this.page = page;
|
|
|
|
this.createCampaignButton = page.getByRole('button', { name: 'Create Campaigns' })
|
|
this.campaignNameInput = page.locator('input[name="name"]');
|
|
this.campaignSubjectInput = page.getByRole('textbox', { name: 'Subject *' });
|
|
this.emailTemplateDropdown = page.locator('#marketing_template_id');
|
|
this.eventDropdown = page.getByLabel('Event');
|
|
this.activeToggle = page.locator('.peer.h-5');
|
|
this.saveCampaignButton = page.getByRole('button', { name: 'Save Activity' });
|
|
|
|
this.firstCampaignEditButton = page.locator('.row > div:nth-child(6) > a').first();
|
|
this.firstCampaignDeleteButton = page.locator('xpath=(//span[contains(@class, "icon-delete")])[1]');
|
|
this.confirmDeleteButton = page.getByRole('button', { name: 'Agree', exact: true });
|
|
|
|
this.successCreatedMessage = page.getByText(/(created) successfully\./).first();
|
|
this.successUpdatedMessage = page.getByText(/(updated) successfully\./).first();
|
|
this.successDeletedMessage = page.getByText(/(deleted) successfully\./).first();
|
|
}
|
|
|
|
async gotoCampaigns() {
|
|
await this.page.goto("admin/settings/marketing/campaigns");
|
|
}
|
|
|
|
async createCampaign(data: CampaignData) {
|
|
await this.createCampaignButton.click();
|
|
await this.campaignNameInput.fill(data.name);
|
|
await this.campaignSubjectInput.fill(data.subject);
|
|
await this.campaignSubjectInput.click(); // For validation if needed
|
|
await this.campaignSubjectInput.fill(data.subject);
|
|
|
|
await this.eventDropdown.selectOption({ label: data.event.name });
|
|
await this.emailTemplateDropdown.selectOption({ value: "1" });
|
|
|
|
|
|
if (data.active) {
|
|
// Only toggle if not already active, this might require check logic per app specifics
|
|
await this.activeToggle.click();
|
|
}
|
|
|
|
await this.saveCampaignButton.click();
|
|
await expect(this.successCreatedMessage).toBeVisible();
|
|
await this.searchByName(data.name);
|
|
await expect(this.page.getByText(data.name).first()).toBeVisible();
|
|
}
|
|
|
|
async editCampaign(data: CampaignData) {
|
|
await this.firstCampaignEditButton.click();
|
|
await this.campaignNameInput.fill(data.name);
|
|
await this.campaignSubjectInput.fill(data.subject);
|
|
await this.campaignSubjectInput.click(); // For validation if needed
|
|
await this.campaignSubjectInput.fill(data.subject);
|
|
|
|
await this.eventDropdown.selectOption({ label: data.event.name });
|
|
await this.emailTemplateDropdown.selectOption({ value: "1" });
|
|
|
|
|
|
if (data.active) {
|
|
// Only toggle if not already active, this might require check logic per app specifics
|
|
await this.activeToggle.click();
|
|
}
|
|
|
|
await this.saveCampaignButton.click();
|
|
await expect(this.successUpdatedMessage).toBeVisible();
|
|
await this.searchInputExact.fill(data.name);
|
|
await this.page.keyboard.press('Enter');
|
|
await expect(this.page.getByText(data.name).first()).toBeVisible();
|
|
}
|
|
|
|
async deleteCampaign() {
|
|
await this.firstCampaignDeleteButton.click();
|
|
await this.confirmDeleteButton.click();
|
|
await expect(this.successDeletedMessage).toBeVisible();
|
|
}
|
|
}
|