upskill-event-manager/wordpress-dev/tests/e2e/trainer-profile.spec.ts

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.*/);
});
});