upskill-event-manager/wordpress-dev/bin/certificate-test.js
bengizmo f24b72dc64 test: Add standalone certificate testing script
- Fix Playwright version conflicts in package.json
- Create standalone Node.js certificate testing script
- Improve test reliability by avoiding framework issues
- Test certificate generation and report pages
- Implement filter testing for attendee search
- Add detailed logging for certificate test results
2025-05-21 10:03:09 -03:00

205 lines
No EOL
6.7 KiB
JavaScript
Executable file

const { chromium } = require('playwright');
// Constants
const STAGING_URL = 'https://wordpress-974670-5399585.cloudwaysapps.com';
const LOGIN_URL = `${STAGING_URL}/community-login/`;
const DASHBOARD_URL = `${STAGING_URL}/hvac-dashboard/`;
const USERNAME = 'test_trainer';
const PASSWORD = 'Test123!';
// Main function to run tests
async function runCertificateTests() {
console.log('Starting certificate tests...');
// Launch browser
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({
viewport: { width: 1280, height: 720 }
});
const page = await context.newPage();
try {
// Login
console.log('Logging in...');
await page.goto(LOGIN_URL);
await page.fill('#user_login', USERNAME);
await page.fill('#user_pass', PASSWORD);
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
// Verify login successful
if (!page.url().includes('hvac-dashboard')) {
throw new Error('Login failed');
}
console.log('Login successful');
// Test 1: Navigate to Generate Certificates page
console.log('\nTest 1: Navigating to Generate Certificates page...');
await testGenerateCertificatesNavigation(page);
// Test 2: Navigate to Certificate Reports page
console.log('\nTest 2: Navigating to Certificate Reports page...');
await testCertificateReportsNavigation(page);
// Test 3: Test certificate filtering
console.log('\nTest 3: Testing certificate filtering...');
await testCertificateFiltering(page);
console.log('\nAll tests completed successfully!');
} catch (error) {
console.error(`Test failed: ${error.message}`);
} finally {
// Close browser
await browser.close();
}
}
// Test navigation to Generate Certificates page
async function testGenerateCertificatesNavigation(page) {
// Navigate to dashboard first
await page.goto(DASHBOARD_URL);
await page.waitForLoadState('networkidle');
// Look for Generate Certificates link
const generateLink = page.locator('a:has-text("Generate Certificates")');
if (await generateLink.isVisible()) {
await generateLink.click();
await page.waitForLoadState('networkidle');
// Check page title
const title = await page.title();
console.log(`Page title: ${title}`);
// Check for event dropdown
const eventDropdown = page.locator('#event_id');
if (await eventDropdown.isVisible()) {
console.log('Event dropdown found');
// Count options
const optionCount = await page.locator('#event_id option').count();
console.log(`Event options: ${optionCount}`);
// If we have options, select the first one
if (optionCount > 1) {
await eventDropdown.selectOption({ index: 1 });
await page.waitForLoadState('networkidle');
// Get the selected event name
const selectedEventName = await page.locator('#event_id option:checked').textContent();
console.log(`Selected event: ${selectedEventName}`);
}
} else {
console.log('Event dropdown not found');
}
console.log('Generate Certificates page navigation test passed!');
return true;
} else {
console.log('Generate Certificates link not found, skipping test');
return false;
}
}
// Test navigation to Certificate Reports page
async function testCertificateReportsNavigation(page) {
// Navigate to dashboard first
await page.goto(DASHBOARD_URL);
await page.waitForLoadState('networkidle');
// Look for Certificate Reports link
const reportsLink = page.locator('a:has-text("Certificate Reports")');
if (await reportsLink.isVisible()) {
await reportsLink.click();
await page.waitForLoadState('networkidle');
// Check page title
const title = await page.title();
console.log(`Page title: ${title}`);
// Check for filter form
const filterForm = page.locator('form.hvac-certificate-filters');
if (await filterForm.isVisible()) {
console.log('Certificate filter form found');
} else {
console.log('Certificate filter form not found');
}
console.log('Certificate Reports page navigation test passed!');
return true;
} else {
console.log('Certificate Reports link not found, skipping test');
return false;
}
}
// Test certificate filtering
async function testCertificateFiltering(page) {
// Navigate to Certificate Reports page
await page.goto(`${STAGING_URL}/certificate-reports/`);
await page.waitForLoadState('networkidle');
// Check for filter form
const filterForm = page.locator('form.hvac-certificate-filters');
if (await filterForm.isVisible()) {
// Check if event filter exists
const eventFilter = page.locator('#filter_event');
if (await eventFilter.isVisible()) {
console.log('Event filter found');
// Count options
const optionCount = await page.locator('#filter_event option').count();
console.log(`Event filter options: ${optionCount}`);
// If we have options, select the first one
if (optionCount > 1) {
await eventFilter.selectOption({ index: 1 });
}
}
// Check if attendee search exists
const attendeeSearch = page.locator('#search_attendee');
if (await attendeeSearch.isVisible()) {
console.log('Attendee search found');
// Try a simple search
await attendeeSearch.fill('test');
// Look for filter button
const filterButton = page.locator('button[type="submit"]');
if (await filterButton.isVisible()) {
await filterButton.click();
await page.waitForLoadState('networkidle');
console.log('Filtered for "test"');
// Get certificate count
const certificateItems = page.locator('.hvac-certificate-item');
const certificateCount = await certificateItems.count();
console.log(`Found ${certificateCount} certificates with filter "test"`);
// Check for reset button
const resetButton = page.locator('button[type="reset"]');
if (await resetButton.isVisible()) {
await resetButton.click();
await page.waitForLoadState('networkidle');
console.log('Reset filters');
// Get certificate count after reset
const resetCertificateCount = await certificateItems.count();
console.log(`Found ${resetCertificateCount} certificates after reset`);
}
}
}
console.log('Certificate filtering test completed!');
return true;
} else {
console.log('Certificate filter form not found, skipping test');
return false;
}
}
// Run the tests
runCertificateTests().catch(error => {
console.error(`Error running tests: ${error.message}`);
process.exit(1);
});