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
123 lines
No EOL
4.8 KiB
TypeScript
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');
|
|
}); |