- 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
205 lines
No EOL
6.7 KiB
JavaScript
Executable file
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);
|
|
}); |