242 lines
		
	
	
		
			No EOL
		
	
	
		
			9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			No EOL
		
	
	
		
			9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
 | |
| import { test, expect } from '@playwright/test';
 | |
| 
 | |
| // Base configuration
 | |
| const BASE_URL = 'https://upskill-staging.measurequick.com';
 | |
| const USER_LOGIN = 'test_trainer';
 | |
| const USER_PASSWORD = 'Test123!';
 | |
| 
 | |
| // Test event IDs created by our scripts
 | |
| const TEST_EVENTS = [
 | |
|   { id: '5641', name: 'HVAC System Design Fundamentals' },
 | |
|   { id: '5668', name: 'Advanced Refrigeration Technology' },
 | |
|   { id: '5688', name: 'Building Automation Systems Workshop' }
 | |
| ];
 | |
| 
 | |
| /**
 | |
|  * Test to verify certificate test data and attendee filtering
 | |
|  */
 | |
| test('Verify certificate test data and attendee filtering', async ({ page }) => {
 | |
|   console.log('Step 1: Logging in...');
 | |
|   await page.goto(`${BASE_URL}/community-login/`);
 | |
|   await page.fill('#user_login', USER_LOGIN);
 | |
|   await page.fill('#user_pass', USER_PASSWORD);
 | |
|   await page.click('#wp-submit');
 | |
|   await page.waitForLoadState('networkidle');
 | |
|   
 | |
|   // Verify logged in successfully
 | |
|   const currentUrl = page.url();
 | |
|   console.log(`Current URL after login: ${currentUrl}`);
 | |
|   
 | |
|   // Navigate to certificate reports page
 | |
|   console.log('Step 2: Navigating to certificate reports page...');
 | |
|   await page.goto(`${BASE_URL}/certificate-reports/`);
 | |
|   await page.waitForSelector('.hvac-certificate-reports', { timeout: 10000 });
 | |
|   
 | |
|   // Test 1: Verify total certificate count
 | |
|   const totalCountText = await page.textContent('.hvac-total-count');
 | |
|   console.log(`Total count text: ${totalCountText}`);
 | |
|   
 | |
|   // Extract count from text like "Showing 1-20 of 54 certificates"
 | |
|   const countMatch = totalCountText?.match(/of (\d+) certificates/);
 | |
|   const totalCount = countMatch ? parseInt(countMatch[1]) : 0;
 | |
|   
 | |
|   console.log(`Total certificates found: ${totalCount}`);
 | |
|   expect(totalCount).toBeGreaterThanOrEqual(47);
 | |
|   
 | |
|   // Test 2: Event filtering
 | |
|   for (const testEvent of TEST_EVENTS) {
 | |
|     console.log(`Testing event filter: ${testEvent.name} (ID: ${testEvent.id})`);
 | |
|     
 | |
|     // Clear any existing filters first
 | |
|     await page.click('a.hvac-clear-filters');
 | |
|     await page.waitForTimeout(500);
 | |
|     
 | |
|     // Select the event
 | |
|     await page.selectOption('#filter_event', { value: testEvent.id });
 | |
|     await page.click('button[type="submit"]');
 | |
|     await page.waitForSelector('.hvac-certificate-table');
 | |
|     
 | |
|     // Check count text
 | |
|     const eventFilteredText = await page.textContent('.hvac-total-count');
 | |
|     const eventCountMatch = eventFilteredText?.match(/of (\d+) certificates/);
 | |
|     const eventCount = eventCountMatch ? parseInt(eventCountMatch[1]) : 0;
 | |
|     
 | |
|     console.log(`Found ${eventCount} certificates for event ${testEvent.name}`);
 | |
|     expect(eventCount).toBeGreaterThan(0);
 | |
|     
 | |
|     // Check event names in table
 | |
|     const eventCells = await page.$$eval('td.certificate-event', cells => 
 | |
|       cells.map(cell => cell.textContent?.trim())
 | |
|     );
 | |
|     
 | |
|     // Verify at least one row has the correct event name
 | |
|     if (eventCells.length > 0) {
 | |
|       expect(eventCells[0]).toContain(testEvent.name);
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   // Test 3: Attendee filtering by name
 | |
|   console.log('Testing attendee name filter: "Ben Tester"');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Search for Ben Tester
 | |
|   await page.fill('#search_attendee', 'Ben Tester');
 | |
|   await page.click('button[type="submit"]');
 | |
|   await page.waitForSelector('.hvac-certificate-table');
 | |
|   
 | |
|   // Check count text
 | |
|   const nameFilteredText = await page.textContent('.hvac-total-count');
 | |
|   const nameCountMatch = nameFilteredText?.match(/of (\d+) certificates/);
 | |
|   const nameCount = nameCountMatch ? parseInt(nameCountMatch[1]) : 0;
 | |
|   
 | |
|   console.log(`Found ${nameCount} certificates for attendee name "Ben Tester"`);
 | |
|   
 | |
|   // Check attendee names in table
 | |
|   const attendeeCells = await page.$$eval('td.certificate-attendee', cells => 
 | |
|     cells.map(cell => cell.textContent?.trim())
 | |
|   );
 | |
|   
 | |
|   // Take screenshot for verification
 | |
|   await page.screenshot({ path: 'ben-tester-search.png', fullPage: true });
 | |
|   
 | |
|   // Test 4: Attendee filtering by email
 | |
|   console.log('Testing attendee email filter: "ben@tealmaker.com"');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Search for email
 | |
|   await page.fill('#search_attendee', 'ben@tealmaker.com');
 | |
|   await page.click('button[type="submit"]');
 | |
|   await page.waitForSelector('.hvac-certificate-table');
 | |
|   
 | |
|   // Check count text
 | |
|   const emailFilteredText = await page.textContent('.hvac-total-count');
 | |
|   const emailCountMatch = emailFilteredText?.match(/of (\d+) certificates/);
 | |
|   const emailCount = emailCountMatch ? parseInt(emailCountMatch[1]) : 0;
 | |
|   
 | |
|   console.log(`Found ${emailCount} certificates for attendee email "ben@tealmaker.com"`);
 | |
|   
 | |
|   // Take screenshot for verification
 | |
|   await page.screenshot({ path: 'ben-email-search.png', fullPage: true });
 | |
|   
 | |
|   // Test 5: Partial name filtering
 | |
|   console.log('Testing partial name filter: "Smith"');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Search for partial name
 | |
|   await page.fill('#search_attendee', 'Smith');
 | |
|   await page.click('button[type="submit"]');
 | |
|   await page.waitForSelector('.hvac-certificate-table');
 | |
|   
 | |
|   // Check count text
 | |
|   const partialNameText = await page.textContent('.hvac-total-count');
 | |
|   const partialNameMatch = partialNameText?.match(/of (\d+) certificates/);
 | |
|   const partialNameCount = partialNameMatch ? parseInt(partialNameMatch[1]) : 0;
 | |
|   
 | |
|   console.log(`Found ${partialNameCount} certificates for partial name "Smith"`);
 | |
|   
 | |
|   // Take screenshot for verification
 | |
|   await page.screenshot({ path: 'smith-search.png', fullPage: true });
 | |
|   
 | |
|   // Test 6: Partial email filtering
 | |
|   console.log('Testing partial email filter: "@gmail"');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Search for partial email
 | |
|   await page.fill('#search_attendee', '@gmail');
 | |
|   await page.click('button[type="submit"]');
 | |
|   await page.waitForSelector('.hvac-certificate-table');
 | |
|   
 | |
|   // Check count text
 | |
|   const partialEmailText = await page.textContent('.hvac-total-count');
 | |
|   const partialEmailMatch = partialEmailText?.match(/of (\d+) certificates/);
 | |
|   const partialEmailCount = partialEmailMatch ? parseInt(partialEmailMatch[1]) : 0;
 | |
|   
 | |
|   console.log(`Found ${partialEmailCount} certificates for partial email "@gmail"`);
 | |
|   
 | |
|   // Take screenshot for verification
 | |
|   await page.screenshot({ path: 'gmail-search.png', fullPage: true });
 | |
|   
 | |
|   // Test 7: Revocation status filtering
 | |
|   console.log('Testing revocation status filter');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Filter by revoked certificates
 | |
|   await page.selectOption('#filter_revoked', { value: '1' });
 | |
|   await page.click('button[type="submit"]');
 | |
|   await page.waitForSelector('.hvac-certificate-table');
 | |
|   
 | |
|   // Check count text
 | |
|   const revokedText = await page.textContent('.hvac-total-count');
 | |
|   const revokedMatch = revokedText?.match(/of (\d+) certificates/);
 | |
|   const revokedCount = revokedMatch ? parseInt(revokedMatch[1]) : 0;
 | |
|   
 | |
|   console.log(`Found ${revokedCount} revoked certificates`);
 | |
|   
 | |
|   // Take screenshot for verification
 | |
|   await page.screenshot({ path: 'revoked-search.png', fullPage: true });
 | |
|   
 | |
|   // Test 8: Combined filtering
 | |
|   console.log('Testing combined filtering (event + attendee)');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Apply multiple filters
 | |
|   await page.selectOption('#filter_event', { value: TEST_EVENTS[0].id });
 | |
|   await page.fill('#search_attendee', 'Ben');
 | |
|   await page.click('button[type="submit"]');
 | |
|   await page.waitForSelector('.hvac-certificate-table');
 | |
|   
 | |
|   // Check count text
 | |
|   const combinedText = await page.textContent('.hvac-total-count');
 | |
|   console.log(`Combined filter results: ${combinedText}`);
 | |
|   
 | |
|   // Take screenshot for verification
 | |
|   await page.screenshot({ path: 'combined-search.png', fullPage: true });
 | |
|   
 | |
|   // Final test: Check pagination
 | |
|   console.log('Testing pagination');
 | |
|   
 | |
|   // Clear any existing filters first
 | |
|   await page.click('a.hvac-clear-filters');
 | |
|   await page.waitForTimeout(500);
 | |
|   
 | |
|   // Check if pagination is present
 | |
|   const hasPagination = await page.$('.hvac-pagination');
 | |
|   console.log(`Has pagination: ${hasPagination !== null}`);
 | |
|   
 | |
|   if (hasPagination) {
 | |
|     const currentPage = await page.$eval('.hvac-pagination .current', el => el.textContent?.trim());
 | |
|     console.log(`Current page: ${currentPage}`);
 | |
|     
 | |
|     const hasNextPage = await page.$('.hvac-pagination a.next');
 | |
|     if (hasNextPage) {
 | |
|       await page.click('.hvac-pagination a.next');
 | |
|       await page.waitForSelector('.hvac-certificate-table');
 | |
|       
 | |
|       const newPage = await page.$eval('.hvac-pagination .current', el => el.textContent?.trim());
 | |
|       console.log(`New page: ${newPage}`);
 | |
|       
 | |
|       expect(newPage).not.toEqual(currentPage);
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   console.log('Certificate test data verification completed');
 | |
| }); |