upskill-event-manager/wordpress-dev/tests/e2e/certificates.test.ts

224 lines
No EOL
7.8 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
import { CertificatePage } from './pages/CertificatePage';
/**
* Certificate Tests
*
* These tests verify the certificate generation, reporting, and filtering functionality
*
* @group @certificate
*/
// STAGING_URL is now imported from config
// Test data for existing certificates to verify
const TEST_EVENTS = [
{ id: '5641', name: 'HVAC System Design Fundamentals' },
{ id: '5668', name: 'Advanced Refrigeration Technology' },
{ id: '5688', name: 'Building Automation Systems Workshop' }
];
// Test data for attendee filtering
const TEST_ATTENDEES = [
{ name: 'John Smith', email: 'john.smith@example.com' },
{ name: 'Sarah Johnson', email: 'sarah.johnson@example.com' },
{ name: 'Michael Brown', email: 'michael.brown@example.com' }
];
// Common setup for tests
async function setupTest(page) {
const loginPage = new LoginPage(page);
await loginPage.navigate();
await loginPage.login('test_trainer', 'Test123!');
// Verify login
const dashboardPage = new DashboardPage(page);
await expect(page).toHaveURL(/hvac-dashboard/);
return { loginPage, dashboardPage };
}
test.describe('Certificate Generation and Reports', () => {
test('Navigate to certificate generation page', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Generate Certificates page
await dashboardPage.clickGenerateCertificates();
// Verify page components
const certificatePage = new CertificatePage(page);
const pageVisible = await certificatePage.isGenerateCertificatesPageVisible();
expect(pageVisible).toBeTruthy();
// Check for event dropdown
await expect(page.locator('#event_id')).toBeVisible();
});
test('Navigate to certificate reports page', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Certificate Reports page
await dashboardPage.clickCertificateReports();
// Verify page components
const certificatePage = new CertificatePage(page);
const pageVisible = await certificatePage.isCertificateReportsPageVisible();
expect(pageVisible).toBeTruthy();
// Check for filter form
await expect(page.locator('form.hvac-certificate-filters')).toBeVisible();
});
test('Filter certificates by event', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Certificate Reports page
await dashboardPage.clickCertificateReports();
const certificatePage = new CertificatePage(page);
// Select an event to filter
const testEvent = TEST_EVENTS[0];
await certificatePage.searchCertificates(testEvent.name);
// Verify results
await page.waitForLoadState('networkidle');
const certificateCount = await certificatePage.getCertificateCount();
console.log(`Found ${certificateCount} certificates for event: ${testEvent.name}`);
// Should have at least some certificates (can be zero if no certificates exist)
expect(certificateCount).toBeGreaterThanOrEqual(0);
});
test('Search certificates by attendee', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Certificate Reports page
await dashboardPage.clickCertificateReports();
const certificatePage = new CertificatePage(page);
// Search for an attendee
const testAttendee = TEST_ATTENDEES[0];
await certificatePage.searchAttendee(testAttendee.name);
// Verify search results
await page.waitForLoadState('networkidle');
const certificateCount = await certificatePage.getCertificateCount();
console.log(`Found ${certificateCount} certificates for attendee: ${testAttendee.name}`);
// Verify filter was applied (search input should have the attendee name)
const searchValue = await page.inputValue('#search_attendee');
expect(searchValue).toEqual(testAttendee.name);
});
test('Reset certificate filters', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Certificate Reports page
await dashboardPage.clickCertificateReports();
const certificatePage = new CertificatePage(page);
// Apply a filter first
await certificatePage.searchAttendee('test');
// Get count with filter
const filteredCount = await certificatePage.getCertificateCount();
// Reset filters
await certificatePage.resetFilters();
// Get count after reset
const resetCount = await certificatePage.getCertificateCount();
// The search input should be empty after reset
const searchValue = await page.inputValue('#search_attendee');
expect(searchValue).toEqual('');
console.log(`Filtered certificates: ${filteredCount}, After reset: ${resetCount}`);
// We can't guarantee counts will differ, but the reset should work
});
test('View certificate details', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Certificate Reports page
await dashboardPage.clickCertificateReports();
const certificatePage = new CertificatePage(page);
// Get initial certificate count
const certificateCount = await certificatePage.getCertificateCount();
console.log(`Found ${certificateCount} certificates`);
// Skip test if no certificates
test.skip(certificateCount === 0, 'No certificates available to view');
if (certificateCount > 0) {
// View the first certificate
await certificatePage.viewCertificate(0);
// Verify preview is visible
await expect(page.locator('.hvac-certificate-preview')).toBeVisible();
// Close the preview
await certificatePage.closePreview();
// Preview should be hidden
await expect(page.locator('.hvac-certificate-preview')).not.toBeVisible();
}
});
});
// Comprehensive test for attendee search functionality
test('Attendee search functionality', async ({ page }) => {
const { dashboardPage } = await setupTest(page);
// Navigate to Certificate Reports page
await dashboardPage.clickCertificateReports();
const certificatePage = new CertificatePage(page);
// Test partial name search
await certificatePage.searchAttendee('John');
await page.waitForLoadState('networkidle');
// Verify search results
const nameSearchCount = await certificatePage.getCertificateCount();
console.log(`Found ${nameSearchCount} certificates for attendee name: John`);
// Reset filters
await certificatePage.resetFilters();
// Test email domain search
await certificatePage.searchAttendee('example.com');
await page.waitForLoadState('networkidle');
// Verify search results
const emailSearchCount = await certificatePage.getCertificateCount();
console.log(`Found ${emailSearchCount} certificates for email domain: example.com`);
// Reset filters
await certificatePage.resetFilters();
// Test combination of filters (event + attendee)
if (TEST_EVENTS.length > 0) {
const testEvent = TEST_EVENTS[0];
// Select an event
await certificatePage.searchCertificates(testEvent.name);
// Then search for an attendee
await certificatePage.searchAttendee('test');
// Verify combined results
const combinedCount = await certificatePage.getCertificateCount();
console.log(`Found ${combinedCount} certificates for event "${testEvent.name}" and attendee "test"`);
// Verify both filters were applied
const searchValue = await page.inputValue('#search_attendee');
expect(searchValue).toEqual('test');
// Reset filters
await certificatePage.resetFilters();
}
});