Files
pleno-vue/tests/e2e/subuserProfileContact.spec.ts
T
Jeppe Bundgaard 60742bf947 Refactor and migrate Playwright E2E tests:
- Remove `playwright.config.js` to clean up configuration.
- Add new E2E test suites (`admin-pos-orders`, `admin-module-goals`, `admin-module-pos-mobile-order-flow`) to structure Admin module tests.
- Introduce reusable authentication and data seeding utilities in `fixtures` for streamlined test flows and maintainability.
2026-03-19 12:46:47 +01:00

136 lines
4.9 KiB
TypeScript

import { test, expect } from '@playwright/test';
import {
userCredentials,
loginAsSubuserByPhone,
} from './fixtures';
// Navigate to profile page helper
async function goToUserProfile(page) {
await page.click('a[href="/user/profile"]');
await expect(page).toHaveURL('/user/profile');
}
// Subuser contact information display tests
test('[PROFILE][Subuser][Contact] should display contact information section', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Should display the contact information section header (look for the address-card icon section)
await expect(page.locator('.card-header .fa-address-card')).toBeVisible();
});
test('[PROFILE][Subuser][Contact] should display email field', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section (second Chauffør section with address-card icon)
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Email field should be visible
await expect(page.getByText('E-mail', { exact: true })).toBeVisible();
});
test('[PROFILE][Subuser][Contact] should display edit email button', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Edit email button should be visible for subuser
const editEmailButton = page.locator('button:has-text("Rediger e-mail")');
await expect(editEmailButton).toBeVisible();
});
test('[PROFILE][Subuser][Contact] should open edit email dialog when clicking edit email button', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Click edit email button
const editEmailButton = page.locator('button:has-text("Rediger e-mail")');
await editEmailButton.click();
// Should show email dialog (SweetAlert)
await expect(page.locator('.swal2-popup')).toBeVisible();
await expect(page.locator('.swal2-title')).toContainText('e-mailadresse');
});
test('[PROFILE][Subuser][Contact] should display phone number field (read-only)', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Phone number field should be visible
await expect(page.getByText('Telefonnummer', { exact: true }).first()).toBeVisible();
});
test('[PROFILE][Subuser][Contact] should display country code field (read-only)', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Country code field should be visible
await expect(page.getByText('Landekode', { exact: true })).toBeVisible();
});
/** Subuser Email Validation Tests */
test('[PROFILE][Subuser][Contact] should show validation error when email is empty', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Click edit email button
const editEmailButton = page.locator('button:has-text("Rediger e-mail")');
await editEmailButton.click();
// Clear the input and click confirm
await page.fill('.swal2-input', '');
await page.click('.swal2-confirm');
// Should show validation error
await expect(page.locator('.swal2-validation-message')).toBeVisible();
});
test('[PROFILE][Subuser][Contact] should show validation error for invalid email format', async ({ page }) => {
await loginAsSubuserByPhone(page);
await goToUserProfile(page);
// Expand contact section
const contactHeader = page.locator('.card-header').filter({ has: page.locator('.fa-address-card') });
await contactHeader.click();
await page.waitForTimeout(200);
// Click edit email button
const editEmailButton = page.locator('button:has-text("Rediger e-mail")');
await editEmailButton.click();
// Fill in invalid email
await page.fill('.swal2-input', 'invalid-email-format');
await page.click('.swal2-confirm');
// Should show validation error
await expect(page.locator('.swal2-validation-message')).toBeVisible();
});