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 { 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 { 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 { await this.click(this.publishButton); await this.waitForNavigation(); } async saveDraft(): Promise { await this.click(this.draftButton); await this.waitForNavigation(); } async returnToDashboard(): Promise { await this.click(this.returnToDashboardLink); await this.waitForNavigation(); } async isFormVisible(): Promise { return await this.isVisible(this.eventTitleField) && await this.isVisible(this.eventDescriptionField); } }