upskill-event-manager/wordpress-dev/tests/e2e/trainer-profile-edit.spec.ts
bengizmo 20a5be3e65 feat: Add trainer profile editing functionality
- Add profile edit form template
- Implement profile update handler with validation
- Add profile update shortcode registration
- Create E2E test for profile editing
- Support updating personal & business info, location info and training preferences
- Add password change functionality with validation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-20 09:47:22 -03:00

162 lines
No EOL
7.1 KiB
TypeScript

/**
* @fileoverview E2E Tests for trainer profile editing functionality.
* This test suite verifies that trainers can view, edit, and update their profiles.
*/
import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
// Test data
const TEST_USER = {
username: process.env.TEST_TRAINER_USERNAME || 'test_trainer',
password: process.env.TEST_TRAINER_PASSWORD || 'Test_password123'
};
const UPDATED_INFO = {
firstName: 'Updated',
lastName: 'Trainer',
displayName: 'Updated Trainer Profile',
bio: 'This is an updated bio from the automated test.',
businessName: 'Updated Training Co.',
businessPhone: '555-123-4567',
businessEmail: 'updated@example.com',
businessDesc: 'This is an updated business description from the automated test.'
};
test.describe('Trainer Profile Editing @trainer-profile', () => {
test.beforeEach(async ({ page }) => {
// Login before each test
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login(TEST_USER.username, TEST_USER.password);
// Verify we're logged in by checking if we're on the dashboard
const dashboardPage = new DashboardPage(page);
await expect(page).toHaveURL(/.*hvac-dashboard.*/);
await expect(dashboardPage.welcomeMessage).toBeVisible();
});
test('should navigate to edit profile page', async ({ page }) => {
// Navigate to trainer profile page first
await page.goto('/trainer-profile/');
await expect(page).toHaveURL(/.*trainer-profile.*/);
await expect(page.locator('h1')).toContainText('Trainer Profile');
// Click the edit profile button
await page.click('text=Edit Profile');
// Verify we're on the edit profile page
await expect(page).toHaveURL(/.*edit-profile.*/);
await expect(page.locator('h1')).toContainText('Edit Trainer Profile');
// Verify form is loaded with user's current info
await expect(page.locator('#first_name')).toBeVisible();
await expect(page.locator('#last_name')).toBeVisible();
await expect(page.locator('#display_name')).toBeVisible();
});
test('should update basic profile information', async ({ page }) => {
// Go directly to edit profile page
await page.goto('/edit-profile/');
// Clear and update form fields
await page.locator('#first_name').fill(UPDATED_INFO.firstName);
await page.locator('#last_name').fill(UPDATED_INFO.lastName);
await page.locator('#display_name').fill(UPDATED_INFO.displayName);
await page.locator('#description').fill(UPDATED_INFO.bio);
// Submit the form
await page.click('button[name="hvac_update_profile"]');
// Verify success message
await expect(page.locator('.hvac-message-success')).toBeVisible();
await expect(page.locator('.hvac-message-success')).toContainText('Your profile has been updated successfully');
// Navigate to profile page to verify changes
await page.goto('/trainer-profile/');
// Verify updated information is displayed
await expect(page.locator('.trainer-name')).toContainText(UPDATED_INFO.displayName);
await expect(page.locator('.trainer-bio')).toContainText(UPDATED_INFO.bio);
});
test('should update business information', async ({ page }) => {
// Go to edit profile page
await page.goto('/edit-profile/');
// Update business information
await page.locator('#business_name').fill(UPDATED_INFO.businessName);
await page.locator('#business_phone').fill(UPDATED_INFO.businessPhone);
await page.locator('#business_email').fill(UPDATED_INFO.businessEmail);
await page.locator('#business_description').fill(UPDATED_INFO.businessDesc);
// Submit the form
await page.click('button[name="hvac_update_profile"]');
// Verify success message
await expect(page.locator('.hvac-message-success')).toBeVisible();
// Navigate to profile page to verify changes
await page.goto('/trainer-profile/');
// Verify updated business information is displayed
await expect(page.locator('.business-name')).toContainText(UPDATED_INFO.businessName);
await expect(page.locator('.business-info')).toContainText(UPDATED_INFO.businessPhone);
await expect(page.locator('.business-info')).toContainText(UPDATED_INFO.businessEmail);
await expect(page.locator('.business-description')).toContainText(UPDATED_INFO.businessDesc);
});
test('should display appropriate validation errors', async ({ page }) => {
// Go to edit profile page
await page.goto('/edit-profile/');
// Clear required fields
await page.locator('#first_name').fill('');
await page.locator('#last_name').fill('');
await page.locator('#user_email').fill('');
// Submit the form
await page.click('button[name="hvac_update_profile"]');
// Verify validation errors
await expect(page.locator('#first_name_error')).toBeVisible();
await expect(page.locator('#last_name_error')).toBeVisible();
await expect(page.locator('#user_email_error')).toBeVisible();
// Invalid email format
await page.locator('#user_email').fill('not-an-email');
await page.click('button[name="hvac_update_profile"]');
await expect(page.locator('#user_email_error')).toBeVisible();
await expect(page.locator('#user_email_error')).toContainText('valid email');
});
test('should validate password change fields', async ({ page }) => {
// Go to edit profile page
await page.goto('/edit-profile/');
// Enter incorrect current password
await page.locator('#current_password').fill('wrong-password');
await page.locator('#new_password').fill('NewPassword123');
await page.locator('#confirm_new_password').fill('NewPassword123');
// Submit the form
await page.click('button[name="hvac_update_profile"]');
// Verify error message for incorrect current password
await expect(page.locator('#current_password_error')).toBeVisible();
await expect(page.locator('#current_password_error')).toContainText('incorrect');
// Test password mismatch
await page.locator('#current_password').fill(TEST_USER.password);
await page.locator('#new_password').fill('NewPassword123');
await page.locator('#confirm_new_password').fill('DifferentPassword123');
// Submit the form
await page.click('button[name="hvac_update_profile"]');
// Verify error message for password mismatch
await expect(page.locator('#confirm_new_password_error')).toBeVisible();
await expect(page.locator('#confirm_new_password_error')).toContainText('do not match');
});
});