upskill-event-manager/wordpress-dev/tests/e2e/verify-certificate-data.test.ts

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