- 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>
162 lines
No EOL
7.1 KiB
TypeScript
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');
|
|
});
|
|
}); |