{ "config": { "configFile": "D:\\Coding\\gymflow\\playwright.config.ts", "rootDir": "D:/Coding/gymflow/tests", "forbidOnly": false, "fullyParallel": true, "globalSetup": null, "globalTeardown": null, "globalTimeout": 0, "grep": {}, "grepInvert": null, "maxFailures": 0, "metadata": { "actualWorkers": 8 }, "preserveOutput": "always", "reporter": [ [ "json" ] ], "reportSlowTests": { "max": 5, "threshold": 300000 }, "quiet": false, "projects": [ { "outputDir": "D:/Coding/gymflow/test-results", "repeatEach": 1, "retries": 0, "metadata": { "actualWorkers": 8 }, "id": "chromium", "name": "chromium", "testDir": "D:/Coding/gymflow/tests", "testIgnore": [], "testMatch": [ "**/*.@(spec|test).?(c|m)[jt]s?(x)" ], "timeout": 30000 } ], "shard": null, "tags": [], "updateSnapshots": "missing", "updateSourceMethod": "patch", "version": "1.57.0", "workers": 8, "webServer": null }, "suites": [ { "title": "active-session-delete-logged-set.spec.ts", "file": "active-session-delete-logged-set.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-delete-logged-set.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Delete Logged Set", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 0, "parallelIndex": 0, "status": "failed", "duration": 11271, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })\nExpected: \u001b[32m0\u001b[39m\nReceived: \u001b[31m3\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })\u001b[22m\n\u001b[2m 9 × locator resolved to 3 elements\u001b[22m\n\u001b[2m - unexpected value \"3\"\u001b[22m\n", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })\nExpected: \u001b[32m0\u001b[39m\nReceived: \u001b[31m3\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })\u001b[22m\n\u001b[2m 9 × locator resolved to 3 elements\u001b[22m\n\u001b[2m - unexpected value \"3\"\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\active-session-delete-logged-set.spec.ts:32:85", "location": { "file": "D:\\Coding\\gymflow\\tests\\active-session-delete-logged-set.spec.ts", "column": 85, "line": 32 }, "snippet": "\u001b[0m \u001b[90m 30 |\u001b[39m \u001b[90m// Expected Results:\u001b[39m\n \u001b[90m 31 |\u001b[39m \u001b[90m// - The set is removed from the session history.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 32 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'div'\u001b[39m)\u001b[33m.\u001b[39mfilter({ hasText\u001b[33m:\u001b[39m \u001b[35m/^1Bench Press80kg x 5$/\u001b[39m }))\u001b[33m.\u001b[39mtoHaveCount(\u001b[35m0\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 33 |\u001b[39m \u001b[90m// - No error messages.\u001b[39m\n \u001b[90m 34 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'text=Error'\u001b[39m))\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 35 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "D:\\Coding\\gymflow\\tests\\active-session-delete-logged-set.spec.ts", "column": 85, "line": 32 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveCount\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })\nExpected: \u001b[32m0\u001b[39m\nReceived: \u001b[31m3\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toHaveCount\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })\u001b[22m\n\u001b[2m 9 × locator resolved to 3 elements\u001b[22m\n\u001b[2m - unexpected value \"3\"\u001b[22m\n\n\n 30 | // Expected Results:\n 31 | // - The set is removed from the session history.\n> 32 | await expect(page.locator('div').filter({ hasText: /^1Bench Press80kg x 5$/ })).toHaveCount(0);\n | ^\n 33 | // - No error messages.\n 34 | await expect(page.locator('text=Error')).not.toBeVisible();\n 35 | });\n at D:\\Coding\\gymflow\\tests\\active-session-delete-logged-set.spec.ts:32:85" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.230Z", "annotations": [], "attachments": [ { "name": "error-context", "contentType": "text/markdown", "path": "D:\\Coding\\gymflow\\test-results\\active-session-delete-logg-e5e01-Session---Delete-Logged-Set-chromium\\error-context.md" } ], "errorLocation": { "file": "D:\\Coding\\gymflow\\tests\\active-session-delete-logged-set.spec.ts", "column": 85, "line": 32 } } ], "status": "unexpected" } ], "id": "c34ebbeb329e78c5485f-96f2e2d916243c8e8b3c", "file": "active-session-delete-logged-set.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "active-session-finish-session.spec.ts", "file": "active-session-finish-session.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-finish-session.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Finish Session", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 1, "parallelIndex": 1, "status": "passed", "duration": 6606, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.233Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "c20aad1036334502e0d8-afffcfec8ebc8aecb302", "file": "active-session-finish-session.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "active-session-log-bodyweight-set.spec.ts", "file": "active-session-log-bodyweight-set.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-log-bodyweight-set.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Log Bodyweight Set", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 2, "parallelIndex": 2, "status": "passed", "duration": 6319, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.236Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "3222f0697017ef711303-8ddb33cd02d55dc83fdb", "file": "active-session-log-bodyweight-set.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "active-session-log-cardio-set.spec.ts", "file": "active-session-log-cardio-set.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-log-cardio-set.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Log Cardio Set", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "passed", "duration": 6448, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.263Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "69c7e56127bef2caa9b6-800863f800c0c21532c0", "file": "active-session-log-cardio-set.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "active-session-log-strength-set.spec.ts", "file": "active-session-log-strength-set.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-log-strength-set.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Log Strength Set", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "passed", "duration": 6442, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.328Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "7023ed05b8fcdef27d19-0cdeca2f383764860967", "file": "active-session-log-strength-set.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "active-session-plan-progression-and-jump-to-step.spec.ts", "file": "active-session-plan-progression-and-jump-to-step.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-plan-progression-and-jump-to-step.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Plan Progression and Jump to Step", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 5, "parallelIndex": 5, "status": "passed", "duration": 9340, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.253Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "9c4561ae521f624932c2-cdf69a9a9f8249951e9b", "file": "active-session-plan-progression-and-jump-to-step.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "active-session-quit-session-without-saving.spec.ts", "file": "active-session-quit-session-without-saving.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "III. Workout Tracking", "file": "active-session-quit-session-without-saving.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Active Session - Quit Session Without Saving", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 6, "parallelIndex": 6, "status": "passed", "duration": 6716, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.303Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "5a7ffef6d3b03409c489-2fcf38149b5789bd1f34", "file": "active-session-quit-session-without-saving.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "admin-panel-block-unblock-user.spec.ts", "file": "admin-panel-block-unblock-user.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "V. User & System Management", "file": "admin-panel-block-unblock-user.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Admin Panel - Block/Unblock User", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 7, "parallelIndex": 7, "status": "timedOut", "duration": 30341, "error": { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m", "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, "errors": [ { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, { "location": { "file": "D:\\Coding\\gymflow\\tests\\admin-panel-block-unblock-user.spec.ts", "column": 128, "line": 23 }, "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('div').filter({ hasText: /^user1@gymflow\\.aiUSERBlockDelete$/ }).getByRole('button', { name: 'Block' })\u001b[22m\n\n\n 21 |\n 22 | // 5. Click the 'Block' icon for that user.\n> 23 | await page.locator('div').filter({ hasText: /^user1@gymflow\\.aiUSERBlockDelete$/ }).getByRole('button', { name: 'Block' }).click();\n | ^\n 24 |\n 25 | // 6. Verify the user's status changes to 'Blocked'.\n 26 | await expect(page.locator('div').filter({ hasText: /^user1@gymflow\\.aiUSERBlockedUnblockDelete$/ }).getByRole('button', { name: 'Unblock' })).toBeVisible();\n at D:\\Coding\\gymflow\\tests\\admin-panel-block-unblock-user.spec.ts:23:128" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:42.276Z", "annotations": [], "attachments": [ { "name": "error-context", "contentType": "text/markdown", "path": "D:\\Coding\\gymflow\\test-results\\admin-panel-block-unblock--5314f--Panel---Block-Unblock-User-chromium\\error-context.md" } ] } ], "status": "unexpected" } ], "id": "ce8cd4890844b7ff7b9c-88512db6d2edd5c40cc9", "file": "admin-panel-block-unblock-user.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "admin-panel-create-new-user.spec.ts", "file": "admin-panel-create-new-user.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "V. User & System Management", "file": "admin-panel-create-new-user.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Admin Panel - Create New User", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 2, "parallelIndex": 2, "status": "failed", "duration": 7897, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('User created: adminpanelnewuser@gymflow.ai')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('User created: adminpanelnewuser@gymflow.ai')\u001b[22m\n", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('User created: adminpanelnewuser@gymflow.ai')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('User created: adminpanelnewuser@gymflow.ai')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\admin-panel-create-new-user.spec.ts:28:80", "location": { "file": "D:\\Coding\\gymflow\\tests\\admin-panel-create-new-user.spec.ts", "column": 80, "line": 28 }, "snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m \u001b[90m// Expected Results:\u001b[39m\n \u001b[90m 27 |\u001b[39m \u001b[90m// - A new user is created and appears in the user list.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 28 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'User created: adminpanelnewuser@gymflow.ai'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 29 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'button'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Users List (4)'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m \u001b[90m// Expand users list\u001b[39m\n \u001b[90m 30 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'adminpanelnewuser@gymflow.ai'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m \u001b[90m// - A success message is displayed.\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "D:\\Coding\\gymflow\\tests\\admin-panel-create-new-user.spec.ts", "column": 80, "line": 28 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('User created: adminpanelnewuser@gymflow.ai')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('User created: adminpanelnewuser@gymflow.ai')\u001b[22m\n\n\n 26 | // Expected Results:\n 27 | // - A new user is created and appears in the user list.\n> 28 | await expect(page.getByText('User created: adminpanelnewuser@gymflow.ai')).toBeVisible();\n | ^\n 29 | await page.getByRole('button', { name: 'Users List (4)' }).click(); // Expand users list\n 30 | await expect(page.getByText('adminpanelnewuser@gymflow.ai')).toBeVisible();\n 31 | // - A success message is displayed.\n at D:\\Coding\\gymflow\\tests\\admin-panel-create-new-user.spec.ts:28:80" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:49.357Z", "annotations": [], "attachments": [ { "name": "error-context", "contentType": "text/markdown", "path": "D:\\Coding\\gymflow\\test-results\\admin-panel-create-new-use-8bfeb-min-Panel---Create-New-User-chromium\\error-context.md" } ], "errorLocation": { "file": "D:\\Coding\\gymflow\\tests\\admin-panel-create-new-user.spec.ts", "column": 80, "line": 28 } } ], "status": "unexpected" } ], "id": "54f51af6788da48ee01f-2ab7861cace7b9c5f310", "file": "admin-panel-create-new-user.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "admin-panel-delete-user.spec.ts", "file": "admin-panel-delete-user.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "V. User & System Management", "file": "admin-panel-delete-user.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Admin Panel - Delete User", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 3, "parallelIndex": 3, "status": "timedOut", "duration": 30078, "error": { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m", "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, "errors": [ { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, { "location": { "file": "D:\\Coding\\gymflow\\tests\\admin-panel-delete-user.spec.ts", "column": 64, "line": 18 }, "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: 'Users List (1)' })\u001b[22m\n\n\n 16 |\n 17 | // 3. Expand 'Admin Area' and 'Users List'.\n> 18 | await page.getByRole('button', { name: 'Users List (1)' }).click(); // Count will depend on seeded users\n | ^\n 19 |\n 20 | // 4. Locate a non-admin user. (user1@gymflow.ai from seeded data)\n 21 |\n at D:\\Coding\\gymflow\\tests\\admin-panel-delete-user.spec.ts:18:64" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:49.364Z", "annotations": [], "attachments": [ { "name": "error-context", "contentType": "text/markdown", "path": "D:\\Coding\\gymflow\\test-results\\admin-panel-delete-user-V--35271-C-Admin-Panel---Delete-User-chromium\\error-context.md" } ] } ], "status": "unexpected" } ], "id": "dcd7834869baba952206-10244ef4c61796c72db9", "file": "admin-panel-delete-user.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "admin-panel-view-user-list.spec.ts", "file": "admin-panel-view-user-list.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "V. User & System Management", "file": "admin-panel-view-user-list.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "C. Admin Panel - View User List", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 4, "parallelIndex": 4, "status": "timedOut", "duration": 30092, "error": { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m", "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, "errors": [ { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, { "location": { "file": "D:\\Coding\\gymflow\\tests\\admin-panel-view-user-list.spec.ts", "column": 64, "line": 20 }, "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: 'Users List (3)' })\u001b[22m\n\n\n 18 |\n 19 | // 4. Click to expand 'Users List'.\n> 20 | await page.getByRole('button', { name: 'Users List (3)' }).click(); // 3 seeded users\n | ^\n 21 |\n 22 | // Expected Results:\n 23 | // - A list of all users (excluding the current admin) is displayed, showing their email, role, and blocked status.\n at D:\\Coding\\gymflow\\tests\\admin-panel-view-user-list.spec.ts:20:64" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:49.373Z", "annotations": [], "attachments": [ { "name": "error-context", "contentType": "text/markdown", "path": "D:\\Coding\\gymflow\\test-results\\admin-panel-view-user-list-d0571-dmin-Panel---View-User-List-chromium\\error-context.md" } ] } ], "status": "unexpected" } ], "id": "3c5a50777a2f02993a2f-0213e734cd5e95e0e610", "file": "admin-panel-view-user-list.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "ai-coach-send-a-message.spec.ts", "file": "ai-coach-send-a-message.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "V. User & System Management", "file": "ai-coach-send-a-message.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "B. AI Coach - Send a Message", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 1, "parallelIndex": 1, "status": "failed", "duration": 7488, "error": { "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')\u001b[22m\n", "stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\ai-coach-send-a-message.spec.ts:27:146", "location": { "file": "D:\\Coding\\gymflow\\tests\\ai-coach-send-a-message.spec.ts", "column": 146, "line": 27 }, "snippet": "\u001b[0m \u001b[90m 25 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'What\\'s a good workout for chest?'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m \u001b[90m// - AI Coach responds with relevant advice.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 27 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 28 |\u001b[39m \u001b[90m// - No error messages.\u001b[39m\n \u001b[90m 29 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'text=Error'\u001b[39m))\u001b[33m.\u001b[39mnot\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m" }, "errors": [ { "location": { "file": "D:\\Coding\\gymflow\\tests\\ai-coach-send-a-message.spec.ts", "column": 146, "line": 27 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')\nExpected: visible\nTimeout: 5000ms\nError: element(s) not found\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')\u001b[22m\n\n\n 25 | await expect(page.getByText('What\\'s a good workout for chest?')).toBeVisible();\n 26 | // - AI Coach responds with relevant advice.\n> 27 | await expect(page.getByText('Based on your workout history and personal records, a good chest workout could include Bench Press and Dips.')).toBeVisible();\n | ^\n 28 | // - No error messages.\n 29 | await expect(page.locator('text=Error')).not.toBeVisible();\n 30 | });\n at D:\\Coding\\gymflow\\tests\\ai-coach-send-a-message.spec.ts:27:146" } ], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:49.558Z", "annotations": [], "attachments": [ { "name": "error-context", "contentType": "text/markdown", "path": "D:\\Coding\\gymflow\\test-results\\ai-coach-send-a-message-V--6abe2-B-AI-Coach---Send-a-Message-chromium\\error-context.md" } ], "errorLocation": { "file": "D:\\Coding\\gymflow\\tests\\ai-coach-send-a-message.spec.ts", "column": 146, "line": 27 } } ], "status": "unexpected" } ], "id": "ada8e4ce2a1e5a4e4d05-928656e08c3d08baf4cb", "file": "ai-coach-send-a-message.spec.ts", "line": 7, "column": 3 } ] } ] }, { "title": "core-auth.spec.ts", "file": "core-auth.spec.ts", "column": 0, "line": 0, "specs": [ { "title": "seed", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 6, "parallelIndex": 6, "status": "passed", "duration": 96, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:49.620Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "bef67075d2189bc8efbd-8b14d48fc424dd4ad792", "file": "core-auth.spec.ts", "line": 3, "column": 1 } ] }, { "title": "data-progress.spec.ts", "file": "data-progress.spec.ts", "column": 0, "line": 0, "specs": [ { "title": "seed", "ok": true, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 6, "parallelIndex": 6, "status": "passed", "duration": 100, "errors": [], "stdout": [], "stderr": [], "retry": 0, "startTime": "2025-11-30T18:19:49.760Z", "annotations": [], "attachments": [] } ], "status": "expected" } ], "id": "9a47d406e05ab11bdb53-be2ec74307971cae65a2", "file": "data-progress.spec.ts", "line": 3, "column": 1 } ] }, { "title": "exercise-library-archive-unarchive-exercise.spec.ts", "file": "exercise-library-archive-unarchive-exercise.spec.ts", "column": 0, "line": 0, "specs": [], "suites": [ { "title": "II. Workout Management", "file": "exercise-library-archive-unarchive-exercise.spec.ts", "line": 6, "column": 6, "specs": [ { "title": "B. Exercise Library - Archive/Unarchive Exercise", "ok": false, "tags": [], "tests": [ { "timeout": 30000, "annotations": [], "expectedStatus": "passed", "projectId": "chromium", "projectName": "chromium", "results": [ { "workerIndex": 6, "parallelIndex": 6, "status": "timedOut", "duration": 30147, "error": { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m", "stack": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, "errors": [ { "message": "\u001b[31mTest timeout of 30000ms exceeded.\u001b[39m" }, { "location": { "file": "D:\\Coding\\gymflow\\tests\\exercise-library-archive-unarchive-exercise.spec.ts", "column": 140, "line": 27 }, "message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('div').filter({ hasText: /^Exercise to ArchiveFree Weights & Machines$/ }).getByRole('button', { name: 'Archive' })\u001b[22m\n\u001b[2m - locator resolved to \u001b[22m\n\u001b[2m - attempting click action\u001b[22m\n\u001b[2m 2 × waiting for element to be visible, enabled and stable\u001b[22m\n\u001b[2m - element is visible, enabled and stable\u001b[22m\n\u001b[2m - scrolling into view if needed\u001b[22m\n\u001b[2m - done scrolling\u001b[22m\n\u001b[2m -