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:
parent
7abd608598
commit
f24b72dc64
2 changed files with 209 additions and 3 deletions
205
wordpress-dev/bin/certificate-test.js
Executable file
205
wordpress-dev/bin/certificate-test.js
Executable 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);
|
||||
});
|
||||
|
|
@ -5,16 +5,17 @@
|
|||
"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",
|
||||
|
|
|
|||
Loading…
Reference in a new issue