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();
|
|
});
|
|
}); |