138 lines
		
	
	
		
			No EOL
		
	
	
		
			4.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			No EOL
		
	
	
		
			4.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
 | |
| import { test, expect } from '@playwright/test';
 | |
| 
 | |
| // Constants
 | |
| // STAGING_URL is now imported from config
 | |
| const LOGIN_URL = PATHS.login;
 | |
| const DASHBOARD_URL = PATHS.dashboard;
 | |
| const USERNAME = 'test_trainer';
 | |
| const PASSWORD = 'Test123!';
 | |
| 
 | |
| // Test certificate navigation
 | |
| test('Navigate to certificate pages', async ({ page }) => {
 | |
|   // Login
 | |
|   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
 | |
|   expect(page.url()).toContain('hvac-dashboard');
 | |
|   
 | |
|   // Navigate to Generate Certificates page
 | |
|   const generateLink = page.locator('a:has-text("Generate Certificates")');
 | |
|   if (await generateLink.isVisible()) {
 | |
|     await generateLink.click();
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Check page title
 | |
|     const genTitle = page.locator('h1:has-text("Generate Certificates")');
 | |
|     await expect(genTitle).toBeVisible();
 | |
|     
 | |
|     // Go back to dashboard
 | |
|     await page.goto(DASHBOARD_URL);
 | |
|     await page.waitForLoadState('networkidle');
 | |
|   } else {
 | |
|     console.log('Generate Certificates link not found, skipping');
 | |
|   }
 | |
|   
 | |
|   // Navigate to Certificate Reports page
 | |
|   const reportsLink = page.locator('a:has-text("Certificate Reports")');
 | |
|   if (await reportsLink.isVisible()) {
 | |
|     await reportsLink.click();
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Check page title
 | |
|     const reportsTitle = page.locator('h1:has-text("Certificate Reports")');
 | |
|     await expect(reportsTitle).toBeVisible();
 | |
|     
 | |
|     // 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');
 | |
|       }
 | |
|       
 | |
|       // 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');
 | |
|         const filterButton = page.locator('button[type="submit"]');
 | |
|         if (await filterButton.isVisible()) {
 | |
|           await filterButton.click();
 | |
|           await page.waitForLoadState('networkidle');
 | |
|           console.log('Filtered for "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');
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   } else {
 | |
|     console.log('Certificate Reports link not found, skipping');
 | |
|   }
 | |
| });
 | |
| 
 | |
| // Test certificate generation basics
 | |
| test('Certificate generation basics', async ({ page }) => {
 | |
|   // Login
 | |
|   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');
 | |
|   
 | |
|   // Navigate to Generate Certificates page
 | |
|   const generateLink = page.locator('a:has-text("Generate Certificates")');
 | |
|   if (await generateLink.isVisible()) {
 | |
|     await generateLink.click();
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Check for event dropdown
 | |
|     const eventDropdown = page.locator('#event_id');
 | |
|     if (await eventDropdown.isVisible()) {
 | |
|       // Count options to see if we have events
 | |
|       const optionCount = await page.locator('#event_id option').count();
 | |
|       
 | |
|       if (optionCount > 1) {
 | |
|         // Select first non-empty option
 | |
|         await eventDropdown.selectOption({ index: 1 });
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check for attendee list
 | |
|         const attendeeList = page.locator('.hvac-attendee-list');
 | |
|         if (await attendeeList.isVisible()) {
 | |
|           const attendeeCount = await page.locator('.hvac-attendee-item').count();
 | |
|           console.log(`Found ${attendeeCount} attendees`);
 | |
|           
 | |
|           if (attendeeCount > 0) {
 | |
|             // Select first attendee
 | |
|             const firstAttendee = page.locator('.hvac-attendee-item input[type="checkbox"]').first();
 | |
|             if (await firstAttendee.isVisible()) {
 | |
|               await firstAttendee.check();
 | |
|               
 | |
|               // Check for generate button
 | |
|               const generateButton = page.locator('button:has-text("Generate Certificates")');
 | |
|               if (await generateButton.isVisible()) {
 | |
|                 console.log('Generate button found but not clicked for this test');
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } else {
 | |
|         console.log('No events available for certificate generation');
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }); |