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

245 lines
No EOL
9.8 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
/**
* Test to verify certificate test data is showing correctly
*
* Checks the certificate reports page to ensure all test data is visible and filterable
*/
test.describe('Certificate Test Data Verification', () => {
const baseUrl = process.env.BASE_URL || 'https://upskill-staging.measurequick.com';
const adminUsername = process.env.ADMIN_USERNAME || 'admin';
const adminPassword = process.env.ADMIN_PASSWORD || 'password';
const certificateReportsUrl = `${baseUrl}/certificate-reports/`;
test.beforeEach(async ({ page }) => {
// Login before each test
await page.goto(`${baseUrl}/wp-login.php`);
await page.waitForSelector('#user_login');
await page.fill('#user_login', adminUsername);
await page.fill('#user_pass', adminPassword);
await page.click('#wp-submit');
await page.waitForURL(/wp-admin/);
// Navigate to certificate reports page
await page.goto(certificateReportsUrl);
await page.waitForSelector('.hvac-certificate-reports');
});
test('Verify certificate count matches expected', async ({ page }) => {
// Get the total count displayed on the page
await page.waitForSelector('.hvac-total-count');
const totalCountText = await page.textContent('.hvac-total-count');
// Extract the number from text like "Showing 1-20 of 54 certificates"
const totalMatch = totalCountText?.match(/of (\d+) certificates/);
const totalCount = totalMatch ? parseInt(totalMatch[1]) : 0;
// We expect at least 47 certificates (from our test data creation script)
// But there might be more if other test data exists
expect(totalCount).toBeGreaterThanOrEqual(47);
console.log(`Found total of ${totalCount} certificates`);
});
test('Verify event filtering works', async ({ page }) => {
// Clear any existing filters first
if (await page.$('a.hvac-clear-filters')) {
await page.click('a.hvac-clear-filters');
await page.waitForTimeout(500);
}
// Select one of our test events
await page.waitForSelector('#filter_event');
await page.selectOption('#filter_event', { label: 'HVAC System Design Fundamentals' });
await page.click('button[type="submit"]');
// Wait for page to refresh with filtered results
await page.waitForSelector('.hvac-certificate-table');
await page.waitForSelector('.hvac-total-count');
// Check the count text shows some results
const eventFilteredCountText = await page.textContent('.hvac-total-count');
const countMatch = eventFilteredCountText?.match(/of (\d+) certificates/);
const filteredCount = countMatch ? parseInt(countMatch[1]) : 0;
// We should have around 20 certificates for this event
expect(filteredCount).toBeGreaterThanOrEqual(15);
expect(filteredCount).toBeLessThanOrEqual(25);
console.log(`Found ${filteredCount} certificates for HVAC System Design Fundamentals`);
// Check that the event name column contains the correct name
const eventNameCells = await page.$$eval('td.certificate-event', cells =>
cells.map(cell => cell.textContent?.trim())
);
// All event cells should contain the filtered event name
for (const cellText of eventNameCells) {
expect(cellText).toContain('HVAC System Design Fundamentals');
}
});
test('Verify attendee filtering works', async ({ page }) => {
// Clear any existing filters first
if (await page.$('a.hvac-clear-filters')) {
await page.click('a.hvac-clear-filters');
await page.waitForTimeout(500);
}
// Search for Ben Tester (which should be in our test data)
await page.waitForSelector('#search_attendee');
await page.fill('#search_attendee', 'Ben Tester');
await page.click('button[type="submit"]');
// Wait for page to refresh with filtered results
await page.waitForSelector('.hvac-certificate-table');
// Check that we have at least some results (Ben Tester appears in multiple events)
const benFilteredCountText = await page.textContent('.hvac-total-count');
const benCountMatch = benFilteredCountText?.match(/of (\d+) certificates/);
const benFilteredCount = benCountMatch ? parseInt(benCountMatch[1]) : 0;
// We should have at least 1 certificate for Ben Tester
expect(benFilteredCount).toBeGreaterThanOrEqual(1);
console.log(`Found ${benFilteredCount} certificates for Ben Tester`);
// Check the attendee column contains the searched name
const attendeeNameCells = await page.$$eval('td.certificate-attendee', cells =>
cells.map(cell => cell.textContent?.trim())
);
// All attendee cells should contain the filtered name
for (const cellText of attendeeNameCells) {
expect(cellText?.toLowerCase()).toContain('ben tester');
}
// Clear filters again
await page.click('a.hvac-clear-filters');
await page.waitForTimeout(500);
// Test email search
await page.fill('#search_attendee', 'ben@tealmaker.com');
await page.click('button[type="submit"]');
// Wait for results
await page.waitForSelector('.hvac-certificate-table');
// Check results
const emailFilteredCountText = await page.textContent('.hvac-total-count');
const emailCountMatch = emailFilteredCountText?.match(/of (\d+) certificates/);
const emailFilteredCount = emailCountMatch ? parseInt(emailCountMatch[1]) : 0;
// We should have at least 1 certificate for ben@tealmaker.com
expect(emailFilteredCount).toBeGreaterThanOrEqual(1);
console.log(`Found ${emailFilteredCount} certificates for ben@tealmaker.com`);
});
test('Verify revocation status filtering works', async ({ page }) => {
// Clear any existing filters first
if (await page.$('a.hvac-clear-filters')) {
await page.click('a.hvac-clear-filters');
await page.waitForTimeout(500);
}
// Filter by revoked certificates
await page.waitForSelector('#filter_revoked');
await page.selectOption('#filter_revoked', { value: '1' });
await page.click('button[type="submit"]');
// Wait for page to refresh with filtered results
await page.waitForSelector('.hvac-certificate-table');
// Check the count text shows some results
const revokedCountText = await page.textContent('.hvac-total-count');
const revokedMatch = revokedCountText?.match(/of (\d+) certificates/);
const revokedCount = revokedMatch ? parseInt(revokedMatch[1]) : 0;
// We should have around 5 revoked certificates
expect(revokedCount).toBeGreaterThanOrEqual(1);
console.log(`Found ${revokedCount} revoked certificates`);
// Check the status column shows revoked
const statusCells = await page.$$eval('td.certificate-status', cells =>
cells.map(cell => cell.textContent?.trim())
);
// All status cells should show revoked
for (const cellText of statusCells) {
expect(cellText?.toLowerCase()).toContain('revoked');
}
});
test('Verify complex filter combinations work', async ({ page }) => {
// Clear any existing filters first
if (await page.$('a.hvac-clear-filters')) {
await page.click('a.hvac-clear-filters');
await page.waitForTimeout(500);
}
// Apply multiple filters - event + attendee search
await page.waitForSelector('#filter_event');
await page.selectOption('#filter_event', { label: 'Advanced Refrigeration Technology' });
await page.fill('#search_attendee', 'tester');
await page.click('button[type="submit"]');
// Wait for page to refresh with filtered results
await page.waitForSelector('.hvac-certificate-table');
// Check if we have results that match both criteria
const combinedFilterText = await page.textContent('.hvac-total-count');
console.log(`Combined filter results: ${combinedFilterText}`);
// Get table cells to verify content
const eventCells = await page.$$eval('td.certificate-event', cells =>
cells.map(cell => cell.textContent?.trim())
);
const attendeeCells = await page.$$eval('td.certificate-attendee', cells =>
cells.map(cell => cell.textContent?.trim())
);
// Check a sample of cells to make sure they match our criteria
if (eventCells.length > 0) {
expect(eventCells[0]).toContain('Advanced Refrigeration Technology');
}
if (attendeeCells.length > 0) {
expect(attendeeCells[0]?.toLowerCase()).toContain('tester');
}
});
test('Verify pagination works with large dataset', async ({ page }) => {
// Clear any existing filters first
if (await page.$('a.hvac-clear-filters')) {
await page.click('a.hvac-clear-filters');
await page.waitForTimeout(500);
}
// Check if pagination is present
const hasPagination = await page.$('.hvac-pagination');
if (hasPagination) {
// Get current page number
const currentPage = await page.$eval('.hvac-pagination .current', el => el.textContent?.trim());
console.log(`Current page: ${currentPage}`);
// Check if there's a next page link
const hasNextPage = await page.$('.hvac-pagination a.next');
if (hasNextPage) {
// Click next page
await page.click('.hvac-pagination a.next');
await page.waitForSelector('.hvac-certificate-table');
// Verify we're on a different page
const newPage = await page.$eval('.hvac-pagination .current', el => el.textContent?.trim());
console.log(`New page: ${newPage}`);
expect(newPage).not.toEqual(currentPage);
} else {
console.log('No next page link found - dataset may be too small for pagination');
}
} else {
console.log('No pagination found - dataset may be too small for pagination');
}
});
});