import { test, expect } from '@playwright/test'; import { userCredentials, loginAsUser, } from './fixtures'; // Navigate to profile page helper async function goToUserProfile(page) { await page.click('a[href="/user/profile"]'); await expect(page).toHaveURL('/user/profile'); } // Helper to expand a category section by clicking its header async function expandCategory(page, categoryText: string) { const categoryHeader = page.locator('.card-header').filter({ hasText: categoryText }).first(); await categoryHeader.click(); // Wait for expansion animation await page.waitForTimeout(200); } // Notifications section display tests test('[PROFILE][User][Notifications] should display email notifications section', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Should display the notifications section header (E-mail subtitle) await expect(page.locator('.card-header').filter({ hasText: 'E-mail' }).first()).toBeVisible(); }); test('[PROFILE][User][Notifications] should display booking confirmation email field', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the email notifications section await expandCategory(page, 'E-mail'); // Booking confirmation email section should be visible await expect(page.locator('text=Booking bekræftelser')).toBeVisible(); }); test('[PROFILE][User][Notifications] should display edit booking email button', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the email notifications section await expandCategory(page, 'E-mail'); // Edit booking email button should be visible const editBookingEmailButton = page.locator('button:has-text("Rediger e-mail til booking")'); await expect(editBookingEmailButton).toBeVisible(); }); test('[PROFILE][User][Notifications] should display email notifications toggle', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the email notifications section await expandCategory(page, 'E-mail'); // Email notifications toggle should be visible await expect(page.locator('text=E-mail notifikationer')).toBeVisible(); }); test('[PROFILE][User][Notifications] should display SMS notifications section', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Should display the SMS notifications section header await expect(page.locator('.card-header').filter({ hasText: 'SMS' }).first()).toBeVisible(); }); test('[PROFILE][User][Notifications] should display SMS notifications toggle', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the SMS notifications section await expandCategory(page, 'SMS'); // SMS notifications toggle should be visible await expect(page.getByText('SMS notifikationer', { exact: true })).toBeVisible(); }); // Notifications button functionality tests test('[PROFILE][User][Notifications] should open edit booking email dialog when clicking edit button', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the email notifications section await expandCategory(page, 'E-mail'); // Click edit booking email button const editBookingEmailButton = page.locator('button:has-text("Rediger e-mail til booking")'); await editBookingEmailButton.click(); // Should show email dialog (SweetAlert) await expect(page.locator('.swal2-popup')).toBeVisible(); await expect(page.locator('.swal2-title')).toContainText('e-mailadresse'); }); /** Email Validation Tests */ test('[PROFILE][User][Notifications] should show validation error for invalid email format', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the email notifications section await expandCategory(page, 'E-mail'); // Click edit booking email button const editBookingEmailButton = page.locator('button:has-text("Rediger e-mail til booking")'); await editBookingEmailButton.click(); // Fill in invalid email await page.fill('.swal2-input', 'invalid-email'); // Click confirm await page.click('.swal2-confirm'); // Should show validation error await expect(page.locator('.swal2-validation-message')).toBeVisible(); }); test('[PROFILE][User][Notifications] should show validation error when email is empty', async ({ page }) => { await loginAsUser(page); await goToUserProfile(page); // Expand the email notifications section await expandCategory(page, 'E-mail'); // Click edit booking email button const editBookingEmailButton = page.locator('button:has-text("Rediger e-mail til booking")'); await editBookingEmailButton.click(); // Click confirm without filling email await page.click('.swal2-confirm'); // Should show validation error await expect(page.locator('.swal2-validation-message')).toBeVisible(); });