diff --git a/wordpress-dev/bin/certificate-test.js b/wordpress-dev/bin/certificate-test.js new file mode 100755 index 00000000..fad8e15e --- /dev/null +++ b/wordpress-dev/bin/certificate-test.js @@ -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); +}); \ No newline at end of file diff --git a/wordpress-dev/package.json b/wordpress-dev/package.json index bd7fc38e..1118d914 100644 --- a/wordpress-dev/package.json +++ b/wordpress-dev/package.json @@ -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" } -} +} \ No newline at end of file