145 lines
No EOL
5.7 KiB
TypeScript
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);
|
|
});
|
|
}); |