This commit: - Creates comprehensive CERTIFICATE_TESTING_GUIDE.md to document certificate testing - Updates TRAINER_JOURNEY_TEST_SUMMARY.md to include certificate functionality - Updates main README.md with certificate testing information - Creates a centralized Config.ts utility for consistent configuration - Updates CertificatePage.ts and other page objects for consistency - Creates a guided manual test script (run-certificate-tests.sh) - Archives outdated certificate test files - Improves documentation organization and consistency
		
			
				
	
	
		
			110 lines
		
	
	
		
			No EOL
		
	
	
		
			4.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			No EOL
		
	
	
		
			4.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { test, expect } from '@playwright/test';
 | |
| import { CertificatePage } from './pages/CertificatePage';
 | |
| import { DashboardPage } from './pages/DashboardPage';
 | |
| import { LoginPage } from './pages/LoginPage';
 | |
| import { CertificateTestData } from './utils/CertificateTestData';
 | |
| import { Config } from './utils/Config';
 | |
| 
 | |
| test.describe('Certificate Generation Tests', () => {
 | |
|   test('should handle certificate generation for non-checked-in attendees', async ({ page, browser }) => {
 | |
|     // Set up test data
 | |
|     console.log('Setting up test data for non-checked-in certificate tests...');
 | |
|     
 | |
|     // Create a new browser context for data setup
 | |
|     const context = await browser.newContext();
 | |
|     const setupPage = await context.newPage();
 | |
|     
 | |
|     // Set up the test data
 | |
|     const testData = new CertificateTestData(setupPage);
 | |
|     await testData.loginAsTrainer();
 | |
|     
 | |
|     // Create a test event with attendees (some checked-in, some not)
 | |
|     const eventName = await testData.setupCertificateTestEvent();
 | |
|     expect(eventName).not.toBeNull();
 | |
|     
 | |
|     // Close the setup context
 | |
|     await context.close();
 | |
|     
 | |
|     console.log('Step 1: Logging in...');
 | |
|     const loginPage = new LoginPage(page);
 | |
|     await loginPage.navigate();
 | |
|     await loginPage.login(Config.testTrainer.username, Config.testTrainer.password);
 | |
|     
 | |
|     console.log('Step 2: Navigate to dashboard...');
 | |
|     const dashboardPage = new DashboardPage(page);
 | |
|     await dashboardPage.navigate();
 | |
|     
 | |
|     console.log('Step 3: Navigate to Generate Certificates...');
 | |
|     await dashboardPage.clickGenerateCertificates();
 | |
|     
 | |
|     console.log('Step 4: Generate certificates for non-checked-in attendees...');
 | |
|     const certificatePage = new CertificatePage(page);
 | |
|     
 | |
|     // Verify we're on the generate certificates page
 | |
|     const pageVisible = await certificatePage.isGenerateCertificatesPageVisible();
 | |
|     expect(pageVisible).toBeTruthy();
 | |
|     
 | |
|     // Select the test event
 | |
|     await certificatePage.selectEvent(eventName as string);
 | |
| 
 | |
|     // Get attendee counts
 | |
|     const totalAttendees = await certificatePage.getAttendeeCount();
 | |
|     const checkedInAttendees = await certificatePage.getCheckedInAttendeeCount();
 | |
|     const nonCheckedInAttendees = totalAttendees - checkedInAttendees;
 | |
|     
 | |
|     console.log(`Found ${totalAttendees} total attendees, ${nonCheckedInAttendees} non-checked-in`);
 | |
|     expect(totalAttendees).toBeGreaterThan(0);
 | |
|     expect(nonCheckedInAttendees).toBeGreaterThan(0);
 | |
|     
 | |
|     // Select only non-checked-in attendees
 | |
|     await certificatePage.selectNonCheckedInAttendees();
 | |
|     
 | |
|     // Generate certificates
 | |
|     await certificatePage.generateCertificates();
 | |
|     
 | |
|     // This test can have two possible outcomes based on implementation:
 | |
|     // 1. The system allows certificates for non-checked-in attendees
 | |
|     // 2. The system prevents certificates for non-checked-in attendees
 | |
|     
 | |
|     try {
 | |
|       // Check if there's an error message
 | |
|       const hasError = await certificatePage.isErrorMessageVisible();
 | |
|       const hasSuccess = await certificatePage.isSuccessMessageVisible();
 | |
|       
 | |
|       if (hasError) {
 | |
|         // Case 2: System prevents certificates for non-checked-in attendees
 | |
|         console.log('System prevents certificate generation for non-checked-in attendees');
 | |
|         const errorMessage = await certificatePage.getErrorMessage();
 | |
|         console.log(`Error message: ${errorMessage}`);
 | |
|         expect(errorMessage).toContain('checked-in');
 | |
|       } else if (hasSuccess) {
 | |
|         // Case 1: System allows certificates for non-checked-in attendees
 | |
|         console.log('System allows certificate generation for non-checked-in attendees');
 | |
|         const successMessage = await certificatePage.getSuccessMessage();
 | |
|         console.log(`Success message: ${successMessage}`);
 | |
|         
 | |
|         // Navigate to certificate reports to verify
 | |
|         await dashboardPage.navigate();
 | |
|         await dashboardPage.clickCertificateReports();
 | |
|         
 | |
|         // Filter certificates for the test event
 | |
|         await certificatePage.searchCertificates(eventName as string);
 | |
|         
 | |
|         // Check certificate count - should include the non-checked-in attendees
 | |
|         const certificateCount = await certificatePage.getCertificateCount();
 | |
|         console.log(`Found ${certificateCount} certificates for event (should include non-checked-in)`);
 | |
|         expect(certificateCount).toBeGreaterThanOrEqual(nonCheckedInAttendees);
 | |
|       } else {
 | |
|         // Unexpected case - neither success nor error
 | |
|         throw new Error('Neither success nor error message was displayed after certificate generation');
 | |
|       }
 | |
|     } catch (error) {
 | |
|       console.error('Error during certificate generation test:', error.message);
 | |
|       // Take a screenshot for debugging
 | |
|       await page.screenshot({ path: `${Config.screenshotPath}/error-non-checked-in-test.png` });
 | |
|       throw error;
 | |
|     }
 | |
|     
 | |
|     console.log('Certificate generation test for non-checked-in attendees completed successfully');
 | |
|   });
 | |
| }); |