feat: Implement user profile and parent profile button tests
All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m38s
All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m38s
- Added tests for user profile editing, including name changes, image uploads, and password changes. - Implemented tests for changing the parent PIN with verification code handling. - Created tests for account deletion with confirmation dialog and email validation. - Introduced parent profile button tests for both temporary and permanent modes, verifying badge visibility and menu options. - Updated Playwright configuration to include new test buckets for user profile and parent profile button scenarios. - Added e2e plans documentation for user profile and parent profile button tests.
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
import { E2E_PIN } from '../../e2e-constants'
|
||||
|
||||
test.describe('Parent profile button – temporary parent mode', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/parent')
|
||||
// Switch from permanent mode to temporary mode:
|
||||
// 1. Exit parent mode via Child Mode
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
await page.getByRole('menuitem', { name: 'Child Mode' }).click()
|
||||
await expect(page.getByRole('button', { name: 'Parent login' })).toBeVisible()
|
||||
// 2. Re-enter parent mode WITHOUT the persistence checkbox
|
||||
await page.getByRole('button', { name: 'Parent login' }).click()
|
||||
const pinInput = page.getByPlaceholder('4–6 digits')
|
||||
await pinInput.waitFor({ timeout: 5000 })
|
||||
await pinInput.fill(E2E_PIN)
|
||||
// Do NOT check 'Stay in parent mode'
|
||||
await page.getByRole('button', { name: 'OK' }).click()
|
||||
await page.waitForURL(/\/parent(\/|$)/)
|
||||
})
|
||||
|
||||
test('Badge – no 🔒 badge in temporary parent mode', async ({ page }) => {
|
||||
await expect(page.getByLabel('Persistent parent mode active')).not.toBeVisible()
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,86 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
import { E2E_EMAIL, E2E_FIRST_NAME, E2E_PIN } from '../../e2e-constants'
|
||||
|
||||
test.describe('Parent profile button – permanent parent mode', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/parent')
|
||||
})
|
||||
|
||||
test('Badge – shows 🔒 in permanent parent mode', async ({ page }) => {
|
||||
await expect(page.getByLabel('Persistent parent mode active')).toBeVisible()
|
||||
await expect(page.getByLabel('Persistent parent mode active')).toHaveText('🔒')
|
||||
})
|
||||
|
||||
test('Menu – shows user name and email', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
|
||||
await expect(page.getByText(E2E_FIRST_NAME, { exact: true })).toBeVisible()
|
||||
await expect(page.getByText(E2E_EMAIL, { exact: true })).toBeVisible()
|
||||
})
|
||||
|
||||
test('Menu – Profile option navigates to the User Profile page', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
await page.getByRole('menuitem', { name: 'Profile' }).click()
|
||||
|
||||
await expect(page).toHaveURL(/\/parent\/profile/)
|
||||
await expect(page.getByRole('heading', { name: 'User Profile' })).toBeVisible()
|
||||
})
|
||||
|
||||
test('Menu – Child Mode exits parent mode', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
await page.getByRole('menuitem', { name: 'Child Mode' }).click()
|
||||
|
||||
// View-selector navigation buttons disappear after exiting parent mode
|
||||
await expect(page.getByRole('button', { name: 'Children' })).not.toBeVisible()
|
||||
// Profile button changes label to "Parent login" when not in parent mode
|
||||
await expect(page.getByRole('button', { name: 'Parent login' })).toBeVisible()
|
||||
})
|
||||
|
||||
test('Menu – Child Mode re-entry without checkbox enters temporary mode', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
await page.getByRole('menuitem', { name: 'Child Mode' }).click()
|
||||
|
||||
// Click profile button to open PIN modal
|
||||
await page.getByRole('button', { name: 'Parent login' }).click()
|
||||
|
||||
const pinInput = page.getByPlaceholder('4–6 digits')
|
||||
await pinInput.waitFor({ timeout: 5000 })
|
||||
await pinInput.fill(E2E_PIN)
|
||||
// Do NOT check "Stay in parent mode"
|
||||
await page.getByRole('button', { name: 'OK' }).click()
|
||||
|
||||
await page.waitForURL(/\/parent(\/|$)/)
|
||||
|
||||
// No persistent badge — temporary mode
|
||||
await expect(page.getByLabel('Persistent parent mode active')).not.toBeVisible()
|
||||
})
|
||||
|
||||
test('Menu – Child Mode re-entry with checkbox enters permanent mode', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
await page.getByRole('menuitem', { name: 'Child Mode' }).click()
|
||||
|
||||
// Click profile button to open PIN modal
|
||||
await page.getByRole('button', { name: 'Parent login' }).click()
|
||||
|
||||
const pinInput = page.getByPlaceholder('4–6 digits')
|
||||
await pinInput.waitFor({ timeout: 5000 })
|
||||
await pinInput.fill(E2E_PIN)
|
||||
await page.getByLabel('Stay in parent mode on this device').check()
|
||||
await page.getByRole('button', { name: 'OK' }).click()
|
||||
|
||||
await page.waitForURL(/\/parent(\/|$)/)
|
||||
|
||||
// Persistent badge visible — permanent mode
|
||||
await expect(page.getByLabel('Persistent parent mode active')).toBeVisible()
|
||||
})
|
||||
|
||||
test('Menu – Sign Out navigates to landing page', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Parent menu' }).click()
|
||||
await page.getByRole('menuitem', { name: 'Sign out' }).click()
|
||||
|
||||
await expect(page).toHaveURL('/')
|
||||
await expect(
|
||||
page.getByRole('navigation').getByRole('button', { name: 'Sign In' }),
|
||||
).toBeVisible()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user