upskill-event-manager/wordpress-dev/tests/e2e/test-modify-event.test.ts

116 lines
No EOL
4.7 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
import { CreateEventPage } from './pages/CreateEventPage';
import { EventSummaryPage } from './pages/EventSummaryPage';
import { ModifyEventPage } from './pages/ModifyEventPage';
import { TEST_USERS } from './data/test-users';
import { TEST_EVENTS } from './data/test-events';
// STAGING_URL is now imported from config
test.describe('Event Modification Test', () => {
let loginPage: LoginPage;
let dashboardPage: DashboardPage;
let createEventPage: CreateEventPage;
let eventSummaryPage: EventSummaryPage;
let modifyEventPage: ModifyEventPage;
const trainer = TEST_USERS.trainer;
test.beforeEach(async ({ page }) => {
loginPage = new LoginPage(page);
dashboardPage = new DashboardPage(page);
createEventPage = new CreateEventPage(page);
eventSummaryPage = new EventSummaryPage(page);
modifyEventPage = new ModifyEventPage(page);
// Set base URL and login
page.context().setDefaultNavigationTimeout(TIMEOUTS.navigation);
await page.goto(STAGING_URL);
await loginPage.navigateToLogin();
await loginPage.login(trainer.username, trainer.password);
});
test('Create and Modify Event', async ({ page }) => {
// First create an event
await dashboardPage.clickCreateEvent();
await expect(page).toHaveURL(/.*manage-event/);
// Fill event details
const eventData = TEST_EVENTS.basicEvent;
await createEventPage.fillEventDetails(eventData);
// Submit event
await createEventPage.submitEvent();
// Go back to dashboard
await page.goto(PATHS.dashboard);
await page.waitForLoadState('networkidle');
// Now get the event and click it
const eventCount = await dashboardPage.getEventCount();
expect(eventCount).toBeGreaterThan(0);
const eventRowData = await dashboardPage.getEventRowData(0);
await dashboardPage.clickEventName(eventRowData.name);
// Should be on event summary page
await expect(page).toHaveURL(/.*event-summary/);
// Take screenshot before editing
await page.screenshot({ path: 'test-results/screenshots/before-event-edit.png' });
// Click Edit Event
await eventSummaryPage.clickEditEvent();
// Check if we're redirected correctly
await page.waitForLoadState('networkidle');
const currentUrl = page.url();
console.log('After clicking Edit Event, URL is:', currentUrl);
// Take screenshot of modify page
await page.screenshot({ path: 'test-results/screenshots/modify-event-page.png' });
// If we reached the modify page, update the event
if (currentUrl.includes('modify-event') || currentUrl.includes('edit-event') || currentUrl.includes('manage-event')) {
// Modify event details
const updatedEvent = {
...TEST_EVENTS.basicEvent,
title: 'Updated HVAC Training',
description: 'Updated description for the training event.'
};
await modifyEventPage.fillEventDetails(updatedEvent);
// Take screenshot before updating
await page.screenshot({ path: 'test-results/screenshots/before-update-button.png' });
// Check if update button is visible
const updateButtonVisible = await modifyEventPage.isUpdateButtonVisible();
console.log('Update button visible:', updateButtonVisible);
if (updateButtonVisible) {
await modifyEventPage.updateEvent();
} else {
// Try the submit button approach
await createEventPage.submitEvent();
}
// Verify update success
await page.waitForLoadState('networkidle');
await page.screenshot({ path: 'test-results/screenshots/after-event-update.png' });
// Go back to dashboard to verify the update
await page.goto(PATHS.dashboard);
await page.waitForLoadState('networkidle');
const updatedEventData = await dashboardPage.getEventRowData(0);
console.log('Updated event data:', updatedEventData);
} else {
console.log('Did not reach modify event page. Current URL:', currentUrl);
throw new Error('Failed to navigate to modify event page');
}
});
});