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

150 lines
No EOL
5.3 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
// STAGING_URL is now imported from config
test.describe('Working Event Creation', () => {
test('should successfully create an event with all required fields', async ({ page }) => {
// Login
await page.goto(PATHS.login);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForURL('**/hvac-dashboard/');
// Navigate to create event
const createEventBtn = page.locator('a:has-text("CREATE EVENT"), a:has-text("Create Event")').first();
await createEventBtn.click();
await page.waitForLoadState('networkidle');
// Fill all required fields
const eventTitle = `HVAC Training Event ${Date.now()}`;
await page.fill('input[name="post_title"]', eventTitle);
console.log('Filled title:', eventTitle);
// Fill description - REQUIRED
// First try to switch to text editor mode
const textTab = page.locator('#content-text, #content-tmce, .switch-text');
if (await textTab.isVisible()) {
await textTab.click();
await page.waitForTimeout(500);
}
const description = `This is a comprehensive HVAC training event covering installation, maintenance, and troubleshooting techniques. Created on ${new Date().toLocaleString()}`;
// Try multiple selectors for description
const descriptionFilled = await page.evaluate((desc) => {
// Try direct textarea
const textarea = document.querySelector('textarea[name="post_content"], textarea#content');
if (textarea) {
(textarea as HTMLTextAreaElement).value = desc;
return true;
}
// Try via jQuery if available
if (typeof jQuery !== 'undefined') {
const $textarea = jQuery('#content, textarea[name="post_content"]');
if ($textarea.length) {
$textarea.val(desc);
return true;
}
}
return false;
}, description);
if (!descriptionFilled) {
// Try the iframe approach
const iframe = page.frameLocator('iframe[id*="content"], iframe[title*="editor"]').first();
await iframe.locator('body').fill(description);
}
console.log('Filled description');
// Fill date and time fields
const today = new Date();
const dateStr = `${(today.getMonth() + 1).toString().padStart(2, '0')}/${today.getDate().toString().padStart(2, '0')}/${today.getFullYear()}`;
await page.fill('input#EventStartDate', dateStr);
await page.fill('input#EventEndDate', dateStr);
await page.fill('input#EventStartTime', '10:00');
await page.fill('input#EventEndTime', '12:00');
console.log('Filled dates and times');
// Check if organizer/venue dropdowns exist and have options
const organizerSelect = page.locator('select[name="organizer"]');
if (await organizerSelect.isVisible()) {
const options = await organizerSelect.locator('option').count();
if (options > 1) {
await organizerSelect.selectOption({ index: 1 });
console.log('Selected organizer');
}
}
const venueSelect = page.locator('select[name="venue"]');
if (await venueSelect.isVisible()) {
const options = await venueSelect.locator('option').count();
if (options > 1) {
await venueSelect.selectOption({ index: 1 });
console.log('Selected venue');
}
}
// Scroll to submit button
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
await page.waitForTimeout(1000);
// Submit the form
const submitButton = page.locator('input[type="submit"][value="Submit Event"]');
// Listen for navigation
const navigationPromise = page.waitForNavigation({
timeout: 15000,
waitUntil: 'networkidle'
}).catch(() => null);
await submitButton.click();
console.log('Clicked submit button');
// Wait for response
const navigated = await navigationPromise;
await page.waitForTimeout(3000);
// Take screenshot
await page.screenshot({ path: 'test-results/working-event-creation-result.png', fullPage: true });
// Check for success
const currentUrl = page.url();
console.log('Current URL:', currentUrl);
// Look for success indicators
const successMessages = [
'.updated',
'.notice-success',
'.tribe-success',
'.success-message',
'.message.updated'
];
let successFound = false;
for (const selector of successMessages) {
if (await page.locator(selector).isVisible()) {
const text = await page.locator(selector).textContent();
console.log('Success message found:', text);
successFound = true;
break;
}
}
// Check if we were redirected to a success page or the event page
const urlChanged = !currentUrl.includes('/manage-event/');
const hasEventInUrl = currentUrl.includes('/event/') || currentUrl.includes('/tribe_events/');
console.log('Success found:', successFound);
console.log('URL changed:', urlChanged);
console.log('Has event in URL:', hasEventInUrl);
// Success criteria: success message OR URL change OR event URL
expect(successFound || urlChanged || hasEventInUrl).toBeTruthy();
});
});