- Update trainer journey tests to include comprehensive certificate testing - Add attendee search and filtering functionality to the test - Implement certificate generation and viewing test steps - Improve documentation with updated test coverage - Create run script for trainer journey with certificates test - Update test plan to reflect implemented features
249 lines
No EOL
9.8 KiB
TypeScript
249 lines
No EOL
9.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 { CreateEventPage } from './pages/CreateEventPage';
|
|
import { EventSummaryPage } from './pages/EventSummaryPage';
|
|
import { CertificateTestData } from './utils/CertificateTestData';
|
|
import { Config } from './utils/Config';
|
|
|
|
// Full Trainer Journey Including Certificate Functionality
|
|
test('Trainer journey with certificate functionality', async ({ page }) => {
|
|
console.log('Starting trainer journey with certificates test...');
|
|
|
|
try {
|
|
// STEP 1: Login as trainer
|
|
console.log('Step 1: Logging in as trainer...');
|
|
const loginPage = new LoginPage(page);
|
|
await loginPage.navigate();
|
|
await loginPage.login(Config.testTrainer.username, Config.testTrainer.password);
|
|
|
|
// STEP 2: Navigate to dashboard
|
|
console.log('Step 2: Accessing dashboard...');
|
|
const dashboardPage = new DashboardPage(page);
|
|
await dashboardPage.navigate();
|
|
|
|
// Verify dashboard is accessible
|
|
const isOnDashboard = await dashboardPage.isOnDashboard();
|
|
expect(isOnDashboard).toBeTruthy();
|
|
|
|
// STEP 3: Create a new event
|
|
console.log('Step 3: Creating a new event...');
|
|
await dashboardPage.clickCreateEvent();
|
|
|
|
const createEventPage = new CreateEventPage(page);
|
|
|
|
// Generate a unique event title with timestamp
|
|
const timestamp = new Date().getTime();
|
|
const eventTitle = `Certificate Journey Test Event ${timestamp}`;
|
|
|
|
// Fill event details
|
|
await createEventPage.fillEventTitle(eventTitle);
|
|
await createEventPage.fillEventDescription(`This is a test event for trainer journey with certificates ${timestamp}`);
|
|
|
|
// Set event dates (future dates)
|
|
const futureDate = new Date();
|
|
futureDate.setDate(futureDate.getDate() + 30);
|
|
|
|
await createEventPage.setStartDate(futureDate.toLocaleDateString('en-US'));
|
|
await createEventPage.setEndDate(futureDate.toLocaleDateString('en-US'));
|
|
await createEventPage.setStartTime('10:00 AM');
|
|
await createEventPage.setEndTime('4:00 PM');
|
|
|
|
// Add ticket
|
|
await createEventPage.addTicket('General Admission', '100');
|
|
|
|
// Submit the form
|
|
const eventId = await createEventPage.submitForm();
|
|
expect(eventId).toBeTruthy();
|
|
|
|
console.log(`Event created with ID: ${eventId}`);
|
|
|
|
// Wait for navigation to Event Summary
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// STEP 4: Add test attendees
|
|
console.log('Step 4: Adding test attendees...');
|
|
|
|
// Use the utility to create test attendees
|
|
const testData = new CertificateTestData(page);
|
|
await testData.createTestAttendees(eventId as string, 6);
|
|
|
|
// STEP 5: Access dashboard to navigate to Certificate features
|
|
console.log('Step 5: Returning to dashboard...');
|
|
await dashboardPage.navigate();
|
|
|
|
// STEP 6: Generate certificates
|
|
console.log('Step 6: Generating certificates...');
|
|
await dashboardPage.clickGenerateCertificates();
|
|
|
|
const certificatePage = new CertificatePage(page);
|
|
|
|
// Verify we're on generate certificates page
|
|
const onGeneratePage = await certificatePage.isGenerateCertificatesPageVisible();
|
|
expect(onGeneratePage).toBeTruthy();
|
|
|
|
// Verify page elements
|
|
const pageTitle = await page.title();
|
|
console.log(`Generate Certificates page title: ${pageTitle}`);
|
|
expect(pageTitle).toContain('Generate Certificates');
|
|
|
|
// Select our test event
|
|
await certificatePage.selectEvent(eventTitle);
|
|
|
|
// 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);
|
|
|
|
// Try different selection methods
|
|
// First, select checked-in attendees
|
|
if (checkedInAttendees > 0) {
|
|
console.log('Selecting checked-in attendees only...');
|
|
await certificatePage.selectCheckedInAttendees();
|
|
|
|
// Generate certificates for checked-in attendees
|
|
await certificatePage.generateCertificates();
|
|
|
|
// Check if successful
|
|
const isSuccessCheckedIn = await certificatePage.isSuccessMessageVisible();
|
|
expect(isSuccessCheckedIn).toBeTruthy();
|
|
|
|
// Get success message
|
|
const successMessage = await certificatePage.getSuccessMessage();
|
|
console.log(`Success message: ${successMessage}`);
|
|
|
|
// Return to certificates page
|
|
await dashboardPage.clickGenerateCertificates();
|
|
await certificatePage.selectEvent(eventTitle);
|
|
}
|
|
|
|
// Now select all attendees
|
|
console.log('Selecting all attendees...');
|
|
await certificatePage.selectAllAttendees();
|
|
|
|
// Generate certificates for all attendees
|
|
await certificatePage.generateCertificates();
|
|
|
|
// Check if successful
|
|
const isSuccess = await certificatePage.isSuccessMessageVisible();
|
|
expect(isSuccess).toBeTruthy();
|
|
|
|
// STEP 7: Manage certificates
|
|
console.log('Step 7: Managing certificates...');
|
|
await dashboardPage.navigate();
|
|
await dashboardPage.clickCertificateReports();
|
|
|
|
// Verify we're on certificate reports page
|
|
const onReportsPage = await certificatePage.isCertificateReportsPageVisible();
|
|
expect(onReportsPage).toBeTruthy();
|
|
|
|
// Verify page elements
|
|
const reportsPageTitle = await page.title();
|
|
console.log(`Certificate Reports page title: ${reportsPageTitle}`);
|
|
expect(reportsPageTitle).toContain('Certificate Reports');
|
|
|
|
// Verify filter form is present
|
|
const filterForm = page.locator('form.hvac-certificate-filters');
|
|
await expect(filterForm).toBeVisible();
|
|
|
|
// STEP 7a: Test event filtering
|
|
console.log('Step 7a: Testing event filtering...');
|
|
await certificatePage.searchCertificates(eventTitle);
|
|
|
|
// Verify certificates exist after event filtering
|
|
const certificateCount = await certificatePage.getCertificateCount();
|
|
console.log(`Found ${certificateCount} certificates for event: ${eventTitle}`);
|
|
expect(certificateCount).toBeGreaterThan(0);
|
|
|
|
// STEP 7b: Test attendee filtering
|
|
console.log('Step 7b: Testing attendee filtering...');
|
|
|
|
// Testing partial name search
|
|
const searchTerm = 'Test Attendee';
|
|
await certificatePage.searchAttendee(searchTerm);
|
|
|
|
// Verify certificates exist after attendee filtering
|
|
const nameFilteredCount = await certificatePage.getCertificateCount();
|
|
console.log(`Found ${nameFilteredCount} certificates for attendee search: ${searchTerm}`);
|
|
|
|
// Reset filters
|
|
await certificatePage.resetFilters();
|
|
console.log('Filters reset');
|
|
|
|
// Apply event filter again
|
|
await certificatePage.searchCertificates(eventTitle);
|
|
|
|
// STEP 7c: Test certificate viewing
|
|
console.log('Step 7c: Testing certificate viewing...');
|
|
if (certificateCount > 0) {
|
|
console.log('Viewing certificate...');
|
|
await certificatePage.viewCertificate(0);
|
|
|
|
// Verify certificate preview is visible
|
|
const preview = page.locator('.hvac-certificate-preview');
|
|
await expect(preview).toBeVisible();
|
|
|
|
// Close preview
|
|
await certificatePage.closePreview();
|
|
|
|
// Verify preview is closed
|
|
await expect(preview).not.toBeVisible();
|
|
}
|
|
|
|
// STEP 8: Advanced certificate management (if supported)
|
|
console.log('Step 8: Testing advanced certificate features...');
|
|
try {
|
|
// Test email delivery (if available)
|
|
const emailButton = page.locator('button:has-text("Email Certificates"), a:has-text("Email Certificates")');
|
|
if (await emailButton.isVisible()) {
|
|
console.log('Email certificates feature detected, testing...');
|
|
// Implementation would depend on the specific UI and functionality
|
|
// Just capture screenshot for now
|
|
await page.screenshot({ path: `${Config.screenshotPath}/email-certificates.png` });
|
|
} else {
|
|
console.log('Email certificates feature not found, skipping...');
|
|
}
|
|
|
|
// Test certificate revocation (if available)
|
|
const revokeButton = page.locator('button:has-text("Revoke"), a:has-text("Revoke")');
|
|
if (await revokeButton.isVisible()) {
|
|
console.log('Certificate revocation feature detected, testing...');
|
|
// For safety, don't actually revoke during test
|
|
await page.screenshot({ path: `${Config.screenshotPath}/revoke-certificate.png` });
|
|
} else {
|
|
console.log('Certificate revocation feature not found, skipping...');
|
|
}
|
|
} catch (error) {
|
|
console.log(`Advanced certificate features not fully implemented: ${error.message}`);
|
|
}
|
|
|
|
// STEP 9: Return to dashboard and verify event statistics
|
|
console.log('Step 9: Verifying event statistics...');
|
|
await dashboardPage.navigate();
|
|
|
|
// Check if event appears in dashboard statistics
|
|
const statsSection = page.locator('.hvac-dashboard-stats');
|
|
if (await statsSection.isVisible()) {
|
|
console.log('Dashboard statistics section is visible');
|
|
|
|
// Get current event count
|
|
const totalEventsCount = await dashboardPage.getEventCount();
|
|
console.log(`Total events count: ${totalEventsCount}`);
|
|
|
|
// This should be at least 1 since we created an event
|
|
expect(totalEventsCount).toBeGreaterThan(0);
|
|
} else {
|
|
console.log('Dashboard statistics section not found, skipping...');
|
|
}
|
|
} catch (error) {
|
|
console.error('Error during trainer journey test:', error.message);
|
|
// Take a screenshot for debugging
|
|
await page.screenshot({ path: `${Config.screenshotPath}/error-trainer-journey.png` });
|
|
throw error;
|
|
}
|
|
|
|
console.log('Trainer journey with certificates completed successfully');
|
|
}); |