201 lines
8.0 KiB
TypeScript
201 lines
8.0 KiB
TypeScript
/**
|
|
* BDD E2E Test: Profile Main Page
|
|
*
|
|
* Tests the main profile page that displays:
|
|
* - Driver's personal information (name, avatar, bio)
|
|
* - Driver's profile statistics and achievements
|
|
* - Navigation to profile sub-pages (leagues, liveries, settings, sponsorship requests)
|
|
* - Profile management options
|
|
*
|
|
* Focus: Final user outcomes - what the driver sees and can verify
|
|
*/
|
|
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('Profile Main Page', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
// TODO: Implement authentication setup for a registered driver
|
|
// - Navigate to login page
|
|
// - Enter credentials for "John Doe" or similar test driver
|
|
// - Verify successful login
|
|
// - Navigate to /profile page
|
|
});
|
|
|
|
test('Driver sees their profile information on main page', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver views their profile information
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// Then I should see my name prominently displayed
|
|
// And I should see my avatar
|
|
// And I should see my bio (if available)
|
|
// And I should see my location or country (if available)
|
|
});
|
|
|
|
test('Driver sees profile statistics on main page', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver views their profile statistics
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// Then I should see my current rating
|
|
// And I should see my current rank
|
|
// And I should see my total race starts
|
|
// And I should see my total wins
|
|
// And I should see my total podiums
|
|
// And I should see my win percentage
|
|
});
|
|
|
|
test('Driver can navigate to leagues page from profile', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver navigates to leagues page
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// When I click on the "Leagues" section or link
|
|
// Then I should be navigated to the profile leagues page
|
|
// And the URL should be /profile/leagues
|
|
});
|
|
|
|
test('Driver can navigate to liveries page from profile', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver navigates to liveries page
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// When I click on the "Liveries" section or link
|
|
// Then I should be navigated to the profile liveries page
|
|
// And the URL should be /profile/liveries
|
|
});
|
|
|
|
test('Driver can navigate to settings page from profile', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver navigates to settings page
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// When I click on the "Settings" section or link
|
|
// Then I should be navigated to the profile settings page
|
|
// And the URL should be /profile/settings
|
|
});
|
|
|
|
test('Driver can navigate to sponsorship requests page from profile', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver navigates to sponsorship requests page
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// When I click on the "Sponsorship Requests" section or link
|
|
// Then I should be navigated to the sponsorship requests page
|
|
// And the URL should be /profile/sponsorship-requests
|
|
});
|
|
|
|
test('Driver sees profile achievements section', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver views their achievements
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// Then I should see an achievements section
|
|
// And I should see badges or trophies for completed achievements
|
|
// And I should see progress indicators for ongoing achievements
|
|
});
|
|
|
|
test('Driver sees recent activity on profile page', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver views recent activity
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// Then I should see a recent activity feed
|
|
// And I should see recent races, league joins, or other actions
|
|
// And each activity should have a timestamp
|
|
});
|
|
|
|
test('Driver sees profile completion indicator', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver sees profile completion status
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// Then I should see a profile completion percentage
|
|
// And I should see suggestions to complete my profile
|
|
// And I should see which sections are incomplete
|
|
});
|
|
|
|
test('Driver can edit profile from main page', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver edits profile from main page
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// When I click "Edit Profile" or similar button
|
|
// Then I should be navigated to the settings page
|
|
// And I should be able to edit my profile information
|
|
});
|
|
|
|
test('Driver sees empty state when no leagues joined', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver with no league memberships
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// And I have not joined any leagues
|
|
// Then I should see the leagues section
|
|
// And I should see a message indicating no leagues joined
|
|
// And I should see a call-to-action to discover leagues
|
|
});
|
|
|
|
test('Driver sees empty state when no liveries uploaded', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver with no liveries
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// And I have not uploaded any liveries
|
|
// Then I should see the liveries section
|
|
// And I should see a message indicating no liveries
|
|
// And I should see a call-to-action to upload a livery
|
|
});
|
|
|
|
test('Driver sees empty state when no sponsorship requests', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver with no sponsorship requests
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// And I have no sponsorship requests
|
|
// Then I should see the sponsorship requests section
|
|
// And I should see a message indicating no requests
|
|
// And I should see information about how to get sponsorships
|
|
});
|
|
|
|
test('Driver sees profile with SEO metadata', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver verifies SEO metadata
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// Then the page title should contain my name
|
|
// And the page description should mention my profile
|
|
// And the page should have Open Graph tags for social sharing
|
|
});
|
|
|
|
test('Driver sees consistent profile layout', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver verifies profile layout consistency
|
|
// Given I am on the "Profile" page
|
|
// Then the layout should be consistent with other profile pages
|
|
// And the navigation should be accessible
|
|
// And the styling should match the design system
|
|
});
|
|
|
|
test('Driver sees profile with team affiliation', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver views their team affiliation
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// And I am affiliated with a team
|
|
// Then I should see my team name
|
|
// And I should see my team logo (if available)
|
|
// And I should see my role in the team
|
|
});
|
|
|
|
test('Driver sees profile with social links', async ({ page }) => {
|
|
// TODO: Implement test
|
|
// Scenario: Driver views their social links
|
|
// Given I am a registered driver "John Doe"
|
|
// And I am on the "Profile" page
|
|
// And I have social links configured
|
|
// Then I should see social media links (e.g., Discord, Twitter, iRacing)
|
|
// And each link should be clickable
|
|
// And each link should navigate to the correct external URL
|
|
});
|
|
}); |