- 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>
157 lines
No EOL
5.6 KiB
TypeScript
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');
|
|
}); |