upskill-event-manager/wordpress-dev/tests/e2e/trainer-journey-harmonized.test.ts
bengizmo 8d44245ec9 feat: Harmonize Playwright testing capabilities
- Create consistent test structure with latest Playwright version (1.52.0)
- Implement trainer-journey-harmonized.test.ts that works with updated Playwright
- Fix package.json to ensure consistent dependencies
- Add certificate-basic.spec.ts that avoids framework compatibility issues
- Create run-advanced-tests.sh script with enhanced configuration options
- Add comprehensive documentation for the harmonized testing approach

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-21 10:33:48 -03:00

157 lines
No EOL
5.6 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
import { CreateEventPage } from './pages/CreateEventPage';
import { EventSummaryPage } from './pages/EventSummaryPage';
import { ModifyEventPage } from './pages/ModifyEventPage';
import { CertificatePage } from './pages/CertificatePage';
import { Config } from './utils/Config';
/**
* @description Comprehensive trainer journey test that works with latest Playwright
* @tag @trainer-journey @certificates
*/
test('Complete trainer journey with certificate functionality', async ({ page }) => {
// Step 1: Login
const loginPage = new LoginPage(page);
await loginPage.navigate();
await loginPage.login(Config.testTrainer.username, Config.testTrainer.password);
// Verify successful login
await expect(page).toHaveURL(/hvac-dashboard/);
// Step 2: Access dashboard
const dashboardPage = new DashboardPage(page);
await dashboardPage.navigate();
await expect(dashboardPage.isOnDashboard()).resolves.toBeTruthy();
// Step 3: Create a new event
await dashboardPage.clickCreateEvent();
const createEventPage = new CreateEventPage(page);
// Generate unique event name with timestamp
const timestamp = new Date().getTime();
const eventTitle = `Journey Test Event ${timestamp}`;
// Fill required event details
await createEventPage.fillEventTitle(eventTitle);
await createEventPage.fillEventDescription(`Test event for trainer journey ${timestamp}`);
// Set dates (30 days in future)
const futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 30);
await createEventPage.setStartDate(futureDate.toLocaleDateString('en-US'));
await createEventPage.setEndDate(futureDate.toLocaleDateString('en-US'));
await createEventPage.setStartTime('10:00 AM');
await createEventPage.setEndTime('4:00 PM');
// Add ticket information
await createEventPage.addTicket('General Admission', '100');
// Submit the form
const eventId = await createEventPage.submitForm();
expect(eventId).toBeTruthy();
// Step 4: Verify event summary
const eventSummaryPage = new EventSummaryPage(page);
expect(await eventSummaryPage.isOnEventSummary()).toBeTruthy();
expect(await eventSummaryPage.getEventTitle()).toBe(eventTitle);
// Step 5: Create test attendees (at least 5)
await page.waitForTimeout(1000); // Brief pause to ensure page is ready
// Add test attendees via API for efficiency
for (let i = 1; i <= 5; i++) {
const attendeeData = {
name: `Test Attendee ${i}`,
email: `test${i}@example.com`,
checkedIn: i <= 3 // Mark first 3 as checked in
};
// Use API endpoint to add attendee (implementation will depend on your API)
await page.evaluate(async (data) => {
const response = await fetch('/wp-json/hvac-ce/v1/add-test-attendee', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
event_id: document.querySelector('[data-event-id]')?.getAttribute('data-event-id'),
...data
}),
});
return await response.json();
}, attendeeData);
}
// Step 6: Return to dashboard
await dashboardPage.navigate();
await expect(dashboardPage.isOnDashboard()).resolves.toBeTruthy();
// Step 7: Generate certificates
await dashboardPage.clickGenerateCertificates();
const certificatePage = new CertificatePage(page);
expect(await certificatePage.isGenerateCertificatesPageVisible()).toBeTruthy();
// Select our test event
await certificatePage.selectEvent(eventTitle);
// Get attendee counts
const totalAttendees = await certificatePage.getAttendeeCount();
const checkedInAttendees = await certificatePage.getCheckedInAttendeeCount();
expect(totalAttendees).toBeGreaterThanOrEqual(5);
expect(checkedInAttendees).toBeGreaterThanOrEqual(3);
// Generate certificates for checked-in attendees
await certificatePage.selectCheckedInAttendees();
await certificatePage.generateCertificates();
// Verify success
expect(await certificatePage.isSuccessMessageVisible()).toBeTruthy();
// Step 8: Manage certificates via reports
await dashboardPage.navigate();
await dashboardPage.clickCertificateReports();
expect(await certificatePage.isCertificateReportsPageVisible()).toBeTruthy();
// Filter certificates by event
await certificatePage.searchCertificates(eventTitle);
// Verify certificates exist
const certificateCount = await certificatePage.getCertificateCount();
expect(certificateCount).toBeGreaterThanOrEqual(3); // At least the checked-in attendees
// Test attendee filtering
const searchTerm = 'Test Attendee 1';
await certificatePage.searchAttendee(searchTerm);
// Verify filtered results
const filteredCount = await certificatePage.getCertificateCount();
expect(filteredCount).toBeGreaterThanOrEqual(1);
// Test certificate preview if available
if (filteredCount > 0) {
await certificatePage.viewCertificate(0);
// Verify preview is visible
const preview = page.locator('.hvac-certificate-preview');
await expect(preview).toBeVisible();
// Close preview
await certificatePage.closePreview();
}
// Step 9: Return to dashboard to verify event statistics
await dashboardPage.navigate();
// Check event statistics
const totalEvents = await dashboardPage.getEventCount();
expect(totalEvents).toBeGreaterThan(0);
// Success - full journey completed
console.log('Trainer journey with certificates completed successfully');
});