upskill-event-manager/wordpress-dev/tests/e2e/certificate-management.test.ts
bengizmo 5d08f8d28e docs: Update certificate testing documentation and methodology
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
2025-05-20 23:10:19 -03:00

123 lines
No EOL
4.8 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';
// Certificate Management Tests
test('Certificate management functionality', async ({ page, browser }) => {
// Set up test data and generate certificates first
console.log('Setting up test data for certificate management 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
const eventName = await testData.setupCertificateTestEvent();
expect(eventName).not.toBeNull();
// Navigate to Generate Certificates page
const setupCertPage = new CertificatePage(setupPage);
await setupCertPage.navigateToGenerateCertificates();
// Select the event and generate certificates for all attendees
await setupCertPage.selectEvent(eventName as string);
await setupCertPage.selectAllAttendees();
await setupCertPage.generateCertificates();
// Close the setup context
await context.close();
// Start the actual test
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 Certificate Reports...');
await dashboardPage.clickCertificateReports();
console.log('Step 4: Test certificate management functionality...');
const certificatePage = new CertificatePage(page);
try {
// Verify we're on the certificate reports page
const pageVisible = await certificatePage.isCertificateReportsPageVisible();
expect(pageVisible).toBeTruthy();
// Search for certificates from our test event
await certificatePage.searchCertificates(eventName as string);
// Verify certificates exist
const certificateCount = await certificatePage.getCertificateCount();
console.log(`Found ${certificateCount} certificates for the test event`);
expect(certificateCount).toBeGreaterThan(0);
if (certificateCount > 0) {
// Test viewing a certificate
console.log('Step 4a: Testing certificate viewing...');
await certificatePage.viewCertificate(0);
await certificatePage.closePreview();
// Test emailing a certificate
console.log('Step 4b: Testing certificate emailing...');
try {
await certificatePage.emailCertificate(0);
// Check for success message
const hasSuccessMessage = await certificatePage.isSuccessMessageVisible();
if (hasSuccessMessage) {
const successMessage = await certificatePage.getSuccessMessage();
console.log(`Email success message: ${successMessage}`);
}
} catch (error) {
console.log(`Email functionality unavailable or failed: ${error.message}`);
// Continue with the test - email might not be implemented
}
// Test revoking a certificate if we have more than one
if (certificateCount > 1) {
console.log('Step 4c: Testing certificate revocation...');
await certificatePage.revokeCertificate(1);
// Refresh the page to see the updated status
await certificatePage.navigateToCertificateReports();
await certificatePage.searchCertificates(eventName as string);
// The second certificate should now be revoked
// Add verification if the UI exposes revocation status
}
// Test pagination if available
console.log('Step 4d: Testing pagination if available...');
const hasPagination = await certificatePage.isPaginationVisible();
if (hasPagination) {
console.log('Pagination is available, testing navigation...');
// Try to navigate to next page
const couldGoNext = await certificatePage.goToNextPage();
if (couldGoNext) {
// Go back to previous page
await certificatePage.goToPreviousPage();
}
} else {
console.log('Pagination not available (not enough certificates)');
}
}
} catch (error) {
console.error('Error during certificate management test:', error.message);
// Take a screenshot for debugging
await page.screenshot({ path: `${Config.screenshotPath}/error-certificate-management.png` });
throw error;
}
console.log('Certificate management test completed successfully');
});