104 lines
No EOL
3.6 KiB
TypeScript
104 lines
No EOL
3.6 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { LoginPage } from './pages/LoginPage';
|
|
import { DashboardPage } from './pages/DashboardPage';
|
|
import { ProfilePage } from './pages/ProfilePage';
|
|
|
|
test.describe('Trainer Profile Page (using Page Object Model)', () => {
|
|
// 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 display all profile sections and data', async ({ page }) => {
|
|
// Navigate to profile page
|
|
const profilePage = new ProfilePage(page);
|
|
await profilePage.navigate();
|
|
|
|
// Verify all sections are present
|
|
await profilePage.verifyAllSectionsPresent();
|
|
|
|
// Get and verify personal information
|
|
const personalInfo = await profilePage.getPersonalInfo();
|
|
expect(personalInfo.displayName).toBeTruthy();
|
|
expect(personalInfo.email).toBeTruthy();
|
|
|
|
// Get and verify business information
|
|
const businessInfo = await profilePage.getBusinessInfo();
|
|
expect(businessInfo.businessName).toBeTruthy();
|
|
|
|
// Get and verify training statistics
|
|
const trainingStats = await profilePage.getTrainingStats();
|
|
expect(trainingStats.totalEvents).toBeTruthy();
|
|
expect(trainingStats.upcomingEvents).toBeTruthy();
|
|
expect(trainingStats.pastEvents).toBeTruthy();
|
|
expect(trainingStats.ticketsSold).toBeTruthy();
|
|
expect(trainingStats.totalRevenue).toBeTruthy();
|
|
|
|
// Save screenshot for verification
|
|
await page.screenshot({ path: './test-results/trainer-profile-full.png', fullPage: true });
|
|
});
|
|
|
|
test('should allow navigation to other pages', async ({ page }) => {
|
|
// Navigate to profile page
|
|
const profilePage = new ProfilePage(page);
|
|
await profilePage.navigate();
|
|
|
|
// Test navigation to dashboard
|
|
await profilePage.goToDashboard();
|
|
await expect(page).toHaveURL(/.*\/hvac-dashboard\//);
|
|
|
|
// Return to profile page
|
|
await profilePage.navigate();
|
|
|
|
// Test navigation to create event
|
|
await profilePage.goToCreateEvent();
|
|
await expect(page).toHaveURL(/.*\/manage-event\//);
|
|
|
|
// Return to profile page
|
|
await profilePage.navigate();
|
|
|
|
// Test navigation to my events
|
|
await profilePage.goToMyEvents();
|
|
await expect(page).toHaveURL(/.*\/my-events\//);
|
|
});
|
|
|
|
test('should navigate between dashboard and profile', async ({ page }) => {
|
|
// Go to dashboard first
|
|
const dashboardPage = new DashboardPage(page);
|
|
await dashboardPage.navigate();
|
|
|
|
// Find and click profile link on dashboard
|
|
await page.locator('a[href*="/trainer-profile/"]').click();
|
|
await expect(page).toHaveURL(/.*\/trainer-profile\//);
|
|
|
|
// Verify we're on the profile page
|
|
const profilePage = new ProfilePage(page);
|
|
await expect(profilePage.pageTitle).toBeVisible();
|
|
|
|
// Go back to dashboard
|
|
await profilePage.goToDashboard();
|
|
await expect(page).toHaveURL(/.*\/hvac-dashboard\//);
|
|
await expect(dashboardPage.pageTitle).toBeVisible();
|
|
});
|
|
|
|
test('should redirect when not logged in', async ({ page }) => {
|
|
// Create a new context without login
|
|
const profilePage = new ProfilePage(page);
|
|
|
|
// Logout first
|
|
await page.goto('/wp-login.php?action=logout');
|
|
await page.waitForURL(/.*\/community-login.*/);
|
|
|
|
// Try to navigate to profile page
|
|
await page.goto('/trainer-profile/');
|
|
|
|
// Should redirect to login page
|
|
await expect(page).toHaveURL(/.*\/community-login.*/);
|
|
});
|
|
}); |