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