upskill-event-manager/wordpress-dev/tests/e2e/debug-event-submission-errors.test.ts

132 lines
No EOL
5.7 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
import { CreateEventPage } from './pages/CreateEventPage';
import { TEST_USERS } from './data/test-users';
import { TEST_EVENTS } from './data/test-events';
// STAGING_URL is now imported from config
test.describe('Debug Event Submission Errors', () => {
let loginPage: LoginPage;
let dashboardPage: DashboardPage;
let createEventPage: CreateEventPage;
const trainer = TEST_USERS.trainer;
test.beforeEach(async ({ page }) => {
loginPage = new LoginPage(page);
dashboardPage = new DashboardPage(page);
createEventPage = new CreateEventPage(page);
// Set base URL and login
page.context().setDefaultNavigationTimeout(TIMEOUTS.navigation);
await page.goto(STAGING_URL);
await loginPage.navigateToLogin();
await loginPage.login(trainer.username, trainer.password);
});
test('Debug Event Submission with Console Logs', async ({ page }) => {
// Monitor console messages
page.on('console', message => {
console.log(`CONSOLE ${message.type()}: ${message.text()}`);
});
// Monitor network errors
page.on('requestfailed', request => {
console.log(`REQUEST FAILED: ${request.url()} - ${request.failure()?.errorText}`);
});
// Click create event button
await dashboardPage.clickCreateEvent();
await expect(page).toHaveURL(/.*manage-event/);
// Check for any error messages on the page
const errorMessages = await page.locator('.tribe-community-notice, .error, .warning, .notice').all();
if (errorMessages.length > 0) {
console.log('Found error/notice messages:');
for (const error of errorMessages) {
const text = await error.innerText();
console.log('- ', text);
}
}
// Fill event details
const eventData = TEST_EVENTS.basicEvent;
await createEventPage.fillEventDetails(eventData);
// Look for additional required fields by checking for required attributes
const requiredFields = await page.locator('input[required], select[required], textarea[required]').all();
console.log(`Found ${requiredFields.length} required fields`);
for (const field of requiredFields) {
const name = await field.getAttribute('name');
const id = await field.getAttribute('id');
const value = await field.inputValue().catch(() => field.textContent());
const type = await field.getAttribute('type');
console.log(`Required field: ${name || id} (${type}) = "${value}"`);
}
// Check for any hidden form fields that might be required
const hiddenFields = await page.locator('input[type="hidden"]').all();
console.log(`Found ${hiddenFields.length} hidden fields`);
for (const field of hiddenFields) {
const name = await field.getAttribute('name');
const value = await field.inputValue();
if (name && value) {
console.log(`Hidden field: ${name} = "${value}"`);
}
}
// Submit event
console.log('Submitting event...');
await createEventPage.submitEvent();
// Wait for response
await page.waitForLoadState('networkidle');
// Check if we're still on the same page
const currentUrl = page.url();
console.log('Current URL after submit:', currentUrl);
// Look for any error messages after submission
const postSubmitErrors = await page.locator('.tribe-community-notice, .error, .warning, .notice, .tribe-error').all();
if (postSubmitErrors.length > 0) {
console.log('Post-submit error/notice messages:');
for (const error of postSubmitErrors) {
const text = await error.innerText();
console.log('- ', text);
}
}
// Check specific form validation
await page.screenshot({ path: 'test-results/screenshots/after-submit-debug.png' });
// Try looking for community events specific elements
const communityElements = await page.locator('[class*="community"], [id*="community"]').all();
console.log(`Found ${communityElements.length} community-related elements`);
// Check if form is in editing mode vs new mode
const postIdField = await page.locator('input[name="community-event-id"], input[name="event_id"], input[name="post_ID"]').first();
if (await postIdField.count() > 0) {
const postId = await postIdField.inputValue();
console.log('Post ID field value:', postId);
}
// Look for any venue or organizer requirements
const venueField = await page.locator('input[name*="venue"], select[name*="venue"]').first();
const organizerField = await page.locator('input[name*="organizer"], select[name*="organizer"]').first();
if (await venueField.count() > 0) {
const venueValue = await venueField.inputValue().catch(() => venueField.textContent());
console.log('Venue field value:', venueValue);
}
if (await organizerField.count() > 0) {
const organizerValue = await organizerField.inputValue().catch(() => organizerField.textContent());
console.log('Organizer field value:', organizerValue);
}
});
});