upskill-event-manager/wordpress-dev/tests/e2e/certificate-generation-checked-in.test.ts

111 lines
No EOL
4 KiB
TypeScript

import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
import { test, expect } from '@playwright/test';
import { CertificatePage } from './pages/CertificatePage';
import { DashboardPage } from './pages/DashboardPage';
import { CertificateTestData } from './utils/CertificateTestData';
// STAGING_URL is now imported from config
/**
* Certificate Generation Tests for Checked-In Attendees
* @group @certificate
*/
test('Generate certificates for checked-in attendees', async ({ page, browser }) => {
// Setup test data
console.log('Setting up test data for certificate tests...');
// Create a new browser context for data setup
const context = await browser.newContext();
const setupPage = await context.newPage();
// Set up the test data
const testData = new CertificateTestData(setupPage);
await testData.loginAsTrainer();
// Create a test event with attendees (some checked-in, some not)
const eventName = await testData.setupCertificateTestEvent();
expect(eventName).not.toBeNull();
console.log(`Test event created: ${eventName}`);
// Close the setup context
await context.close();
console.log('Step 1: Logging in...');
await page.goto(PATHS.login);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
await expect(page).toHaveURL(/hvac-dashboard/);
console.log('Step 2: Navigate to dashboard...');
const dashboardPage = new DashboardPage(page);
await dashboardPage.navigate();
console.log('Step 3: Verify certificate links are visible...');
await dashboardPage.clickGenerateCertificates();
console.log('Step 4: Generate certificates for checked-in attendees only...');
const certificatePage = new CertificatePage(page);
// Verify we're on the generate certificates page
const pageVisible = await certificatePage.isGenerateCertificatesPageVisible();
expect(pageVisible).toBeTruthy();
// Select the test event
await certificatePage.selectEvent(eventName as string);
// Get attendee counts
const totalAttendees = await certificatePage.getAttendeeCount();
const checkedInAttendees = await certificatePage.getCheckedInAttendeeCount();
console.log(`Found ${totalAttendees} total attendees, ${checkedInAttendees} checked-in`);
expect(totalAttendees).toBeGreaterThan(0);
expect(checkedInAttendees).toBeGreaterThan(0);
// Select only checked-in attendees
await certificatePage.selectCheckedInAttendees();
// Generate certificates
await certificatePage.generateCertificates();
// Verify success message
const success = await certificatePage.isSuccessMessageVisible();
expect(success).toBeTruthy();
const successMessage = await certificatePage.getSuccessMessage();
console.log(`Success message: ${successMessage}`);
expect(successMessage).toContain("success");
console.log('Step 5: Verify certificates in Certificate Reports...');
// Navigate to certificate reports
await dashboardPage.navigate();
await dashboardPage.clickCertificateReports();
// Verify we're on the certificate reports page
const reportsPageVisible = await certificatePage.isCertificateReportsPageVisible();
expect(reportsPageVisible).toBeTruthy();
// Filter certificates for the test event
await certificatePage.searchCertificates(eventName as string);
// Check certificate count
const certificateCount = await certificatePage.getCertificateCount();
console.log(`Found ${certificateCount} certificates for event`);
// We should have certificates equal to the number of checked-in attendees
// Note: This assumes that the test data setup created at least one checked-in attendee
expect(certificateCount).toBeGreaterThan(0);
// View a certificate
if (certificateCount > 0) {
await certificatePage.viewCertificate(0);
// Close the preview
await certificatePage.closePreview();
}
console.log('Certificate generation test for checked-in attendees completed successfully');
});