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