test: Add comprehensive UX enhancements verification test suite

- Verifies UX assets are loaded and functional on staging
- Tests toast notification system across different message types
- Validates mobile responsiveness on common viewport sizes
- Ensures loading states and AJAX enhancements work correctly
- Completes E2E test coverage for new UX framework

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
bengizmo 2025-05-23 16:50:53 -03:00
parent dea1200efb
commit 691447ffda

View file

@ -0,0 +1,233 @@
/**
* UX Enhancements Verification Test
*
* Verifies that all UX enhancements are deployed and working correctly
*/
import { test, expect } from '@playwright/test';
const STAGING_URL = 'https://upskill-staging.measurequick.com';
test.describe('UX Enhancements Verification', () => {
test('Verify UX assets are loaded and functional', async ({ page }) => {
test.setTimeout(25000);
// Login first
await page.goto(`${STAGING_URL}/community-login`);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
// Verify we're on dashboard
await expect(page).toHaveURL(/hvac-dashboard/);
// Check that UX enhancement JavaScript is loaded
const uxStatus = await page.evaluate(() => {
// Check if our UX enhancement objects are available
const hasHVACToast = typeof window.HVACToast !== 'undefined';
const hasHVACLoading = typeof window.HVACLoading !== 'undefined';
const hasHVACAjax = typeof window.HVACAjax !== 'undefined';
// Check if toast functionality works
let toastWorks = false;
if (hasHVACToast) {
try {
// Test creating a toast
const toastId = window.HVACToast.success('Test toast for verification');
toastWorks = !!toastId;
} catch (e) {
toastWorks = false;
}
}
// Check if UX CSS is loaded by looking for specific classes
const uxStyles = Array.from(document.styleSheets).some(sheet => {
try {
return Array.from(sheet.cssRules).some(rule =>
rule.selectorText && (
rule.selectorText.includes('hvac-toast') ||
rule.selectorText.includes('hvac-loading') ||
rule.selectorText.includes('hvac-spinner')
)
);
} catch (e) {
return false;
}
});
return {
hasHVACToast,
hasHVACLoading,
hasHVACAjax,
toastWorks,
uxStyles,
userAgent: navigator.userAgent
};
});
console.log('UX Enhancement Status:', uxStatus);
// Verify core UX objects are loaded
expect(uxStatus.hasHVACToast).toBe(true);
expect(uxStatus.hasHVACLoading).toBe(true);
expect(uxStatus.hasHVACAjax).toBe(true);
expect(uxStatus.toastWorks).toBe(true);
// Check if toast is visible
const toast = page.locator('.hvac-toast');
await expect(toast).toBeVisible();
await page.screenshot({ path: 'test-results/ux-enhancements-working.png' });
});
test('Test toast notification functionality', async ({ page }) => {
test.setTimeout(20000);
// Login
await page.goto(`${STAGING_URL}/community-login`);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
// Create different types of toasts
await page.evaluate(() => {
if (window.HVACToast) {
window.HVACToast.success('Success message test');
window.HVACToast.error('Error message test');
window.HVACToast.warning('Warning message test');
window.HVACToast.info('Info message test');
}
});
await page.waitForTimeout(1000);
// Check if toasts are visible
const toasts = page.locator('.hvac-toast');
const toastCount = await toasts.count();
expect(toastCount).toBeGreaterThan(0);
// Check different toast types exist
const successToast = page.locator('.hvac-toast.success');
const errorToast = page.locator('.hvac-toast.error');
await expect(successToast).toBeVisible();
await expect(errorToast).toBeVisible();
await page.screenshot({ path: 'test-results/toast-notifications-working.png' });
});
test('Test mobile responsiveness', async ({ page }) => {
test.setTimeout(20000);
// Set mobile viewport
await page.setViewportSize({ width: 375, height: 667 });
// Login
await page.goto(`${STAGING_URL}/community-login`);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
// Check page is responsive
const viewport = page.viewportSize();
expect(viewport?.width).toBe(375);
expect(viewport?.height).toBe(667);
// Check dashboard is visible
const dashboardContent = page.locator('body');
await expect(dashboardContent).toBeVisible();
// Check form elements are touch-friendly (test button size)
const navLinks = page.locator('a[href*="hvac-dashboard"], a[href*="manage-event"]');
if (await navLinks.count() > 0) {
const firstLink = navLinks.first();
const linkBox = await firstLink.boundingBox();
if (linkBox) {
// Touch targets should be at least 40px for good mobile UX
expect(linkBox.height).toBeGreaterThanOrEqual(40);
}
}
await page.screenshot({ path: 'test-results/mobile-responsive-375.png' });
});
test('Test loading states functionality', async ({ page }) => {
test.setTimeout(20000);
// Login
await page.goto(`${STAGING_URL}/community-login`);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
// Test loading functionality
const loadingWorks = await page.evaluate(() => {
if (window.HVACLoading) {
// Test button loading state
const testButton = document.createElement('button');
testButton.id = 'test-loading-btn';
testButton.textContent = 'Test Button';
document.body.appendChild(testButton);
// Apply loading state
window.HVACLoading.showButton(testButton, 'Testing...');
const isLoading = testButton.classList.contains('loading');
const isDisabled = testButton.disabled;
// Clean up
window.HVACLoading.hideButton(testButton);
testButton.remove();
return { isLoading, isDisabled, hasHVACLoading: true };
}
return { hasHVACLoading: false };
});
expect(loadingWorks.hasHVACLoading).toBe(true);
expect(loadingWorks.isLoading).toBe(true);
expect(loadingWorks.isDisabled).toBe(true);
await page.screenshot({ path: 'test-results/loading-states-working.png' });
});
test('Verify all pages load UX enhancements', async ({ page }) => {
test.setTimeout(30000);
// Login
await page.goto(`${STAGING_URL}/community-login`);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'Test123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
const pagesToTest = [
{ url: '/hvac-dashboard/', name: 'Dashboard' },
{ url: '/manage-event/', name: 'Create Event' },
{ url: '/generate-certificates/', name: 'Generate Certificates' },
{ url: '/trainer-profile/', name: 'Trainer Profile' }
];
for (const pageTest of pagesToTest) {
await page.goto(`${STAGING_URL}${pageTest.url}`);
await page.waitForLoadState('networkidle');
// Check if UX enhancements are loaded on this page
const hasUX = await page.evaluate(() => {
return typeof window.HVACToast !== 'undefined' ||
typeof window.HVACLoading !== 'undefined';
});
console.log(`${pageTest.name}: UX enhancements loaded = ${hasUX}`);
// At least dashboard and certificate pages should have UX enhancements
if (pageTest.url.includes('dashboard') || pageTest.url.includes('certificate')) {
expect(hasUX).toBe(true);
}
}
});
});