This commit: - Creates comprehensive CERTIFICATE_TESTING_GUIDE.md to document certificate testing - Updates TRAINER_JOURNEY_TEST_SUMMARY.md to include certificate functionality - Updates main README.md with certificate testing information - Creates a centralized Config.ts utility for consistent configuration - Updates CertificatePage.ts and other page objects for consistency - Creates a guided manual test script (run-certificate-tests.sh) - Archives outdated certificate test files - Improves documentation organization and consistency
110 lines
No EOL
4.9 KiB
TypeScript
110 lines
No EOL
4.9 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { CertificatePage } from './pages/CertificatePage';
|
|
import { DashboardPage } from './pages/DashboardPage';
|
|
import { LoginPage } from './pages/LoginPage';
|
|
import { CertificateTestData } from './utils/CertificateTestData';
|
|
import { Config } from './utils/Config';
|
|
|
|
test.describe('Certificate Generation Tests', () => {
|
|
test('should handle certificate generation for non-checked-in attendees', async ({ page, browser }) => {
|
|
// Set up test data
|
|
console.log('Setting up test data for non-checked-in 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();
|
|
|
|
// Close the setup context
|
|
await context.close();
|
|
|
|
console.log('Step 1: Logging in...');
|
|
const loginPage = new LoginPage(page);
|
|
await loginPage.navigate();
|
|
await loginPage.login(Config.testTrainer.username, Config.testTrainer.password);
|
|
|
|
console.log('Step 2: Navigate to dashboard...');
|
|
const dashboardPage = new DashboardPage(page);
|
|
await dashboardPage.navigate();
|
|
|
|
console.log('Step 3: Navigate to Generate Certificates...');
|
|
await dashboardPage.clickGenerateCertificates();
|
|
|
|
console.log('Step 4: Generate certificates for non-checked-in attendees...');
|
|
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();
|
|
const nonCheckedInAttendees = totalAttendees - checkedInAttendees;
|
|
|
|
console.log(`Found ${totalAttendees} total attendees, ${nonCheckedInAttendees} non-checked-in`);
|
|
expect(totalAttendees).toBeGreaterThan(0);
|
|
expect(nonCheckedInAttendees).toBeGreaterThan(0);
|
|
|
|
// Select only non-checked-in attendees
|
|
await certificatePage.selectNonCheckedInAttendees();
|
|
|
|
// Generate certificates
|
|
await certificatePage.generateCertificates();
|
|
|
|
// This test can have two possible outcomes based on implementation:
|
|
// 1. The system allows certificates for non-checked-in attendees
|
|
// 2. The system prevents certificates for non-checked-in attendees
|
|
|
|
try {
|
|
// Check if there's an error message
|
|
const hasError = await certificatePage.isErrorMessageVisible();
|
|
const hasSuccess = await certificatePage.isSuccessMessageVisible();
|
|
|
|
if (hasError) {
|
|
// Case 2: System prevents certificates for non-checked-in attendees
|
|
console.log('System prevents certificate generation for non-checked-in attendees');
|
|
const errorMessage = await certificatePage.getErrorMessage();
|
|
console.log(`Error message: ${errorMessage}`);
|
|
expect(errorMessage).toContain('checked-in');
|
|
} else if (hasSuccess) {
|
|
// Case 1: System allows certificates for non-checked-in attendees
|
|
console.log('System allows certificate generation for non-checked-in attendees');
|
|
const successMessage = await certificatePage.getSuccessMessage();
|
|
console.log(`Success message: ${successMessage}`);
|
|
|
|
// Navigate to certificate reports to verify
|
|
await dashboardPage.navigate();
|
|
await dashboardPage.clickCertificateReports();
|
|
|
|
// Filter certificates for the test event
|
|
await certificatePage.searchCertificates(eventName as string);
|
|
|
|
// Check certificate count - should include the non-checked-in attendees
|
|
const certificateCount = await certificatePage.getCertificateCount();
|
|
console.log(`Found ${certificateCount} certificates for event (should include non-checked-in)`);
|
|
expect(certificateCount).toBeGreaterThanOrEqual(nonCheckedInAttendees);
|
|
} else {
|
|
// Unexpected case - neither success nor error
|
|
throw new Error('Neither success nor error message was displayed after certificate generation');
|
|
}
|
|
} catch (error) {
|
|
console.error('Error during certificate generation test:', error.message);
|
|
// Take a screenshot for debugging
|
|
await page.screenshot({ path: `${Config.screenshotPath}/error-non-checked-in-test.png` });
|
|
throw error;
|
|
}
|
|
|
|
console.log('Certificate generation test for non-checked-in attendees completed successfully');
|
|
});
|
|
}); |