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