132 lines
		
	
	
		
			No EOL
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			No EOL
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { test, expect } from '@playwright/test';
 | |
| import { LoginPage } from './pages/LoginPage';
 | |
| import { DashboardPage } from './pages/DashboardPage';
 | |
| 
 | |
| test.describe('Trainer Profile Page', () => {
 | |
|   // Define test variables
 | |
|   const testTrainerUsername = 'test_trainer';
 | |
|   const testTrainerPassword = 'Test123!';
 | |
|   
 | |
|   test.beforeEach(async ({ page }) => {
 | |
|     // Log in before each test
 | |
|     const loginPage = new LoginPage(page);
 | |
|     await loginPage.navigate();
 | |
|     await loginPage.login(testTrainerUsername, testTrainerPassword);
 | |
|   });
 | |
|   
 | |
|   test('should be accessible from dashboard', async ({ page }) => {
 | |
|     // Navigate to dashboard
 | |
|     const dashboardPage = new DashboardPage(page);
 | |
|     await dashboardPage.navigate();
 | |
|     
 | |
|     // Click on the profile link
 | |
|     const profileLink = page.locator('a[href*="/trainer-profile/"]');
 | |
|     await expect(profileLink).toBeVisible();
 | |
|     await profileLink.click();
 | |
|     
 | |
|     // Verify we're on the profile page
 | |
|     await expect(page).toHaveURL(/.*\/trainer-profile\//);
 | |
|     await expect(page.locator('h1:has-text("Trainer Profile")')).toBeVisible();
 | |
|   });
 | |
|   
 | |
|   test('should display user personal information', async ({ page }) => {
 | |
|     // Navigate directly to profile page
 | |
|     await page.goto('/trainer-profile/');
 | |
|     
 | |
|     // Check for personal information section
 | |
|     await expect(page.locator('h2:has-text("Personal Information")')).toBeVisible();
 | |
|     
 | |
|     // Check for basic user info
 | |
|     const emailElement = page.locator('text=Email:');
 | |
|     await expect(emailElement).toBeVisible();
 | |
|     
 | |
|     // Check for edit profile button
 | |
|     const editProfileButton = page.locator('a:has-text("Edit Profile")');
 | |
|     await expect(editProfileButton).toBeVisible();
 | |
|   });
 | |
|   
 | |
|   test('should display business information', async ({ page }) => {
 | |
|     // Navigate directly to profile page
 | |
|     await page.goto('/trainer-profile/');
 | |
|     
 | |
|     // Check for business information section
 | |
|     await expect(page.locator('h2:has-text("Business Information")')).toBeVisible();
 | |
|     
 | |
|     // Check for business name
 | |
|     const businessNameHeading = page.locator('.hvac-business-details h3');
 | |
|     await expect(businessNameHeading).toBeVisible();
 | |
|   });
 | |
|   
 | |
|   test('should display training information', async ({ page }) => {
 | |
|     // Navigate directly to profile page
 | |
|     await page.goto('/trainer-profile/');
 | |
|     
 | |
|     // Check for training information section
 | |
|     await expect(page.locator('h2:has-text("Training Information")')).toBeVisible();
 | |
|     
 | |
|     // Check for training categories
 | |
|     const trainingAudienceHeading = page.locator('h4:has-text("Training Audience")');
 | |
|     const trainingFormatsHeading = page.locator('h4:has-text("Training Formats")');
 | |
|     const trainingLocationsHeading = page.locator('h4:has-text("Training Locations")');
 | |
|     const trainingResourcesHeading = page.locator('h4:has-text("Training Resources")');
 | |
|     
 | |
|     await expect(trainingAudienceHeading).toBeVisible();
 | |
|     await expect(trainingFormatsHeading).toBeVisible();
 | |
|     await expect(trainingLocationsHeading).toBeVisible();
 | |
|     await expect(trainingResourcesHeading).toBeVisible();
 | |
|   });
 | |
|   
 | |
|   test('should display training statistics', async ({ page }) => {
 | |
|     // Navigate directly to profile page
 | |
|     await page.goto('/trainer-profile/');
 | |
|     
 | |
|     // Check for training statistics section
 | |
|     await expect(page.locator('h2:has-text("Training Statistics")')).toBeVisible();
 | |
|     
 | |
|     // Check for statistics cards
 | |
|     const totalEventsHeading = page.locator('h3:has-text("Total Events")');
 | |
|     const upcomingEventsHeading = page.locator('h3:has-text("Upcoming Events")');
 | |
|     const pastEventsHeading = page.locator('h3:has-text("Past Events")');
 | |
|     const ticketsSoldHeading = page.locator('h3:has-text("Tickets Sold")');
 | |
|     const totalRevenueHeading = page.locator('h3:has-text("Total Revenue")');
 | |
|     
 | |
|     await expect(totalEventsHeading).toBeVisible();
 | |
|     await expect(upcomingEventsHeading).toBeVisible();
 | |
|     await expect(pastEventsHeading).toBeVisible();
 | |
|     await expect(ticketsSoldHeading).toBeVisible();
 | |
|     await expect(totalRevenueHeading).toBeVisible();
 | |
|   });
 | |
|   
 | |
|   test('should have working navigation links', async ({ page }) => {
 | |
|     // Navigate directly to profile page
 | |
|     await page.goto('/trainer-profile/');
 | |
|     
 | |
|     // Check for dashboard navigation link
 | |
|     const dashboardLink = page.locator('a[href*="/hvac-dashboard/"]');
 | |
|     await expect(dashboardLink).toBeVisible();
 | |
|     
 | |
|     // Check for create event link
 | |
|     const createEventLink = page.locator('a[href*="/manage-event/"]');
 | |
|     await expect(createEventLink).toBeVisible();
 | |
|     
 | |
|     // Check for my events link
 | |
|     const myEventsLink = page.locator('a[href*="/my-events/"]');
 | |
|     await expect(myEventsLink).toBeVisible();
 | |
|     
 | |
|     // Check for logout link
 | |
|     const logoutLink = page.locator('a[href*="/wp-login.php?action=logout"]');
 | |
|     await expect(logoutLink).toBeVisible();
 | |
|   });
 | |
|   
 | |
|   test('should redirect to login page when not logged in', async ({ page }) => {
 | |
|     // Log out first
 | |
|     await page.goto('/wp-login.php?action=logout');
 | |
|     await page.waitForURL(/.*\/community-login.*/);
 | |
|     
 | |
|     // Try to access profile page directly
 | |
|     await page.goto('/trainer-profile/');
 | |
|     
 | |
|     // Should redirect to login page
 | |
|     await expect(page).toHaveURL(/.*\/community-login.*/);
 | |
|   });
 | |
| }); |