upskill-event-manager/wordpress-dev/tests/e2e/pages/CreateEventPage.ts
Ben Reed 04dcc32919 feat(testing): Implement comprehensive trainer journey test suite with Page Object Model
- Created Page Object Model structure for all trainer-facing pages
- Implemented complete test coverage for trainer journey steps 1-8
- Added centralized test data management with test users and events
- Updated run-tests.sh with --trainer-journey option for easy execution
- Enhanced documentation with test setup, usage, and troubleshooting guides
- Created verification scripts to ensure proper test environment setup
- Prepared framework for Phase 2/3 features (email, check-in, certificates)

This implementation provides a solid foundation for testing the complete trainer user journey and can be easily extended as new features are deployed.
2025-05-18 15:42:00 -03:00

70 lines
No EOL
2.5 KiB
TypeScript

import { Page } from '@playwright/test';
import { BasePage } from './BasePage';
export class CreateEventPage extends BasePage {
private readonly eventTitleField = '#title';
private readonly eventDescriptionField = 'textarea[name="content"]';
private readonly startDateField = '#EventStartDate';
private readonly startTimeField = '#EventStartTime';
private readonly endDateField = '#EventEndDate';
private readonly endTimeField = '#EventEndTime';
private readonly venueSelector = '#venue';
private readonly organizerSelector = '#organizer';
private readonly publishButton = 'input[name="community-event"][value="Publish"]';
private readonly draftButton = 'input[name="community-event"][value="Draft"]';
private readonly returnToDashboardLink = 'a:has-text("Return to Dashboard")';
constructor(page: Page) {
super(page);
}
async navigateToCreateEvent(): Promise<void> {
await this.navigate('/create-event/');
}
async fillEventDetails(eventData: {
title: string;
description: string;
startDate: string;
startTime: string;
endDate: string;
endTime: string;
venue?: string;
organizer?: string;
}): Promise<void> {
await this.fill(this.eventTitleField, eventData.title);
await this.fill(this.eventDescriptionField, eventData.description);
await this.fill(this.startDateField, eventData.startDate);
await this.fill(this.startTimeField, eventData.startTime);
await this.fill(this.endDateField, eventData.endDate);
await this.fill(this.endTimeField, eventData.endTime);
if (eventData.venue) {
await this.page.selectOption(this.venueSelector, eventData.venue);
}
if (eventData.organizer) {
await this.page.selectOption(this.organizerSelector, eventData.organizer);
}
}
async publishEvent(): Promise<void> {
await this.click(this.publishButton);
await this.waitForNavigation();
}
async saveDraft(): Promise<void> {
await this.click(this.draftButton);
await this.waitForNavigation();
}
async returnToDashboard(): Promise<void> {
await this.click(this.returnToDashboardLink);
await this.waitForNavigation();
}
async isFormVisible(): Promise<boolean> {
return await this.isVisible(this.eventTitleField) &&
await this.isVisible(this.eventDescriptionField);
}
}