149 lines
		
	
	
		
			No EOL
		
	
	
		
			5.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			No EOL
		
	
	
		
			5.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { test, expect } from '@playwright/test';
 | |
| import { STAGING_CONFIG } from '../../playwright.config';
 | |
| 
 | |
| test.describe('Event Creation via Manage Event', () => {
 | |
|   test('should create event via manage-event page', 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.waitForTimeout(2000);
 | |
|     
 | |
|     // Look for form fields
 | |
|     const fields = {
 | |
|       title: ['#post_title', 'input[name="title"]', 'input[name="EventTitle"]', '#tribe-event-title'],
 | |
|       description: ['#tcepostcontent', 'textarea[name="tcepostcontent"]', '#content', 'textarea[name="content"]'],
 | |
|       startDate: ['#EventStartDate', 'input[name="EventStartDate"]', 'input[name="event[start_date]"]'],
 | |
|       endDate: ['#EventEndDate', 'input[name="EventEndDate"]', 'input[name="event[end_date]"]']
 | |
|     };
 | |
|     
 | |
|     // Try to find and fill title
 | |
|     for (const selector of fields.title) {
 | |
|       try {
 | |
|         const element = page.locator(selector).first();
 | |
|         if (await element.isVisible({ timeout: 1000 })) {
 | |
|           await element.fill(`HVAC Training Event ${Date.now()}`);
 | |
|           console.log(`Filled title using selector: ${selector}`);
 | |
|           break;
 | |
|         }
 | |
|       } catch (e) {
 | |
|         console.log(`Selector ${selector} not found`);
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     // Try to find and fill description
 | |
|     for (const selector of fields.description) {
 | |
|       try {
 | |
|         const element = page.locator(selector).first();
 | |
|         if (await element.isVisible({ timeout: 1000 })) {
 | |
|           await element.fill('This is a test event created via automated testing');
 | |
|           console.log(`Filled description using selector: ${selector}`);
 | |
|           break;
 | |
|         }
 | |
|       } catch (e) {
 | |
|         console.log(`Selector ${selector} not found`);
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     // Try to find and fill dates
 | |
|     const tomorrow = new Date();
 | |
|     tomorrow.setDate(tomorrow.getDate() + 1);
 | |
|     const dateStr = tomorrow.toISOString().split('T')[0];
 | |
|     
 | |
|     for (const selector of fields.startDate) {
 | |
|       try {
 | |
|         const element = page.locator(selector).first();
 | |
|         if (await element.isVisible({ timeout: 1000 })) {
 | |
|           await element.fill(dateStr);
 | |
|           console.log(`Filled start date using selector: ${selector}`);
 | |
|           break;
 | |
|         }
 | |
|       } catch (e) {
 | |
|         console.log(`Selector ${selector} not found`);
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     for (const selector of fields.endDate) {
 | |
|       try {
 | |
|         const element = page.locator(selector).first();
 | |
|         if (await element.isVisible({ timeout: 1000 })) {
 | |
|           await element.fill(dateStr);
 | |
|           console.log(`Filled end date using selector: ${selector}`);
 | |
|           break;
 | |
|         }
 | |
|       } catch (e) {
 | |
|         console.log(`Selector ${selector} not found`);
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     // Look for submit button
 | |
|     const submitSelectors = [
 | |
|       'input[type="submit"][name="community-event"]',
 | |
|       'button[type="submit"]',
 | |
|       'input[type="submit"][value*="Submit"]',
 | |
|       'input[type="submit"][value*="Publish"]',
 | |
|       'button:has-text("Submit")',
 | |
|       'button:has-text("Publish")',
 | |
|       'input[type="submit"]'
 | |
|     ];
 | |
|     
 | |
|     let submitted = false;
 | |
|     for (const selector of submitSelectors) {
 | |
|       try {
 | |
|         const button = page.locator(selector).first();
 | |
|         if (await button.isVisible({ timeout: 1000 })) {
 | |
|           const value = await button.getAttribute('value') || await button.textContent();
 | |
|           console.log(`Found submit button: ${selector} with text/value: ${value}`);
 | |
|           
 | |
|           const beforeUrl = page.url();
 | |
|           await button.click();
 | |
|           console.log('Clicked submit button');
 | |
|           
 | |
|           // Wait for response
 | |
|           await page.waitForTimeout(5000);
 | |
|           
 | |
|           const afterUrl = page.url();
 | |
|           if (beforeUrl !== afterUrl) {
 | |
|             console.log(`Navigation occurred: ${beforeUrl} -> ${afterUrl}`);
 | |
|             submitted = true;
 | |
|             break;
 | |
|           }
 | |
|         }
 | |
|       } catch (e) {
 | |
|         console.log(`Submit button ${selector} not found`);
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     // Check for success messages
 | |
|     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('Has success message:', hasSuccess);
 | |
|     console.log('Has error message:', hasErrors);
 | |
|     
 | |
|     // Get any messages
 | |
|     if (hasErrors) {
 | |
|       const errorTexts = await page.locator('.tribe-error, .error, .notice-error').allTextContents();
 | |
|       console.log('Error messages:', errorTexts);
 | |
|     }
 | |
|     
 | |
|     if (hasSuccess) {
 | |
|       const successTexts = await page.locator('.tribe-success-msg, .success, .notice-success').allTextContents();
 | |
|       console.log('Success messages:', successTexts);
 | |
|     }
 | |
|     
 | |
|     // Assert event was created
 | |
|     expect(submitted || hasSuccess).toBeTruthy();
 | |
|   });
 | |
| }); |