172 lines
		
	
	
		
			No EOL
		
	
	
		
			6.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			No EOL
		
	
	
		
			6.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { test, expect } from '@playwright/test';
 | |
| import { STAGING_CONFIG } from '../../playwright.config';
 | |
| 
 | |
| test.describe('Event Creation with Cache Clear', () => {
 | |
|   test('should create community event after clearing Breeze cache', async ({ page }) => {
 | |
|     // Login as organizer role
 | |
|     await page.goto(`https://${STAGING_CONFIG.url}/wp-login.php`);
 | |
|     await page.fill('#user_login', 'organizer');
 | |
|     await page.fill('#user_pass', 'Organizer123!');
 | |
|     await page.click('#wp-submit');
 | |
| 
 | |
|     // Wait for dashboard
 | |
|     await page.waitForURL('**/wp-admin/**');
 | |
| 
 | |
|     // Navigate to Breeze settings to clear cache
 | |
|     console.log('Navigating to Breeze cache settings...');
 | |
|     await page.goto(`https://${STAGING_CONFIG.url}/wp-admin/options-general.php?page=breeze`);
 | |
|     
 | |
|     // Look for Purge Cache button
 | |
|     const purgeCacheButton = page.locator('button:has-text("Purge Cache"), a:has-text("Purge Cache")').first();
 | |
|     if (await purgeCacheButton.isVisible()) {
 | |
|       await purgeCacheButton.click();
 | |
|       console.log('Cleared Breeze cache');
 | |
|       await page.waitForTimeout(2000); // Wait for cache to clear
 | |
|     } else {
 | |
|       console.log('Purge cache button not found, trying alternate method');
 | |
|       
 | |
|       // Try to clear cache via direct URL
 | |
|       await page.goto(`https://${STAGING_CONFIG.url}/wp-admin/admin-ajax.php?action=breeze_purge_varnish`);
 | |
|       await page.waitForTimeout(1000);
 | |
|       
 | |
|       // Also try to clear object cache
 | |
|       await page.goto(`https://${STAGING_CONFIG.url}/wp-admin/admin-ajax.php?action=breeze_purge_cache`);
 | |
|       await page.waitForTimeout(1000);
 | |
|     }
 | |
| 
 | |
|     // Navigate to community events
 | |
|     await page.goto(`https://${STAGING_CONFIG.url}/my-events`);
 | |
|     
 | |
|     // Click on Submit Event button
 | |
|     await page.click('a:has-text("Submit Event")');
 | |
|     await page.waitForURL('**/community/add**');
 | |
| 
 | |
|     // Fill in the event details
 | |
|     const title = `HVAC Test Event ${Date.now()}`;
 | |
|     await page.fill('#post_title', title);
 | |
| 
 | |
|     // Handle description field
 | |
|     console.log('Filling description field...');
 | |
|     
 | |
|     // First, try to fill the textarea directly
 | |
|     const textarea = page.locator('#tcepostcontent, textarea[name="tcepostcontent"]').first();
 | |
|     if (await textarea.isVisible()) {
 | |
|       await textarea.fill('Test description for event creation after cache clear');
 | |
|       console.log('Filled textarea directly');
 | |
|     }
 | |
| 
 | |
|     // Also try text mode
 | |
|     const textTab = page.locator('.wp-switch-editor.switch-text, a:has-text("Text")').first();
 | |
|     if (await textTab.isVisible()) {
 | |
|       await textTab.click();
 | |
|       await page.waitForTimeout(500);
 | |
|       
 | |
|       const textArea = page.locator('#tcepostcontent').first();
 | |
|       await textArea.fill('Test description for event creation after cache clear');
 | |
|       console.log('Filled text mode textarea');
 | |
|     }
 | |
| 
 | |
|     // Set up JavaScript evaluation to sync content
 | |
|     await page.evaluate((desc) => {
 | |
|       const textarea = document.querySelector('#tcepostcontent');
 | |
|       if (textarea) {
 | |
|         textarea.value = desc;
 | |
|         textarea.dispatchEvent(new Event('change', { bubbles: true }));
 | |
|         textarea.dispatchEvent(new Event('input', { bubbles: true }));
 | |
|       }
 | |
|       
 | |
|       // Also try to set TinyMCE content if available
 | |
|       if (typeof tinymce !== 'undefined' && tinymce.activeEditor) {
 | |
|         tinymce.activeEditor.setContent(desc);
 | |
|         tinymce.activeEditor.save();
 | |
|       }
 | |
|     }, 'Test description for event creation after cache clear');
 | |
| 
 | |
|     // Set date/time fields
 | |
|     const tomorrow = new Date();
 | |
|     tomorrow.setDate(tomorrow.getDate() + 1);
 | |
|     
 | |
|     const dateStr = tomorrow.toISOString().split('T')[0];
 | |
|     await page.fill('#EventStartDate', dateStr);
 | |
|     await page.fill('#EventEndDate', dateStr);
 | |
|     await page.fill('#EventStartTime', '10:00 AM');
 | |
|     await page.fill('#EventEndTime', '12:00 PM');
 | |
| 
 | |
|     // Fill venue information
 | |
|     const venueName = page.locator('input[name="venue[Venue][]"]').first();
 | |
|     if (await venueName.isVisible()) {
 | |
|       await venueName.fill('HVAC Training Center');
 | |
|     }
 | |
| 
 | |
|     const venueAddress = page.locator('input[name="venue[Address][]"]').first();
 | |
|     if (await venueAddress.isVisible()) {
 | |
|       await venueAddress.fill('123 Main Street');
 | |
|     }
 | |
| 
 | |
|     const venueCity = page.locator('input[name="venue[City][]"]').first();
 | |
|     if (await venueCity.isVisible()) {
 | |
|       await venueCity.fill('Atlanta');
 | |
|     }
 | |
| 
 | |
|     const venueState = page.locator('select[name="venue[State][]"], input[name="venue[State][]"]').first();
 | |
|     if (await venueState.isVisible()) {
 | |
|       if (venueState.tagName() === 'SELECT') {
 | |
|         await venueState.selectOption('GA');
 | |
|       } else {
 | |
|         await venueState.fill('GA');
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     const venueZip = page.locator('input[name="venue[Zip][]"]').first();
 | |
|     if (await venueZip.isVisible()) {
 | |
|       await venueZip.fill('30301');
 | |
|     }
 | |
| 
 | |
|     // Fill organizer information
 | |
|     const organizerName = page.locator('input[name="organizer[Organizer][]"]').first();
 | |
|     if (await organizerName.isVisible()) {
 | |
|       await organizerName.fill('Test Organizer');
 | |
|     }
 | |
| 
 | |
|     const organizerEmail = page.locator('input[name="organizer[Email][]"]').first();
 | |
|     if (await organizerEmail.isVisible()) {
 | |
|       await organizerEmail.fill('organizer@test.com');
 | |
|     }
 | |
| 
 | |
|     // Monitor requests and console errors
 | |
|     const consoleErrors: string[] = [];
 | |
|     page.on('console', msg => {
 | |
|       if (msg.type() === 'error') {
 | |
|         consoleErrors.push(msg.text());
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     // Submit the form
 | |
|     const submitButton = await page.locator('input[type="submit"][name="community-event"]').first();
 | |
|     const currentUrl = page.url();
 | |
|     
 | |
|     await submitButton.click();
 | |
|     console.log('Clicked submit button');
 | |
| 
 | |
|     // Wait for navigation or error message
 | |
|     await page.waitForTimeout(5000);
 | |
| 
 | |
|     // Check for success
 | |
|     const newUrl = page.url();
 | |
|     const urlChanged = newUrl !== currentUrl;
 | |
|     const hasErrors = consoleErrors.length > 0;
 | |
|     const hasSuccessMessage = await page.locator('.tribe-success-msg, .success, .updated').isVisible();
 | |
| 
 | |
|     console.log(`URL changed: ${urlChanged}`);
 | |
|     console.log(`Has errors: ${hasErrors}`);
 | |
|     console.log(`Console errors:`, consoleErrors);
 | |
|     console.log(`Has success: ${hasSuccessMessage}`);
 | |
| 
 | |
|     // Check for validation errors
 | |
|     const validationErrors = await page.locator('.error, .tribe-error, .tribe-events-error').allTextContents();
 | |
|     console.log('Validation errors:', validationErrors);
 | |
| 
 | |
|     // Assert event was created
 | |
|     expect(urlChanged || hasSuccessMessage).toBeTruthy();
 | |
|   });
 | |
| }); |