127 lines
No EOL
5.2 KiB
TypeScript
127 lines
No EOL
5.2 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { STAGING_CONFIG } from '../../playwright.config';
|
|
|
|
test.describe('Complete Event Creation', () => {
|
|
test('should create event with all required fields', async ({ page }) => {
|
|
// Login as test_trainer
|
|
await page.goto(`https://${STAGING_CONFIG.url}/wp-login.php`);
|
|
await page.fill('#user_login', 'test_trainer');
|
|
await page.fill('#user_pass', 'Test123!');
|
|
await page.click('#wp-submit');
|
|
|
|
// Wait for navigation
|
|
await page.waitForTimeout(3000);
|
|
console.log('Logged in successfully');
|
|
|
|
// Navigate to manage-event page
|
|
await page.goto(`https://${STAGING_CONFIG.url}/manage-event/`);
|
|
console.log('Navigated to manage-event page');
|
|
|
|
// Wait for form to load
|
|
await page.waitForSelector('input[name="EventTitle"]', { timeout: 10000 });
|
|
|
|
// Fill event title
|
|
const eventTitle = `HVAC Training Event ${Date.now()}`;
|
|
await page.fill('input[name="EventTitle"]', eventTitle);
|
|
console.log('Filled event title:', eventTitle);
|
|
|
|
// Fill event description - using the visible TinyMCE editor
|
|
const descriptionFrame = page.frameLocator('#EventDescription_ifr');
|
|
if (await descriptionFrame.locator('body').isVisible().catch(() => false)) {
|
|
await descriptionFrame.locator('body').click();
|
|
await descriptionFrame.locator('body').fill('This is a comprehensive HVAC training event covering installation, maintenance, and troubleshooting.');
|
|
console.log('Filled description in TinyMCE');
|
|
} else {
|
|
// Try text mode if iframe not visible
|
|
const textarea = page.locator('textarea#EventDescription');
|
|
if (await textarea.isVisible()) {
|
|
await textarea.fill('This is a comprehensive HVAC training event covering installation, maintenance, and troubleshooting.');
|
|
console.log('Filled description in textarea');
|
|
}
|
|
}
|
|
|
|
// Fill date and time
|
|
const tomorrow = new Date();
|
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
const dateStr = `${(tomorrow.getMonth() + 1).toString().padStart(2, '0')}/${tomorrow.getDate().toString().padStart(2, '0')}/${tomorrow.getFullYear()}`;
|
|
|
|
await page.fill('input[name="EventStartDate"]', dateStr);
|
|
await page.fill('input[name="EventEndDate"]', dateStr);
|
|
console.log('Filled dates:', dateStr);
|
|
|
|
// Fill time (if visible)
|
|
if (await page.locator('input[name="EventStartTime"]').isVisible()) {
|
|
await page.fill('input[name="EventStartTime"]', '9:00am');
|
|
await page.fill('input[name="EventEndTime"]', '5:00pm');
|
|
console.log('Filled times');
|
|
}
|
|
|
|
// Upload image if button is visible
|
|
const uploadButton = page.locator('button:has-text("CHOOSE IMAGE")');
|
|
if (await uploadButton.isVisible()) {
|
|
await uploadButton.click();
|
|
await page.waitForTimeout(1000);
|
|
// Click "Upload files" tab if media library opens
|
|
const uploadTab = page.locator('a:has-text("Upload files")');
|
|
if (await uploadTab.isVisible()) {
|
|
await uploadTab.click();
|
|
}
|
|
// Close media library for now
|
|
const closeButton = page.locator('.media-modal-close');
|
|
if (await closeButton.isVisible()) {
|
|
await closeButton.click();
|
|
}
|
|
}
|
|
|
|
// Fill venue details
|
|
const venueName = page.locator('input[name="VenueName"], input[name="Venue[Venue]"]').first();
|
|
if (await venueName.isVisible()) {
|
|
await venueName.fill('HVAC Training Center');
|
|
console.log('Filled venue name');
|
|
}
|
|
|
|
// Fill organizer details
|
|
const organizerName = page.locator('input[name="OrganizerName"], input[name="Organizer[Organizer]"]').first();
|
|
if (await organizerName.isVisible()) {
|
|
await organizerName.fill('Test Organizer');
|
|
console.log('Filled organizer name');
|
|
}
|
|
|
|
// Fill event website (if required)
|
|
const eventWebsite = page.locator('input[name="EventURL"]');
|
|
if (await eventWebsite.isVisible()) {
|
|
await eventWebsite.fill('https://example.com/hvac-training');
|
|
console.log('Filled event website');
|
|
}
|
|
|
|
// Click the final submit button
|
|
const submitButton = page.locator('button:has-text("SUBMIT EVENT")').last();
|
|
await submitButton.scrollIntoViewIfNeeded();
|
|
await submitButton.click();
|
|
console.log('Clicked SUBMIT EVENT button');
|
|
|
|
// Wait for response
|
|
await page.waitForTimeout(5000);
|
|
|
|
// Check for success
|
|
const currentUrl = page.url();
|
|
const hasSuccess = await page.locator('.tribe-success-msg, .success, .notice-success').isVisible().catch(() => false);
|
|
const hasErrors = await page.locator('.tribe-error, .error, .notice-error').isVisible().catch(() => false);
|
|
|
|
console.log('Current URL:', currentUrl);
|
|
console.log('Has success:', hasSuccess);
|
|
console.log('Has errors:', hasErrors);
|
|
|
|
// Get any error messages
|
|
if (hasErrors) {
|
|
const errorTexts = await page.locator('.tribe-error, .error, .notice-error').allTextContents();
|
|
console.log('Error messages:', errorTexts);
|
|
}
|
|
|
|
// Check if we're redirected to event page or list
|
|
const isEventCreated = currentUrl.includes('/event/') || currentUrl.includes('/my-events/') || hasSuccess;
|
|
|
|
// Assert event was created
|
|
expect(isEventCreated).toBeTruthy();
|
|
});
|
|
}); |