upskill-event-manager/wordpress-dev/tests/e2e/test-event-with-venue-organizer.test.ts

145 lines
No EOL
5.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 { TEST_USERS } from './data/test-users';
import { TEST_EVENTS } from './data/test-events';
// STAGING_URL is now imported from config
test.describe('Test Event Creation with Venue and Organizer', () => {
let loginPage: LoginPage;
let dashboardPage: DashboardPage;
let createEventPage: CreateEventPage;
const trainer = TEST_USERS.trainer;
test.beforeEach(async ({ page }) => {
loginPage = new LoginPage(page);
dashboardPage = new DashboardPage(page);
createEventPage = new CreateEventPage(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 Event with Venue and Organizer Details', async ({ page }) => {
// Navigate to create event
await dashboardPage.clickCreateEvent();
await expect(page).toHaveURL(/.*manage-event/);
// Fill event details
const eventData = {
...TEST_EVENTS.basicEvent,
title: `Test Event ${Date.now()}`
};
await createEventPage.fillEventDetails(eventData);
// Now handle venue and organizer
// For Venue - try to fill in the create new venue fields
const venueSection = page.locator('.venue');
// Fill venue details if fields are available
const venueName = page.locator('input[name="venue[Venue]"]');
if (await venueName.count() > 0) {
await venueName.fill('Test Training Center');
}
const venueAddress = page.locator('input[name="venue[Address]"]');
if (await venueAddress.count() > 0) {
await venueAddress.fill('123 Test Street');
}
const venueCity = page.locator('input[name="venue[City]"]');
if (await venueCity.count() > 0) {
await venueCity.fill('Test City');
}
const venueState = page.locator('input[name="venue[State]"], input[name="venue[Province]"]');
if (await venueState.count() > 0) {
await venueState.first().fill('CA');
}
const venueZip = page.locator('input[name="venue[Zip]"]');
if (await venueZip.count() > 0) {
await venueZip.fill('12345');
}
// For Organizer - try to fill in the create new organizer fields
const organizerSection = page.locator('.organizer');
const organizerName = page.locator('input[name="organizer[Organizer]"]');
if (await organizerName.count() > 0) {
await organizerName.fill('Test Training Company');
}
const organizerPhone = page.locator('input[name="organizer[Phone]"]');
if (await organizerPhone.count() > 0) {
await organizerPhone.fill('555-0123');
}
const organizerEmail = page.locator('input[name="organizer[Email]"]');
if (await organizerEmail.count() > 0) {
await organizerEmail.fill('trainer@example.com');
}
const organizerWebsite = page.locator('input[name="organizer[Website]"]');
if (await organizerWebsite.count() > 0) {
await organizerWebsite.fill('https://example.com');
}
// Take a screenshot before submission
await page.screenshot({ path: 'test-results/screenshots/event-with-venue-organizer.png' });
// Submit event
await createEventPage.submitEvent();
// Wait for response
await page.waitForLoadState('networkidle');
const currentUrl = page.url();
console.log('After submit URL:', currentUrl);
// Check if the submission was successful
const viewEventsButton = page.locator('text="VIEW YOUR SUBMITTED EVENTS"');
if (await viewEventsButton.isVisible()) {
console.log('Event created successfully!');
await viewEventsButton.click();
await page.waitForLoadState('networkidle');
const myEventsUrl = page.url();
console.log('My Events URL:', myEventsUrl);
// Check if the event appears in the 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 title = await firstRow.locator('a.url').innerText();
console.log('Event title:', title);
}
} else {
// Check for errors
const errors = await page.locator('.tribe-community-notice, .error, .warning').all();
for (const error of errors) {
const text = await error.innerText();
console.log('Error:', text);
}
await page.screenshot({ path: 'test-results/screenshots/event-submission-failed.png' });
}
// Finally check the dashboard
await page.goto(PATHS.dashboard);
await page.waitForLoadState('networkidle');
const dashboardEventCount = await dashboardPage.getEventCount();
console.log('Dashboard event count:', dashboardEventCount);
});
});