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');
|
|
}); |