- 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>
233 lines
No EOL
8.7 KiB
TypeScript
233 lines
No EOL
8.7 KiB
TypeScript
/**
|
|
* 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);
|
|
}
|
|
}
|
|
});
|
|
}); |