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