- 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);
 | |
|             }
 | |
|         }
 | |
|     });
 | |
| }); |