- Add welcome guide modal functionality tests with navigation and dismissal - Add tooltip system tests for hover behavior and positioning - Add documentation page tests for content accuracy and navigation - Add integration tests for complete user journey through help features - Test cookie persistence, accessibility, and cross-page functionality - Verify asset loading and JavaScript initialization 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			344 lines
		
	
	
		
			No EOL
		
	
	
		
			14 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			344 lines
		
	
	
		
			No EOL
		
	
	
		
			14 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * Help System - Documentation Page E2E Tests
 | |
|  * 
 | |
|  * Tests the documentation page functionality including:
 | |
|  * - Page content and structure
 | |
|  * - Navigation menu functionality
 | |
|  * - FAQ section
 | |
|  * - Links and buttons
 | |
|  */
 | |
| 
 | |
| import { test, expect } from '@playwright/test';
 | |
| import { STAGING_URL, PATHS, TIMEOUTS } from './config/staging-config';
 | |
| 
 | |
| test.describe('Help System - Documentation Page @help @documentation', () => {
 | |
|     
 | |
|     test.beforeEach(async ({ page }) => {
 | |
|         // Login as trainer before each test
 | |
|         await page.goto(PATHS.login);
 | |
|         await page.fill('#user_login', 'test_trainer');
 | |
|         await page.fill('#user_pass', 'Test123!');
 | |
|         await page.click('#wp-submit');
 | |
|         await page.waitForLoadState('networkidle');
 | |
|     });
 | |
| 
 | |
|     test('Documentation page loads and displays correctly', async ({ page }) => {
 | |
|         console.log('Testing documentation page loading...');
 | |
|         
 | |
|         // Navigate to documentation page
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check page title
 | |
|         await expect(page.locator('h1')).toContainText('Trainer Documentation');
 | |
|         
 | |
|         // Check subtitle
 | |
|         await expect(page.locator('.hvac-doc-subtitle')).toContainText('Everything you need to know about managing your training events');
 | |
|         
 | |
|         // Check main container
 | |
|         await expect(page.locator('.hvac-documentation')).toBeVisible();
 | |
|         
 | |
|         console.log('✓ Documentation page loads correctly');
 | |
|         await page.screenshot({ path: 'test-results/screenshots/documentation-page.png' });
 | |
|     });
 | |
| 
 | |
|     test('Documentation navigation menu works', async ({ page }) => {
 | |
|         console.log('Testing documentation navigation menu...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check navigation menu exists
 | |
|         await expect(page.locator('.hvac-doc-navigation')).toBeVisible();
 | |
|         
 | |
|         // Test navigation links
 | |
|         const navLinks = [
 | |
|             { text: 'Getting Started', target: '#getting-started' },
 | |
|             { text: 'Managing Events', target: '#managing-events' },
 | |
|             { text: 'Attendee Management', target: '#attendee-management' },
 | |
|             { text: 'Certificates', target: '#certificates' },
 | |
|             { text: 'FAQ', target: '#faq' }
 | |
|         ];
 | |
|         
 | |
|         for (const link of navLinks) {
 | |
|             const navLink = page.locator('.hvac-doc-link').filter({ hasText: link.text });
 | |
|             await expect(navLink).toBeVisible();
 | |
|             await expect(navLink).toHaveAttribute('href', link.target);
 | |
|         }
 | |
|         
 | |
|         console.log('✓ Navigation menu structure is correct');
 | |
|     });
 | |
| 
 | |
|     test('Documentation smooth scrolling works', async ({ page }) => {
 | |
|         console.log('Testing documentation smooth scrolling...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Click on FAQ link and verify smooth scroll
 | |
|         const faqLink = page.locator('.hvac-doc-link[href="#faq"]');
 | |
|         await faqLink.click();
 | |
|         
 | |
|         // Wait for scroll animation
 | |
|         await page.waitForTimeout(1000);
 | |
|         
 | |
|         // Check that FAQ section is in view
 | |
|         const faqSection = page.locator('#faq');
 | |
|         await expect(faqSection).toBeInViewport();
 | |
|         
 | |
|         // Click on Getting Started link
 | |
|         const gettingStartedLink = page.locator('.hvac-doc-link[href="#getting-started"]');
 | |
|         await gettingStartedLink.click();
 | |
|         
 | |
|         await page.waitForTimeout(1000);
 | |
|         
 | |
|         // Check that Getting Started section is in view
 | |
|         const gettingStartedSection = page.locator('#getting-started');
 | |
|         await expect(gettingStartedSection).toBeInViewport();
 | |
|         
 | |
|         console.log('✓ Smooth scrolling navigation works');
 | |
|     });
 | |
| 
 | |
|     test('Getting Started section content is correct', async ({ page }) => {
 | |
|         console.log('Testing Getting Started section content...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check Getting Started section
 | |
|         const gettingStartedSection = page.locator('#getting-started');
 | |
|         await expect(gettingStartedSection).toBeVisible();
 | |
|         
 | |
|         // Check section header
 | |
|         await expect(gettingStartedSection.locator('h2')).toContainText('Getting Started');
 | |
|         
 | |
|         // Check for the three main cards
 | |
|         const cards = [
 | |
|             { title: '1. Complete Your Profile', buttonText: 'Edit Profile' },
 | |
|             { title: '2. Create Your First Event', buttonText: 'Create Event' },
 | |
|             { title: '3. Monitor Your Dashboard', buttonText: 'View Dashboard' }
 | |
|         ];
 | |
|         
 | |
|         for (const card of cards) {
 | |
|             const cardElement = gettingStartedSection.locator('.hvac-doc-card').filter({ hasText: card.title });
 | |
|             await expect(cardElement).toBeVisible();
 | |
|             await expect(cardElement.locator('h3')).toContainText(card.title);
 | |
|             
 | |
|             // Check action button
 | |
|             const button = cardElement.locator('.hvac-doc-btn');
 | |
|             await expect(button).toContainText(card.buttonText);
 | |
|         }
 | |
|         
 | |
|         console.log('✓ Getting Started section content is correct');
 | |
|     });
 | |
| 
 | |
|     test('Managing Events section content is correct', async ({ page }) => {
 | |
|         console.log('Testing Managing Events section content...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Navigate to Managing Events section
 | |
|         const managingEventsSection = page.locator('#managing-events');
 | |
|         await expect(managingEventsSection).toBeVisible();
 | |
|         
 | |
|         // Check section header with icon
 | |
|         await expect(managingEventsSection.locator('h2')).toContainText('Managing Events');
 | |
|         await expect(managingEventsSection.locator('h2 i')).toHaveClass(/fa-calendar-alt/);
 | |
|         
 | |
|         // Check for key features
 | |
|         const features = [
 | |
|             'Event Creation Process',
 | |
|             'Key Event Features',
 | |
|             'Event Summary Page'
 | |
|         ];
 | |
|         
 | |
|         for (const feature of features) {
 | |
|             const featureElement = managingEventsSection.locator('.hvac-feature').filter({ hasText: feature });
 | |
|             await expect(featureElement).toBeVisible();
 | |
|         }
 | |
|         
 | |
|         // Check event creation process steps
 | |
|         const processSteps = ['Draft:', 'Review:', 'Published:'];
 | |
|         for (const step of processSteps) {
 | |
|             await expect(managingEventsSection).toContainText(step);
 | |
|         }
 | |
|         
 | |
|         console.log('✓ Managing Events section content is correct');
 | |
|     });
 | |
| 
 | |
|     test('FAQ section content is comprehensive', async ({ page }) => {
 | |
|         console.log('Testing FAQ section content...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Navigate to FAQ section
 | |
|         const faqSection = page.locator('#faq');
 | |
|         await expect(faqSection).toBeVisible();
 | |
|         
 | |
|         // Check section header with icon
 | |
|         await expect(faqSection.locator('h2')).toContainText('Frequently Asked Questions');
 | |
|         await expect(faqSection.locator('h2 i')).toHaveClass(/fa-question-circle/);
 | |
|         
 | |
|         // Check for expected FAQ items
 | |
|         const expectedFAQs = [
 | |
|             'How do I get paid for my events?',
 | |
|             'How long does event review take?',
 | |
|             'Can I modify events after they\'re published?',
 | |
|             'What if I need to cancel an event?',
 | |
|             'How do I improve my event visibility?',
 | |
|             'Can I offer different types of training?',
 | |
|             'What support is available?'
 | |
|         ];
 | |
|         
 | |
|         for (const faq of expectedFAQs) {
 | |
|             const faqItem = faqSection.locator('.hvac-faq-item').filter({ hasText: faq });
 | |
|             await expect(faqItem).toBeVisible();
 | |
|             await expect(faqItem.locator('h3')).toContainText(faq);
 | |
|         }
 | |
|         
 | |
|         // Check that FAQ answers contain relevant information
 | |
|         await expect(faqSection).toContainText('100%');  // Revenue info
 | |
|         await expect(faqSection).toContainText('Stripe'); // Payment processor
 | |
|         await expect(faqSection).toContainText('1-2 business days'); // Review time
 | |
|         
 | |
|         console.log('✓ FAQ section content is comprehensive');
 | |
|         await page.screenshot({ path: 'test-results/screenshots/faq-section.png' });
 | |
|     });
 | |
| 
 | |
|     test('Documentation action links work correctly', async ({ page }) => {
 | |
|         console.log('Testing documentation action links...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Test Edit Profile link
 | |
|         const editProfileLink = page.locator('.hvac-doc-btn').filter({ hasText: 'Edit Profile' });
 | |
|         await expect(editProfileLink).toHaveAttribute('href', '/trainer-profile');
 | |
|         
 | |
|         // Test Create Event link
 | |
|         const createEventLink = page.locator('.hvac-doc-btn').filter({ hasText: 'Create Event' });
 | |
|         await expect(createEventLink).toHaveAttribute('href', '/manage-event');
 | |
|         
 | |
|         // Test View Dashboard link
 | |
|         const dashboardLink = page.locator('.hvac-doc-btn').filter({ hasText: 'View Dashboard' });
 | |
|         await expect(dashboardLink).toHaveAttribute('href', '/hvac-dashboard');
 | |
|         
 | |
|         console.log('✓ Documentation action links are correct');
 | |
|     });
 | |
| 
 | |
|     test('Documentation page is accessible via help buttons', async ({ page }) => {
 | |
|         console.log('Testing documentation page accessibility via help buttons...');
 | |
|         
 | |
|         // From dashboard
 | |
|         await page.goto(PATHS.dashboard);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         const helpButtonDashboard = page.locator('a').filter({ hasText: 'Help' });
 | |
|         if (await helpButtonDashboard.count() > 0) {
 | |
|             await expect(helpButtonDashboard).toHaveAttribute('href', '/hvac-documentation/');
 | |
|             console.log('✓ Help button found on dashboard');
 | |
|         }
 | |
|         
 | |
|         // From profile page
 | |
|         await page.goto(PATHS.profile);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         const helpButtonProfile = page.locator('a').filter({ hasText: 'Help' });
 | |
|         if (await helpButtonProfile.count() > 0) {
 | |
|             await expect(helpButtonProfile).toHaveAttribute('href', '/hvac-documentation/');
 | |
|             console.log('✓ Help button found on profile page');
 | |
|         }
 | |
|         
 | |
|         // Test clicking help button actually navigates to documentation
 | |
|         if (await helpButtonProfile.count() > 0) {
 | |
|             await helpButtonProfile.click();
 | |
|             await page.waitForLoadState('networkidle');
 | |
|             
 | |
|             await expect(page).toHaveURL(/hvac-documentation/);
 | |
|             await expect(page.locator('h1')).toContainText('Trainer Documentation');
 | |
|             console.log('✓ Help button navigation works');
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     test('Documentation page responsive design works', async ({ page }) => {
 | |
|         console.log('Testing documentation page responsive design...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Test desktop view
 | |
|         await page.setViewportSize({ width: 1200, height: 800 });
 | |
|         await expect(page.locator('.hvac-documentation')).toBeVisible();
 | |
|         
 | |
|         // Test tablet view
 | |
|         await page.setViewportSize({ width: 768, height: 1024 });
 | |
|         await expect(page.locator('.hvac-documentation')).toBeVisible();
 | |
|         
 | |
|         // Test mobile view
 | |
|         await page.setViewportSize({ width: 375, height: 667 });
 | |
|         await expect(page.locator('.hvac-documentation')).toBeVisible();
 | |
|         
 | |
|         // Check that navigation menu adapts
 | |
|         const navMenu = page.locator('.hvac-doc-nav');
 | |
|         await expect(navMenu).toBeVisible();
 | |
|         
 | |
|         console.log('✓ Documentation page responsive design works');
 | |
|         await page.screenshot({ path: 'test-results/screenshots/documentation-mobile.png' });
 | |
|     });
 | |
| 
 | |
|     test('Documentation sections have proper styling', async ({ page }) => {
 | |
|         console.log('Testing documentation styling...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check that all sections have the correct CSS classes
 | |
|         const sections = ['#getting-started', '#managing-events', '#attendee-management', '#certificates', '#faq'];
 | |
|         
 | |
|         for (const sectionId of sections) {
 | |
|             const section = page.locator(sectionId);
 | |
|             await expect(section).toHaveClass(/hvac-doc-section/);
 | |
|             
 | |
|             // Check section headers have icons
 | |
|             const header = section.locator('h2');
 | |
|             await expect(header).toBeVisible();
 | |
|             
 | |
|             const icon = header.locator('i');
 | |
|             if (await icon.count() > 0) {
 | |
|                 await expect(icon).toHaveClass(/fa-/);
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         // Check cards have proper styling
 | |
|         const docCards = page.locator('.hvac-doc-card');
 | |
|         const cardCount = await docCards.count();
 | |
|         expect(cardCount).toBeGreaterThan(0);
 | |
|         
 | |
|         console.log(`✓ Found ${cardCount} properly styled documentation cards`);
 | |
|     });
 | |
| 
 | |
|     test('Documentation content is accurate and helpful', async ({ page }) => {
 | |
|         console.log('Testing documentation content accuracy...');
 | |
|         
 | |
|         await page.goto(`${STAGING_URL}/hvac-documentation/`);
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Check for key platform information
 | |
|         await expect(page.getByText('100% of your ticket sales')).toBeVisible();
 | |
|         await expect(page.getByText('minus standard Stripe processing fees')).toBeVisible();
 | |
|         await expect(page.getByText('1-2 business days')).toBeVisible(); // Review process time
 | |
|         
 | |
|         // Check for feature mentions
 | |
|         await expect(page.getByText('certificates')).toBeVisible();
 | |
|         await expect(page.getByText('check-in')).toBeVisible();
 | |
|         await expect(page.getByText('email')).toBeVisible();
 | |
|         
 | |
|         // Check for proper support information
 | |
|         await expect(page.getByText('support team')).toBeVisible();
 | |
|         await expect(page.getByText('documentation')).toBeVisible();
 | |
|         
 | |
|         console.log('✓ Documentation content is accurate and helpful');
 | |
|     });
 | |
| }); |