- Fix Playwright version conflicts in package.json - Create standalone Node.js certificate testing script - Improve test reliability by avoiding framework issues - Test certificate generation and report pages - Implement filter testing for attendee search - Add detailed logging for certificate test results
		
			
				
	
	
		
			205 lines
		
	
	
		
			No EOL
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			No EOL
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable file
		
	
	
	
	
| const { chromium } = require('playwright');
 | |
| 
 | |
| // Constants
 | |
| const STAGING_URL = 'https://wordpress-974670-5399585.cloudwaysapps.com';
 | |
| const LOGIN_URL = `${STAGING_URL}/community-login/`;
 | |
| const DASHBOARD_URL = `${STAGING_URL}/hvac-dashboard/`;
 | |
| const USERNAME = 'test_trainer';
 | |
| const PASSWORD = 'Test123!';
 | |
| 
 | |
| // Main function to run tests
 | |
| async function runCertificateTests() {
 | |
|   console.log('Starting certificate tests...');
 | |
|   
 | |
|   // Launch browser
 | |
|   const browser = await chromium.launch({ headless: false });
 | |
|   const context = await browser.newContext({
 | |
|     viewport: { width: 1280, height: 720 }
 | |
|   });
 | |
|   const page = await context.newPage();
 | |
|   
 | |
|   try {
 | |
|     // Login
 | |
|     console.log('Logging in...');
 | |
|     await page.goto(LOGIN_URL);
 | |
|     await page.fill('#user_login', USERNAME);
 | |
|     await page.fill('#user_pass', PASSWORD);
 | |
|     await page.click('#wp-submit');
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Verify login successful
 | |
|     if (!page.url().includes('hvac-dashboard')) {
 | |
|       throw new Error('Login failed');
 | |
|     }
 | |
|     console.log('Login successful');
 | |
|     
 | |
|     // Test 1: Navigate to Generate Certificates page
 | |
|     console.log('\nTest 1: Navigating to Generate Certificates page...');
 | |
|     await testGenerateCertificatesNavigation(page);
 | |
|     
 | |
|     // Test 2: Navigate to Certificate Reports page
 | |
|     console.log('\nTest 2: Navigating to Certificate Reports page...');
 | |
|     await testCertificateReportsNavigation(page);
 | |
|     
 | |
|     // Test 3: Test certificate filtering
 | |
|     console.log('\nTest 3: Testing certificate filtering...');
 | |
|     await testCertificateFiltering(page);
 | |
|     
 | |
|     console.log('\nAll tests completed successfully!');
 | |
|   } catch (error) {
 | |
|     console.error(`Test failed: ${error.message}`);
 | |
|   } finally {
 | |
|     // Close browser
 | |
|     await browser.close();
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Test navigation to Generate Certificates page
 | |
| async function testGenerateCertificatesNavigation(page) {
 | |
|   // Navigate to dashboard first
 | |
|   await page.goto(DASHBOARD_URL);
 | |
|   await page.waitForLoadState('networkidle');
 | |
|   
 | |
|   // Look for Generate Certificates link
 | |
|   const generateLink = page.locator('a:has-text("Generate Certificates")');
 | |
|   if (await generateLink.isVisible()) {
 | |
|     await generateLink.click();
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Check page title
 | |
|     const title = await page.title();
 | |
|     console.log(`Page title: ${title}`);
 | |
|     
 | |
|     // Check for event dropdown
 | |
|     const eventDropdown = page.locator('#event_id');
 | |
|     if (await eventDropdown.isVisible()) {
 | |
|       console.log('Event dropdown found');
 | |
|       
 | |
|       // Count options
 | |
|       const optionCount = await page.locator('#event_id option').count();
 | |
|       console.log(`Event options: ${optionCount}`);
 | |
|       
 | |
|       // If we have options, select the first one
 | |
|       if (optionCount > 1) {
 | |
|         await eventDropdown.selectOption({ index: 1 });
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Get the selected event name
 | |
|         const selectedEventName = await page.locator('#event_id option:checked').textContent();
 | |
|         console.log(`Selected event: ${selectedEventName}`);
 | |
|       }
 | |
|     } else {
 | |
|       console.log('Event dropdown not found');
 | |
|     }
 | |
|     
 | |
|     console.log('Generate Certificates page navigation test passed!');
 | |
|     return true;
 | |
|   } else {
 | |
|     console.log('Generate Certificates link not found, skipping test');
 | |
|     return false;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Test navigation to Certificate Reports page
 | |
| async function testCertificateReportsNavigation(page) {
 | |
|   // Navigate to dashboard first
 | |
|   await page.goto(DASHBOARD_URL);
 | |
|   await page.waitForLoadState('networkidle');
 | |
|   
 | |
|   // Look for Certificate Reports link
 | |
|   const reportsLink = page.locator('a:has-text("Certificate Reports")');
 | |
|   if (await reportsLink.isVisible()) {
 | |
|     await reportsLink.click();
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Check page title
 | |
|     const title = await page.title();
 | |
|     console.log(`Page title: ${title}`);
 | |
|     
 | |
|     // Check for filter form
 | |
|     const filterForm = page.locator('form.hvac-certificate-filters');
 | |
|     if (await filterForm.isVisible()) {
 | |
|       console.log('Certificate filter form found');
 | |
|     } else {
 | |
|       console.log('Certificate filter form not found');
 | |
|     }
 | |
|     
 | |
|     console.log('Certificate Reports page navigation test passed!');
 | |
|     return true;
 | |
|   } else {
 | |
|     console.log('Certificate Reports link not found, skipping test');
 | |
|     return false;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Test certificate filtering
 | |
| async function testCertificateFiltering(page) {
 | |
|   // Navigate to Certificate Reports page
 | |
|   await page.goto(`${STAGING_URL}/certificate-reports/`);
 | |
|   await page.waitForLoadState('networkidle');
 | |
|   
 | |
|   // Check for filter form
 | |
|   const filterForm = page.locator('form.hvac-certificate-filters');
 | |
|   if (await filterForm.isVisible()) {
 | |
|     // Check if event filter exists
 | |
|     const eventFilter = page.locator('#filter_event');
 | |
|     if (await eventFilter.isVisible()) {
 | |
|       console.log('Event filter found');
 | |
|       
 | |
|       // Count options
 | |
|       const optionCount = await page.locator('#filter_event option').count();
 | |
|       console.log(`Event filter options: ${optionCount}`);
 | |
|       
 | |
|       // If we have options, select the first one
 | |
|       if (optionCount > 1) {
 | |
|         await eventFilter.selectOption({ index: 1 });
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     // Check if attendee search exists
 | |
|     const attendeeSearch = page.locator('#search_attendee');
 | |
|     if (await attendeeSearch.isVisible()) {
 | |
|       console.log('Attendee search found');
 | |
|       
 | |
|       // Try a simple search
 | |
|       await attendeeSearch.fill('test');
 | |
|       
 | |
|       // Look for filter button
 | |
|       const filterButton = page.locator('button[type="submit"]');
 | |
|       if (await filterButton.isVisible()) {
 | |
|         await filterButton.click();
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         console.log('Filtered for "test"');
 | |
|         
 | |
|         // Get certificate count
 | |
|         const certificateItems = page.locator('.hvac-certificate-item');
 | |
|         const certificateCount = await certificateItems.count();
 | |
|         console.log(`Found ${certificateCount} certificates with filter "test"`);
 | |
|         
 | |
|         // Check for reset button
 | |
|         const resetButton = page.locator('button[type="reset"]');
 | |
|         if (await resetButton.isVisible()) {
 | |
|           await resetButton.click();
 | |
|           await page.waitForLoadState('networkidle');
 | |
|           console.log('Reset filters');
 | |
|           
 | |
|           // Get certificate count after reset
 | |
|           const resetCertificateCount = await certificateItems.count();
 | |
|           console.log(`Found ${resetCertificateCount} certificates after reset`);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     console.log('Certificate filtering test completed!');
 | |
|     return true;
 | |
|   } else {
 | |
|     console.log('Certificate filter form not found, skipping test');
 | |
|     return false;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Run the tests
 | |
| runCertificateTests().catch(error => {
 | |
|   console.error(`Error running tests: ${error.message}`);
 | |
|   process.exit(1);
 | |
| }); |