From 8d4eed77eae8cfc0a19bd4ab15a9d5c308c4f1f9 Mon Sep 17 00:00:00 2001 From: AG Date: Mon, 15 Dec 2025 23:11:10 +0200 Subject: [PATCH] Unilateral flag is now editable --- src/components/Profile.tsx | 9 +++++ tests/unilateral-edit.spec.ts | 68 +++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 tests/unilateral-edit.spec.ts diff --git a/src/components/Profile.tsx b/src/components/Profile.tsx index 9671f77..ff16667 100644 --- a/src/components/Profile.tsx +++ b/src/components/Profile.tsx @@ -13,6 +13,7 @@ import { Button } from './ui/Button'; import { Card } from './ui/Card'; import { Modal } from './ui/Modal'; import { SideSheet } from './ui/SideSheet'; +import { Checkbox } from './ui/Checkbox'; interface ProfileProps { user: User; @@ -654,6 +655,14 @@ const Profile: React.FC = ({ user, onLogout, lang, onLanguageChang /> )} + +
+ setEditingExercise({ ...editingExercise, isUnilateral: e.target.checked })} + label={t('unilateral_exercise', lang) || 'Unilateral exercise'} + /> +
)} diff --git a/tests/unilateral-edit.spec.ts b/tests/unilateral-edit.spec.ts new file mode 100644 index 0000000..7aa78f7 --- /dev/null +++ b/tests/unilateral-edit.spec.ts @@ -0,0 +1,68 @@ +import { test, expect } from './fixtures'; + +test('can enable unilateral flag for existing exercise', async ({ page, createUniqueUser }) => { + console.log('START: Test started'); + const user = await createUniqueUser(); + console.log('USER created: ' + user.email); + + // 1. Login + console.log('Navigating to login...'); + await page.goto('http://localhost:3000/'); + console.log('Filling login form...'); + await page.fill('input[type="email"]', user.email); + await page.fill('input[type="password"]', user.password); + await page.click('button:has-text("Login")'); + console.log('Waiting for Tracker...'); + await expect(page.getByText('Tracker')).toBeVisible(); + + // 2. Create a standard exercise via Profile + console.log('Navigating to Profile...'); + await page.getByText('Profile').click(); + console.log('Clicking Manage Exercises...'); + await page.getByRole('button', { name: 'Manage Exercises' }).click(); + + // Open create modal + console.log('Clicking New Exercise...'); + await page.getByRole('button', { name: 'New Exercise' }).click(); + + const exName = `Test Uni ${Date.now()}`; + console.log('Creating exercise:', exName); + await page.getByLabel('Name').fill(exName); + await page.getByRole('button', { name: 'Create' }).click(); + + // Verify it exists in list + console.log('Verifying creation...'); + await expect(page.getByText(exName)).toBeVisible(); + + // 3. Edit exercise to be Unilateral + console.log('Finding row to edit...'); + const row = page.locator('div.flex.justify-between.items-center').filter({ hasText: exName }).first(); + console.log('Clicking Edit...'); + await row.getByRole('button', { name: 'Edit Exercise' }).click(); + + // Check the Unilateral checkbox + console.log('Checking Unilateral...'); + await page.getByLabel('Unilateral exercise').check(); + await page.getByRole('button', { name: 'Save' }).click(); + + // Verify "Unilateral" tag appears in the list + console.log('Verifying Unilateral tag...'); + await expect(row).toContainText('Unilateral'); + + // 4. Verify in Tracker + console.log('Navigating to Tracker...'); + await page.getByText('Tracker').click(); + + // Select the exercise + console.log('Selecting exercise...'); + await page.getByLabel('Select Exercise').fill(exName); + await page.getByRole('button', { name: exName }).click(); + + // Verify L/A/R buttons appear + console.log('Checking buttons...'); + await expect(page.getByTitle('Left')).toBeVisible(); + await expect(page.getByTitle('Right')).toBeVisible(); + await expect(page.getByTitle('Alternately')).toBeVisible(); + + console.log('DONE: Test finished successfully'); +});