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
This commit is contained in:
bengizmo 2025-05-21 10:03:09 -03:00
parent 7abd608598
commit f24b72dc64
2 changed files with 209 additions and 3 deletions

View file

@ -0,0 +1,205 @@
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);
});

View file

@ -5,19 +5,20 @@
"scripts": {
"test": "playwright test",
"test:debug": "playwright test --debug",
"test:cert": "playwright test tests/e2e/certificates.test.ts",
"test:cert:gen": "playwright test tests/e2e/certificate-generation-checked-in.test.ts",
"report": "playwright show-report"
},
"dependencies": {
"@playwright/test": "^1.40.0",
"dotenv": "^16.3.1",
"jsdom": "^22.1.0",
"playwright": "^1.51.1",
"ssh2": "^1.14.0"
},
"devDependencies": {
"@playwright/test": "^1.40.0",
"@types/jsdom": "^21.1.6",
"@types/node": "^20.9.0",
"@types/ssh2": "^1.11.18",
"typescript": "^5.2.2"
}
}
}