upskill-event-manager/wordpress-dev/tests/e2e/certificate-generation.test.ts
bengizmo 42138339cb test: Add certificate generation tests and deployment tools
- Add E2E test for certificate generation functionality
- Create deployment configuration script for staging server
- Add certificate email testing script
- Update composer.lock with TCPDF dependencies

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-20 15:32:29 -03:00

127 lines
No EOL
4.6 KiB
TypeScript

import { test, expect } from '@playwright/test';
/**
* Certificate Generation End-to-End Test
*
* This test verifies the certificate generation functionality:
* - Login as a trainer
* - Navigate to an event summary page
* - Generate certificates for attendees
* - View certificate
* - Email certificate to a test email
* - Revoke certificate
*/
test.describe('Certificate Generation Tests', () => {
const stagingUrl = 'https://wordpress-974670-5399585.cloudwaysapps.com/';
const loginUrl = `${stagingUrl}community-login/`;
const dashboardUrl = `${stagingUrl}hvac-dashboard/`;
const testEmail = 'ben@tealmaker.com';
test.beforeEach(async ({ page }) => {
// Login as trainer
await page.goto(loginUrl);
await page.fill('input[name="log"]', 'test_trainer');
await page.fill('input[name="pwd"]', 'Test123!');
await page.click('input[type="submit"]');
// Verify login was successful by checking for dashboard
await expect(page).toHaveURL(dashboardUrl);
});
test('Generate and manage certificates for an event', async ({ page }) => {
// Navigate to the dashboard to find an event
await page.goto(dashboardUrl);
// Click on the first event summary link
await page.click('.hvac-event-title a');
// Wait for the event summary page to load
await expect(page.locator('h1')).toContainText('Summary');
// Check if we have attendees
const hasAttendees = await page.locator('.hvac-transactions-table').isVisible();
if (hasAttendees) {
// Check if any attendee doesn't have a certificate yet
const generateButtonExists = await page.locator('.hvac-cert-action:text("Generate")').isVisible();
if (generateButtonExists) {
// Generate a certificate for an attendee
await page.click('.hvac-cert-action:text("Generate")');
// Navigate to the generate certificates page
await expect(page.locator('h1')).toContainText('Generate Certificates');
// Check the 'checked_in_only' checkbox
await page.check('#checked-in-only-checkbox');
// Generate certificates
await page.click('button[type="submit"]');
// Wait for success message
await expect(page.locator('.hvac-success-message')).toBeVisible();
// Go back to the event summary
await page.click('a:text("Back to Event Summary")');
}
// Check if there are any generated certificates
const viewButtonExists = await page.locator('.hvac-cert-action:text("View")').isVisible();
if (viewButtonExists) {
// View a certificate
await page.click('.hvac-cert-action:text("View")', { force: true });
// Wait for the certificate modal to appear
await expect(page.locator('#hvac-certificate-modal')).toBeVisible();
// Wait for the certificate iframe to load
await page.waitForSelector('#hvac-certificate-preview[src^="http"]');
// Close the modal
await page.click('.hvac-modal-close');
// Email a certificate
await page.click('.hvac-cert-action:text("Email")', { force: true });
// Confirm the email dialog
await page.once('dialog', dialog => dialog.accept());
// Wait for success message
await page.waitForTimeout(2000); // Wait for alert to appear and dismiss
// Revoke a certificate
await page.click('.hvac-cert-action:text("Revoke")', { force: true });
// Enter reason in the prompt
await page.once('dialog', dialog => dialog.accept('Revocation test'));
// Wait for status to update to Revoked
await expect(page.locator('td:has-text("Revoked")')).toBeVisible();
} else {
console.log('No generated certificates available to test with');
}
} else {
console.log('No attendees found for the event');
}
});
test('Navigate to Certificate Reports page', async ({ page }) => {
// Navigate to certificate reports page
await page.goto(`${stagingUrl}certificate-reports/`);
// Verify the page loaded successfully
await expect(page.locator('h1')).toContainText('Certificate Reports');
// Try filtering certificates
await page.selectOption('select[name="filter_status"]', 'all');
await page.click('button[type="submit"]');
// Check for certificate data or empty message
const hasReports = await page.locator('.hvac-certificate-table').isVisible();
if (!hasReports) {
await expect(page.locator('.hvac-no-certificates')).toBeVisible();
}
});
});