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
		
			
				
	
	
		
			123 lines
		
	
	
		
			No EOL
		
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			No EOL
		
	
	
		
			4.8 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';
 | |
| 
 | |
| // Certificate Management Tests
 | |
| test('Certificate management functionality', async ({ page, browser }) => {
 | |
|   // Set up test data and generate certificates first
 | |
|   console.log('Setting up test data for certificate management 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
 | |
|   const eventName = await testData.setupCertificateTestEvent();
 | |
|   expect(eventName).not.toBeNull();
 | |
|   
 | |
|   // Navigate to Generate Certificates page
 | |
|   const setupCertPage = new CertificatePage(setupPage);
 | |
|   await setupCertPage.navigateToGenerateCertificates();
 | |
|   
 | |
|   // Select the event and generate certificates for all attendees
 | |
|   await setupCertPage.selectEvent(eventName as string);
 | |
|   await setupCertPage.selectAllAttendees();
 | |
|   await setupCertPage.generateCertificates();
 | |
|   
 | |
|   // Close the setup context
 | |
|   await context.close();
 | |
|   
 | |
|   // Start the actual test
 | |
|   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 Certificate Reports...');
 | |
|   await dashboardPage.clickCertificateReports();
 | |
|   
 | |
|   console.log('Step 4: Test certificate management functionality...');
 | |
|   const certificatePage = new CertificatePage(page);
 | |
|   
 | |
|   try {
 | |
|     // Verify we're on the certificate reports page
 | |
|     const pageVisible = await certificatePage.isCertificateReportsPageVisible();
 | |
|     expect(pageVisible).toBeTruthy();
 | |
|     
 | |
|     // Search for certificates from our test event
 | |
|     await certificatePage.searchCertificates(eventName as string);
 | |
|     
 | |
|     // Verify certificates exist
 | |
|     const certificateCount = await certificatePage.getCertificateCount();
 | |
|     console.log(`Found ${certificateCount} certificates for the test event`);
 | |
|     expect(certificateCount).toBeGreaterThan(0);
 | |
|     
 | |
|     if (certificateCount > 0) {
 | |
|       // Test viewing a certificate
 | |
|       console.log('Step 4a: Testing certificate viewing...');
 | |
|       await certificatePage.viewCertificate(0);
 | |
|       await certificatePage.closePreview();
 | |
|       
 | |
|       // Test emailing a certificate
 | |
|       console.log('Step 4b: Testing certificate emailing...');
 | |
|       try {
 | |
|         await certificatePage.emailCertificate(0);
 | |
|         // Check for success message
 | |
|         const hasSuccessMessage = await certificatePage.isSuccessMessageVisible();
 | |
|         if (hasSuccessMessage) {
 | |
|           const successMessage = await certificatePage.getSuccessMessage();
 | |
|           console.log(`Email success message: ${successMessage}`);
 | |
|         }
 | |
|       } catch (error) {
 | |
|         console.log(`Email functionality unavailable or failed: ${error.message}`);
 | |
|         // Continue with the test - email might not be implemented
 | |
|       }
 | |
|       
 | |
|       // Test revoking a certificate if we have more than one
 | |
|       if (certificateCount > 1) {
 | |
|         console.log('Step 4c: Testing certificate revocation...');
 | |
|         await certificatePage.revokeCertificate(1);
 | |
|         
 | |
|         // Refresh the page to see the updated status
 | |
|         await certificatePage.navigateToCertificateReports();
 | |
|         await certificatePage.searchCertificates(eventName as string);
 | |
|         
 | |
|         // The second certificate should now be revoked
 | |
|         // Add verification if the UI exposes revocation status
 | |
|       }
 | |
|       
 | |
|       // Test pagination if available
 | |
|       console.log('Step 4d: Testing pagination if available...');
 | |
|       const hasPagination = await certificatePage.isPaginationVisible();
 | |
|       if (hasPagination) {
 | |
|         console.log('Pagination is available, testing navigation...');
 | |
|         // Try to navigate to next page
 | |
|         const couldGoNext = await certificatePage.goToNextPage();
 | |
|         if (couldGoNext) {
 | |
|           // Go back to previous page
 | |
|           await certificatePage.goToPreviousPage();
 | |
|         }
 | |
|       } else {
 | |
|         console.log('Pagination not available (not enough certificates)');
 | |
|       }
 | |
|     }
 | |
|   } catch (error) {
 | |
|     console.error('Error during certificate management test:', error.message);
 | |
|     // Take a screenshot for debugging
 | |
|     await page.screenshot({ path: `${Config.screenshotPath}/error-certificate-management.png` });
 | |
|     throw error;
 | |
|   }
 | |
|   
 | |
|   console.log('Certificate management test completed successfully');
 | |
| }); |