150 lines
No EOL
5.3 KiB
TypeScript
150 lines
No EOL
5.3 KiB
TypeScript
import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
// Constants
|
|
// STAGING_URL is now imported from config
|
|
const LOGIN_URL = PATHS.login;
|
|
const DASHBOARD_URL = PATHS.dashboard;
|
|
const USERNAME = 'test_trainer';
|
|
const PASSWORD = 'Test123!';
|
|
|
|
test.describe('Certificate Functionality Tests', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
// Login before each test
|
|
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 was successful
|
|
await expect(page).toHaveURL(/hvac-dashboard/);
|
|
});
|
|
|
|
test('Should navigate to Generate Certificates page', async ({ 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")');
|
|
await expect(generateLink).toBeVisible();
|
|
|
|
// Click the link
|
|
await generateLink.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Check page title
|
|
const title = await page.title();
|
|
expect(title).toContain('Generate Certificates');
|
|
|
|
// Check for event dropdown
|
|
const eventDropdown = page.locator('#event_id');
|
|
await expect(eventDropdown).toBeVisible();
|
|
|
|
// Count options to verify dropdown is populated
|
|
const optionCount = await page.locator('#event_id option').count();
|
|
expect(optionCount).toBeGreaterThan(1);
|
|
});
|
|
|
|
test('Should navigate to Certificate Reports page', async ({ 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")');
|
|
await expect(reportsLink).toBeVisible();
|
|
|
|
// Click the link
|
|
await reportsLink.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Check page title
|
|
const title = await page.title();
|
|
expect(title).toContain('Certificate Reports');
|
|
|
|
// Check for filter form
|
|
const filterForm = page.locator('form.hvac-certificate-filters');
|
|
await expect(filterForm).toBeVisible();
|
|
});
|
|
|
|
test('Should filter certificates by event', async ({ 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');
|
|
await expect(filterForm).toBeVisible();
|
|
|
|
// Check if event filter exists
|
|
const eventFilter = page.locator('#filter_event');
|
|
await expect(eventFilter).toBeVisible();
|
|
|
|
// Get options count
|
|
const optionCount = await page.locator('#filter_event option').count();
|
|
|
|
// Test different filter options
|
|
if (optionCount > 1) {
|
|
// Select the first non-empty option
|
|
await eventFilter.selectOption({ index: 1 });
|
|
|
|
// Apply filter
|
|
const filterButton = page.locator('button[type="submit"]');
|
|
await filterButton.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Log the filter results (can't guarantee there will be certificates)
|
|
const certificateItems = page.locator('.hvac-certificate-item');
|
|
const certificateCount = await certificateItems.count();
|
|
console.log(`Found ${certificateCount} certificates after filtering by event`);
|
|
}
|
|
});
|
|
|
|
test('Should filter certificates by attendee', async ({ 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');
|
|
await expect(filterForm).toBeVisible();
|
|
|
|
// Check if attendee search exists
|
|
const attendeeSearch = page.locator('#search_attendee');
|
|
|
|
// Some versions may not have this feature yet
|
|
if (await attendeeSearch.isVisible()) {
|
|
// Try a simple search
|
|
await attendeeSearch.fill('test');
|
|
|
|
// Apply filter
|
|
const filterButton = page.locator('button[type="submit"]');
|
|
await filterButton.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify filter was applied
|
|
const currentSearchValue = await attendeeSearch.inputValue();
|
|
expect(currentSearchValue).toBe('test');
|
|
|
|
// Log the filter results
|
|
const certificateItems = page.locator('.hvac-certificate-item');
|
|
const certificateCount = await certificateItems.count();
|
|
console.log(`Found ${certificateCount} certificates with attendee search "test"`);
|
|
|
|
// Reset filters
|
|
const resetButton = page.locator('button[type="reset"]');
|
|
if (await resetButton.isVisible()) {
|
|
await resetButton.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify reset worked
|
|
const searchValue = await attendeeSearch.inputValue();
|
|
expect(searchValue).toBe('');
|
|
}
|
|
} else {
|
|
console.log('Attendee search not available, skipping test');
|
|
}
|
|
});
|
|
}); |