upskill-event-manager/wordpress-dev/tests/e2e/dashboard-layout.test.ts

76 lines
No EOL
2.9 KiB
TypeScript

/**
* Test for Dashboard Layout Improvements
*
* This test verifies that the dashboard stats section renders with
* proper row layout
*/
import { test, expect } from '@playwright/test';
test.describe('Trainer Dashboard Layout', () => {
test('should display stats section in a row layout', async ({ page }) => {
// Login Steps
await page.goto('/community-login/');
const usernameField = page.locator('#user_login');
const passwordField = page.locator('#user_pass');
const loginButton = page.locator('#wp-submit');
// Use environment variables or default test credentials
const username = process.env.TEST_USERNAME || 'test_trainer';
const password = process.env.TEST_PASSWORD || 'Test123!';
await usernameField.fill(username);
await passwordField.fill(password);
await loginButton.click();
// Wait for dashboard to load
await page.waitForURL('/hvac-dashboard/', { timeout: 15000 });
console.log('Successfully logged in and redirected to dashboard.');
// Take a screenshot for visual verification
await page.screenshot({ path: 'dashboard-stats-layout.png', fullPage: false });
// Verify that the stats section exists with row layout
const statsSection = page.locator('.hvac-stats-row');
await expect(statsSection).toBeVisible();
// Verify that we have multiple stat columns
const statColumns = page.locator('.hvac-stat-col');
const count = await statColumns.count();
expect(count).toBeGreaterThanOrEqual(4); // We should have at least 4 stat cards
// Check for horizontal layout (desktop view)
// This test confirms stats are in a row by verifying the second card is to the right of the first
if (page.viewportSize()?.width && page.viewportSize().width >= 768) {
const firstCard = await statColumns.nth(0).boundingBox();
const secondCard = await statColumns.nth(1).boundingBox();
if (firstCard && secondCard) {
// In row layout, the second card should be to the right of the first
expect(secondCard.x).toBeGreaterThan(firstCard.x);
console.log('Stats cards display in a row as expected (second card x-position is to the right of first card)');
}
} else {
console.log('Viewport too narrow for row layout test, cards may be stacked vertically');
}
// Check that all cards have same height for visual consistency
const heights = [];
for (let i = 0; i < Math.min(count, 4); i++) {
const box = await statColumns.nth(i).boundingBox();
if (box) {
heights.push(box.height);
}
}
// Check if all heights are approximately the same (within 5px tolerance)
if (heights.length >= 2) {
const baseHeight = heights[0];
for (let i = 1; i < heights.length; i++) {
expect(Math.abs(heights[i] - baseHeight)).toBeLessThanOrEqual(5);
}
console.log('All stat cards have consistent heights');
}
});
});