upskill-event-manager/wordpress-dev/tests/e2e/event-creation-tec.test.ts
bengizmo 057b0e8212 test: Update E2E tests for TEC Community Events form
- Update debug-event-creation.test.ts with comprehensive TEC form detection
- Create event-creation-tec.test.ts for TEC-specific event workflows
- Add trainer-journey-complete.test.ts for full trainer workflow testing
- Add tec-shortcode-check.test.ts to verify shortcode processing
- Create event-creation-integration.test.ts for end-to-end integration
- Update all tests to use TEC form selectors and handle editor types
- Add proper error handling for when TEC shortcode shows as raw text

These tests support the fix that removed the HVAC shortcode override,
allowing The Events Calendar Community Events to handle the form properly.

Co-Authored-By: Ben Reed <ben@tealmaker.com>
2025-05-30 09:53:41 -06:00

241 lines
No EOL
9.6 KiB
TypeScript

import { test, expect } from './fixtures/auth';
import { CommonActions } from './utils/common-actions';
/**
* Event Creation Tests for The Events Calendar Community Events
*
* These tests work with the actual TEC Community Events form structure
* after removing the custom HVAC override.
*/
test.describe('Event Creation - TEC Community Events', () => {
test('Create a new event using TEC form', async ({ authenticatedPage: page }) => {
test.setTimeout(60000); // 1 minute timeout
const actions = new CommonActions(page);
// Navigate to Create Event page
await actions.navigateAndWait('/manage-event/');
await actions.screenshot('tec-create-event-page');
// Wait for the form to be fully loaded
await page.waitForLoadState('networkidle');
// TEC Community Events typically uses these form selectors
// The form ID varies but commonly includes 'tribe-community-events'
const formSelectors = {
form: 'form#tribe-community-events, form.tribe-community-events-form, form[id*="community-events"]',
title: 'input[name="post_title"], input#post_title',
content: 'textarea[name="post_content"], textarea#tcepostcontent, #tcepostcontent_ifr', // May use TinyMCE
startDate: 'input[name="EventStartDate"], input#EventStartDate',
startTime: 'input[name="EventStartTime"], input#EventStartTime',
endDate: 'input[name="EventEndDate"], input#EventEndDate',
endTime: 'input[name="EventEndTime"], input#EventEndTime',
venue: 'input[name="venue[Venue]"], input#venue-venue',
address: 'input[name="venue[Address]"], input#venue-address',
city: 'input[name="venue[City]"], input#venue-city',
submitButton: 'input[type="submit"][name="community-event"], button[type="submit"], input.button-primary[type="submit"]'
};
// Wait for form to be present
const form = page.locator(formSelectors.form);
await expect(form).toBeVisible({ timeout: 10000 });
// Create unique event data
const eventData = actions.generateTestData('Event');
const eventDetails = {
title: eventData.title,
description: `${eventData.description}\n\nThis event covers advanced HVAC techniques including system optimization and troubleshooting.`,
startDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000), // 7 days from now
venue: 'HVAC Training Center',
address: '123 Main Street',
city: 'Austin'
};
// Fill in event title
const titleField = page.locator(formSelectors.title).first();
await expect(titleField).toBeVisible();
await titleField.fill(eventDetails.title);
// Fill in event description
// Check if using TinyMCE or regular textarea
const tinyMCE = page.frameLocator('#tcepostcontent_ifr');
const tinyMCEBody = tinyMCE.locator('body');
if (await tinyMCEBody.count() > 0) {
// TinyMCE editor
await tinyMCEBody.fill(eventDetails.description);
} else {
// Regular textarea
const contentField = page.locator(formSelectors.content).first();
await contentField.fill(eventDetails.description);
}
// Fill in event dates
const startDateField = page.locator(formSelectors.startDate).first();
if (await startDateField.count() > 0) {
await startDateField.fill(eventDetails.startDate.toISOString().split('T')[0]);
// Time fields if separate
const startTimeField = page.locator(formSelectors.startTime).first();
if (await startTimeField.count() > 0) {
await startTimeField.fill('09:00 AM');
}
// End date/time
const endDateField = page.locator(formSelectors.endDate).first();
if (await endDateField.count() > 0) {
await endDateField.fill(eventDetails.startDate.toISOString().split('T')[0]);
const endTimeField = page.locator(formSelectors.endTime).first();
if (await endTimeField.count() > 0) {
await endTimeField.fill('05:00 PM');
}
}
}
// Fill in venue information
const venueField = page.locator(formSelectors.venue).first();
if (await venueField.count() > 0) {
await venueField.fill(eventDetails.venue);
const addressField = page.locator(formSelectors.address).first();
if (await addressField.count() > 0) {
await addressField.fill(eventDetails.address);
}
const cityField = page.locator(formSelectors.city).first();
if (await cityField.count() > 0) {
await cityField.fill(eventDetails.city);
}
}
await actions.screenshot('tec-form-filled');
// Submit the form
const submitButton = page.locator(formSelectors.submitButton).first();
await expect(submitButton).toBeVisible();
// Click submit and wait for navigation or success message
await Promise.all([
page.waitForURL(/\/(event-submitted|my-events|hvac-dashboard|manage-event)/, { timeout: 30000 }).catch(() => {}),
page.waitForSelector('.tribe-success, .updated, .notice-success', { timeout: 30000 }).catch(() => {}),
submitButton.click()
]);
await actions.screenshot('tec-after-submit');
// Check for success indicators
const successMessage = page.locator('.tribe-success, .updated, .notice-success').first();
const hasSuccessMessage = await successMessage.count() > 0;
if (hasSuccessMessage) {
console.log('Success message found:', await successMessage.textContent());
}
// Navigate to dashboard to verify event appears
await actions.navigateAndWait('/hvac-dashboard/');
// Look for the event in the events table
const eventsTable = page.locator('.hvac-events-table, table').first();
await expect(eventsTable).toBeVisible();
// Check if our event appears
const eventRow = page.locator(`tr:has-text("${eventDetails.title}")`).first();
const eventFound = await eventRow.count() > 0;
if (eventFound) {
console.log('✓ Event found in dashboard!');
await actions.screenshot('tec-event-in-dashboard');
} else {
console.log('✗ Event not found in dashboard yet (may need approval)');
// Check if in pending/draft status
const allEvents = await page.locator('.hvac-events-table tbody tr').allTextContents();
console.log('All events in table:', allEvents);
}
expect(eventFound || hasSuccessMessage).toBe(true);
});
test('Edit an existing event', async ({ authenticatedPage: page }) => {
test.setTimeout(60000);
const actions = new CommonActions(page);
// First, navigate to dashboard to find an event to edit
await actions.navigateAndWait('/hvac-dashboard/');
// Find the first event with an Edit link
const editLink = page.locator('a:has-text("Edit")').first();
const hasEditableEvent = await editLink.count() > 0;
if (!hasEditableEvent) {
console.log('No editable events found, skipping edit test');
test.skip();
return;
}
// Click the edit link
await editLink.click();
await page.waitForLoadState('networkidle');
await actions.screenshot('tec-edit-event-page');
// Wait for form to load
const titleField = page.locator('input[name="post_title"], input#post_title').first();
await expect(titleField).toBeVisible();
// Get current title
const currentTitle = await titleField.inputValue();
console.log('Current event title:', currentTitle);
// Update the title
const updatedTitle = `${currentTitle} - Updated ${new Date().toLocaleTimeString()}`;
await titleField.fill(updatedTitle);
// Update description if possible
const tinyMCE = page.frameLocator('#tcepostcontent_ifr');
const tinyMCEBody = tinyMCE.locator('body');
if (await tinyMCEBody.count() > 0) {
const currentContent = await tinyMCEBody.textContent();
await tinyMCEBody.fill(`${currentContent}\n\nUpdated: ${new Date().toLocaleString()}`);
} else {
const contentField = page.locator('textarea[name="post_content"], textarea#tcepostcontent').first();
if (await contentField.count() > 0) {
const currentContent = await contentField.inputValue();
await contentField.fill(`${currentContent}\n\nUpdated: ${new Date().toLocaleString()}`);
}
}
await actions.screenshot('tec-edit-form-updated');
// Submit the changes
const submitButton = page.locator('input[type="submit"][name="community-event"], button[type="submit"], input.button-primary[type="submit"]').first();
await expect(submitButton).toBeVisible();
await Promise.all([
page.waitForURL(/\/(event-updated|my-events|hvac-dashboard|manage-event)/, { timeout: 30000 }).catch(() => {}),
page.waitForSelector('.tribe-success, .updated, .notice-success', { timeout: 30000 }).catch(() => {}),
submitButton.click()
]);
await actions.screenshot('tec-after-edit-submit');
// Verify the update
const successMessage = page.locator('.tribe-success, .updated, .notice-success').first();
const hasSuccessMessage = await successMessage.count() > 0;
if (hasSuccessMessage) {
console.log('Edit success message found:', await successMessage.textContent());
}
// Go back to dashboard to verify the change
await actions.navigateAndWait('/hvac-dashboard/');
// Look for the updated event
const updatedEventRow = page.locator(`tr:has-text("${updatedTitle}")`).first();
const updateFound = await updatedEventRow.count() > 0;
if (updateFound) {
console.log('✓ Updated event found in dashboard!');
await actions.screenshot('tec-updated-event-in-dashboard');
}
expect(updateFound || hasSuccessMessage).toBe(true);
});
});