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

163 lines
No EOL
7.2 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('Modify Event Test from My Events', () => {
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 from My Events Page', 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();
// Wait for success
await page.waitForLoadState('networkidle');
// Navigate to My Events page
await page.goto(`${STAGING_URL}/my-events/`);
await page.waitForLoadState('networkidle');
await page.screenshot({ path: 'test-results/screenshots/my-events-after-create.png' });
// Look for event links on My Events page
const eventLinks = page.locator('a.url');
const linkCount = await eventLinks.count();
console.log('Number of event links found:', linkCount);
if (linkCount > 0) {
// Get the first event link text
const firstEventTitle = await eventLinks.first().innerText();
console.log('First event title:', firstEventTitle);
// Click the first event
await eventLinks.first().click();
await page.waitForLoadState('networkidle');
const eventDetailUrl = page.url();
console.log('Event detail URL:', eventDetailUrl);
await page.screenshot({ path: 'test-results/screenshots/event-detail-from-my-events.png' });
// Look for an Edit button/link on the event detail page
const editLinks = page.locator('a:has-text("Edit")');
const editButton = page.locator('button:has-text("Edit")');
const modifyLink = page.locator('a:has-text("Modify")');
let foundEditOption = false;
if (await editLinks.count() > 0) {
console.log('Found Edit link');
await editLinks.first().click();
foundEditOption = true;
} else if (await editButton.count() > 0) {
console.log('Found Edit button');
await editButton.first().click();
foundEditOption = true;
} else if (await modifyLink.count() > 0) {
console.log('Found Modify link');
await modifyLink.first().click();
foundEditOption = true;
}
if (foundEditOption) {
await page.waitForLoadState('networkidle');
const modifyUrl = page.url();
console.log('Modify page URL:', modifyUrl);
await page.screenshot({ path: 'test-results/screenshots/modify-event-page-from-my-events.png' });
// Modify the event
const updatedEvent = {
...TEST_EVENTS.basicEvent,
title: 'Updated HVAC Training Session',
description: 'This training session has been updated with new content.'
};
await modifyEventPage.fillEventDetails(updatedEvent);
// Check for update button
if (await modifyEventPage.isUpdateButtonVisible()) {
console.log('Update button found, clicking it');
await modifyEventPage.updateEvent();
} else {
console.log('Update button not found, trying submit button');
await createEventPage.submitEvent();
}
await page.waitForLoadState('networkidle');
await page.screenshot({ path: 'test-results/screenshots/after-update-from-my-events.png' });
const afterUpdateUrl = page.url();
console.log('After update URL:', afterUpdateUrl);
} else {
console.log('No edit option found on event detail page');
// Try going back to My Events to look for edit option there
await page.goto(`${STAGING_URL}/my-events/`);
await page.waitForLoadState('networkidle');
// Look for edit links in the event list
const eventRows = page.locator('tr.community-events-event-row');
const rowCount = await eventRows.count();
console.log('Event rows found:', rowCount);
if (rowCount > 0) {
const firstRow = eventRows.first();
const editLinkInRow = firstRow.locator('a:has-text("Edit")');
if (await editLinkInRow.count() > 0) {
console.log('Found Edit link in event row');
await editLinkInRow.click();
await page.waitForLoadState('networkidle');
const editPageUrl = page.url();
console.log('Edit page URL from row:', editPageUrl);
await page.screenshot({ path: 'test-results/screenshots/edit-page-from-row.png' });
}
}
}
} else {
console.log('No event links found on My Events page');
// Check if events are in past events tab
const pastEventsTab = page.locator('a:has-text("PAST EVENTS")');
if (await pastEventsTab.count() > 0) {
await pastEventsTab.click();
await page.waitForLoadState('networkidle');
await page.screenshot({ path: 'test-results/screenshots/past-events-tab.png' });
}
}
});
});