Files
upstream-mirror 135ffdb085
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
snapshot of https://github.com/krayin/laravel-crm.git (2.2, 2026-09-18; blobs > 131072B omitted)
2026-09-18 04:37:41 +05:00

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();
}
}