Files
gymflow/test-output.json

3501 lines
200 KiB
JSON

{
"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 <button title=\"Archive\" class=\"p-2 rounded-full hover:bg-white/5 text-on-surface-variant\">…</button>\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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m 51 × 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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\n\n 25 | \n 26 | // 4. Click the 'Archive' icon for an existing exercise.\n> 27 | await page.locator('div').filter({ hasText: /^Exercise to ArchiveFree Weights & Machines$/ }).getByRole('button', { name: 'Archive' }).click();\n | ^\n 28 |\n 29 | // 5. Verify the exercise is marked as archived (or disappears if filtered).\n 30 | await expect(page.getByText('Exercise to Archive')).not.toBeVisible();\n at D:\\Coding\\gymflow\\tests\\exercise-library-archive-unarchive-exercise.spec.ts:27:140"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:49.899Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\exercise-library-archive-u-9d430--Archive-Unarchive-Exercise-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "815096277047911149a9-cb17371ae53066f341bf",
"file": "exercise-library-archive-unarchive-exercise.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "exercise-library-create-custom-exercise-bodyweight-with-percentage.spec.ts",
"file": "exercise-library-create-custom-exercise-bodyweight-with-percentage.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "exercise-library-create-custom-exercise-bodyweight-with-percentage.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Exercise Library - Create Custom Exercise (Bodyweight with %)",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 5,
"parallelIndex": 5,
"status": "passed",
"duration": 2268,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:52.239Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "325c5020f3b3bfcbc3c1-3e775390a5e6b9d15e11",
"file": "exercise-library-create-custom-exercise-bodyweight-with-percentage.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "exercise-library-create-custom-exercise-strength.spec.ts",
"file": "exercise-library-create-custom-exercise-strength.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "exercise-library-create-custom-exercise-strength.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Exercise Library - Create Custom Exercise (Strength)",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 2423,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:55.965Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "16f9b3b7fef000a83966-57d2094f42302364b777",
"file": "exercise-library-create-custom-exercise-strength.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "exercise-library-edit-exercise-name.spec.ts",
"file": "exercise-library-edit-exercise-name.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "exercise-library-edit-exercise-name.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Exercise Library - Edit Exercise Name",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 5,
"parallelIndex": 5,
"status": "failed",
"duration": 2861,
"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('Edited Exercise Name')\nExpected: visible\nError: strict mode violation: getByText('Edited Exercise Name') resolved to 17 elements:\n 1) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').first()\n 2) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(1)\n 3) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(2)\n 4) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(3)\n 5) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(4)\n 6) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(5)\n 7) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(13) > .overflow-hidden > .font-medium')\n 8) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(14) > .overflow-hidden > .font-medium')\n 9) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(15) > .overflow-hidden > .font-medium')\n 10) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(16) > .overflow-hidden > .font-medium')\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('Edited Exercise Name')\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('Edited Exercise Name')\nExpected: visible\nError: strict mode violation: getByText('Edited Exercise Name') resolved to 17 elements:\n 1) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').first()\n 2) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(1)\n 3) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(2)\n 4) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(3)\n 5) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(4)\n 6) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(5)\n 7) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(13) > .overflow-hidden > .font-medium')\n 8) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(14) > .overflow-hidden > .font-medium')\n 9) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(15) > .overflow-hidden > .font-medium')\n 10) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(16) > .overflow-hidden > .font-medium')\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('Edited Exercise Name')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\exercise-library-edit-exercise-name.spec.ts:37:58",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\exercise-library-edit-exercise-name.spec.ts",
"column": 58,
"line": 37
},
"snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m \u001b[90m// Expected Results:\u001b[39m\n \u001b[90m 36 |\u001b[39m \u001b[90m// - The exercise name is updated in the list.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'Edited Exercise Name'\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 38 |\u001b[39m \u001b[90m// - No error messages.\u001b[39m\n \u001b[90m 39 |\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 40 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\exercise-library-edit-exercise-name.spec.ts",
"column": 58,
"line": 37
},
"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('Edited Exercise Name')\nExpected: visible\nError: strict mode violation: getByText('Edited Exercise Name') resolved to 17 elements:\n 1) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').first()\n 2) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(1)\n 3) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(2)\n 4) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(3)\n 5) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(4)\n 6) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka getByText('Edited Exercise Name').nth(5)\n 7) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(13) > .overflow-hidden > .font-medium')\n 8) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(14) > .overflow-hidden > .font-medium')\n 9) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(15) > .overflow-hidden > .font-medium')\n 10) <div class=\"font-medium text-sm text-on-surface truncate\">Edited Exercise Name</div> aka locator('div:nth-child(16) > .overflow-hidden > .font-medium')\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('Edited Exercise Name')\u001b[22m\n\n\n 35 | // Expected Results:\n 36 | // - The exercise name is updated in the list.\n> 37 | await expect(page.getByText('Edited Exercise Name')).toBeVisible();\n | ^\n 38 | // - No error messages.\n 39 | await expect(page.locator('text=Error')).not.toBeVisible();\n 40 | });\n at D:\\Coding\\gymflow\\tests\\exercise-library-edit-exercise-name.spec.ts:37:58"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:54.546Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\exercise-library-edit-exer-5a259-ibrary---Edit-Exercise-Name-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\exercise-library-edit-exercise-name.spec.ts",
"column": 58,
"line": 37
}
}
],
"status": "unexpected"
}
],
"id": "1083fb449da52da94172-df500cb8ed2f56527585",
"file": "exercise-library-edit-exercise-name.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "exercise-library-filter-exercises-by-name.spec.ts",
"file": "exercise-library-filter-exercises-by-name.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "exercise-library-filter-exercises-by-name.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Exercise Library - Filter Exercises by Name",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 9,
"parallelIndex": 1,
"status": "timedOut",
"duration": 30154,
"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-filter-exercises-by-name.spec.ts",
"column": 62,
"line": 27
},
"message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: 'New Exercise' })\u001b[22m\n\u001b[2m - locator resolved to <button class=\"w-full py-2 border border-outline border-dashed rounded-lg text-sm text-on-surface-variant hover:bg-surface-container-high flex items-center justify-center gap-2\">…</button>\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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 20ms\u001b[22m\n\u001b[2m - 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 - <button class=\"px-4 py-2 rounded-lg flex items-center gap-2 text-xs font-medium border transition-all bg-transparent text-on-surface-variant border-outline hover:border-on-surface-variant\">…</button> from <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> subtree intercepts pointer events\u001b[22m\n\u001b[2m 2 × retrying click action\u001b[22m\n\u001b[2m - waiting 100ms\u001b[22m\n\u001b[2m - 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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m 12 × retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\u001b[2m - 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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\u001b[2m - 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 - <button class=\"px-4 py-2 rounded-lg flex items-center gap-2 text-xs font-medium border transition-all bg-transparent text-on-surface-variant border-outline hover:border-on-surface-variant\">…</button> from <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> subtree intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\u001b[2m - 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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\u001b[2m - 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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\u001b[2m - 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 - <div class=\"fixed inset-0 bg-black/60 z-[60] flex items-end sm:items-center justify-center p-4 backdrop-blur-sm\">…</div> intercepts pointer events\u001b[22m\n\u001b[2m - retrying click action\u001b[22m\n\u001b[2m - waiting 500ms\u001b[22m\n\n\n 25 |\n 26 | // Create another exercise named \"Tricep Extension\" to ensure filtering works\n> 27 | await page.getByRole('button', { name: 'New Exercise' }).click();\n | ^\n 28 | await page.getByRole('textbox', { name: '0' }).fill('Tricep Extension');\n 29 | await page.getByRole('button', { name: 'Free Weights & Machines' }).click();\n 30 | await page.getByRole('button', { name: 'Create' }).nth(1).click();\n at D:\\Coding\\gymflow\\tests\\exercise-library-filter-exercises-by-name.spec.ts:27:62"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:58.891Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\exercise-library-filter-ex-e2da5----Filter-Exercises-by-Name-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "b581f5989fe4fc594655-5bf93a249265593cfcd4",
"file": "exercise-library-filter-exercises-by-name.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "idle-state-body-weight-defaults-from-profile.spec.ts",
"file": "idle-state-body-weight-defaults-from-profile.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "III. Workout Tracking",
"file": "idle-state-body-weight-defaults-from-profile.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Idle State - Body Weight Defaults from Profile",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 10,
"parallelIndex": 2,
"status": "passed",
"duration": 2347,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:59.051Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "413213e48e8ce3cd4171-0ba98ccdfc508613fa0d",
"file": "idle-state-body-weight-defaults-from-profile.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "idle-state-start-free-workout.spec.ts",
"file": "idle-state-start-free-workout.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "III. Workout Tracking",
"file": "idle-state-start-free-workout.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Idle State - Start Free Workout",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 11,
"parallelIndex": 5,
"status": "failed",
"duration": 7265,
"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('ΓÇó 75.5kg')\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('ΓÇó 75.5kg')\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('ΓÇó 75.5kg')\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('ΓÇó 75.5kg')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\idle-state-start-free-workout.spec.ts:28:46",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\idle-state-start-free-workout.spec.ts",
"column": 46,
"line": 28
},
"snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[35m/(\\d{2}:){2}\\d{2}/\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n \u001b[90m 27 |\u001b[39m \u001b[90m// - The entered body weight is displayed in the active session header.\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'ΓÇó 75.5kg'\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[33m;\u001b[39m\n \u001b[90m 30 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 31 |\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\idle-state-start-free-workout.spec.ts",
"column": 46,
"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('ΓÇó 75.5kg')\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('ΓÇó 75.5kg')\u001b[22m\n\n\n 26 | await expect(page.getByText(/(\\d{2}:){2}\\d{2}/)).toBeVisible();\n 27 | // - The entered body weight is displayed in the active session header.\n> 28 | await expect(page.getByText('ΓÇó 75.5kg')).toBeVisible();\n | ^\n 29 | });\n 30 | });\n 31 |\n at D:\\Coding\\gymflow\\tests\\idle-state-start-free-workout.spec.ts:28:46"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:59.361Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\idle-state-start-free-work-348a6--State---Start-Free-Workout-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\idle-state-start-free-workout.spec.ts",
"column": 46,
"line": 28
}
}
],
"status": "unexpected"
}
],
"id": "3a298c8a08f1a1d43fe8-4a5c9f26480cda840381",
"file": "idle-state-start-free-workout.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "idle-state-start-quick-log.spec.ts",
"file": "idle-state-start-quick-log.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "III. Workout Tracking",
"file": "idle-state-start-quick-log.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Idle State - Start Quick Log",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 1743,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:19:58.568Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "f9879422aed062a26bdb-2eabcd53e490300a381d",
"file": "idle-state-start-quick-log.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "login-first-time-password-change-short.spec.ts",
"file": "login-first-time-password-change-short.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "login-first-time-password-change-short.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Login - First-Time Password Change (Password too short)",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 3188,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:00.352Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "d6ec83a92080d9ed9553-5e2d16d067f34e588deb",
"file": "login-first-time-password-change-short.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "login-first-time-password-change.spec.ts",
"file": "login-first-time-password-change.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "login-first-time-password-change.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Login - First-Time Password Change",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 10,
"parallelIndex": 2,
"status": "failed",
"duration": 7034,
"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: getByRole('heading', { name: 'Change Password' })\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 getByRole('heading', { name: 'Change Password' })\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: getByRole('heading', { name: 'Change Password' })\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 getByRole('heading', { name: 'Change Password' })\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\login-first-time-password-change.spec.ts:32:74",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\login-first-time-password-change.spec.ts",
"column": 74,
"line": 32
},
"snippet": "\u001b[0m \u001b[90m 30 |\u001b[39m \u001b[90m// Expected Results:\u001b[39m\n \u001b[90m 31 |\u001b[39m \u001b[90m// - User is prompted to change password on first login.\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[39mgetByRole(\u001b[32m'heading'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'Change Password'\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 33 |\u001b[39m\n \u001b[90m 34 |\u001b[39m \u001b[90m// 3. Enter a new password (at least 4 characters).\u001b[39m\n \u001b[90m 35 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'textbox'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'newtestpass'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\login-first-time-password-change.spec.ts",
"column": 74,
"line": 32
},
"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: getByRole('heading', { name: 'Change Password' })\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 getByRole('heading', { name: 'Change Password' })\u001b[22m\n\n\n 30 | // Expected Results:\n 31 | // - User is prompted to change password on first login.\n> 32 | await expect(page.getByRole('heading', { name: 'Change Password' })).toBeVisible();\n | ^\n 33 |\n 34 | // 3. Enter a new password (at least 4 characters).\n 35 | await page.getByRole('textbox').fill('newtestpass');\n at D:\\Coding\\gymflow\\tests\\login-first-time-password-change.spec.ts:32:74"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:01.660Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\login-first-time-password--08b65--First-Time-Password-Change-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\login-first-time-password-change.spec.ts",
"column": 74,
"line": 32
}
}
],
"status": "unexpected"
}
],
"id": "ee7c7620f07e792ddd5e-4f88bd9dc42591bfb0f2",
"file": "login-first-time-password-change.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "login-invalid-credentials.spec.ts",
"file": "login-invalid-credentials.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "login-invalid-credentials.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Login - Invalid Credentials",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 1158,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:03.575Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "efc0c905e7bb78ac6cb5-1aba507f5f23b50b3016",
"file": "login-invalid-credentials.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "login-language-selection-english.spec.ts",
"file": "login-language-selection-english.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "login-language-selection-english.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Login - Language Selection (English)",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 949,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:04.766Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "b808dd67558ac795209d-caeac76626806ebc6304",
"file": "login-language-selection-english.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "login-language-selection-russian.spec.ts",
"file": "login-language-selection-russian.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "login-language-selection-russian.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Login - Language Selection (Russian)",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 955,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:05.745Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "f0302247ef4b90ac0975-520a71510403d8b8c3f8",
"file": "login-language-selection-russian.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "login-successful-authentication.spec.ts",
"file": "login-successful-authentication.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "login-successful-authentication.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Login - Successful Authentication",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "passed",
"duration": 2497,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:06.722Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "0e91cbfa43c443fd1835-9813b2b5a79f0d7ee744",
"file": "login-successful-authentication.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "navigation-desktop-navigation-rail.spec.ts",
"file": "navigation-desktop-navigation-rail.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "navigation-desktop-navigation-rail.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Navigation - Desktop Navigation Rail",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 12,
"parallelIndex": 5,
"status": "failed",
"duration": 4989,
"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('History')\nExpected: visible\nError: strict mode violation: getByText('History') resolved to 3 elements:\n 1) <span class=\"text-[10px] font-medium transition-colors truncate w-full text-center text-on-surface\">History</span> aka getByText('History').first()\n 2) <span class=\"text-[11px] font-medium text-center text-on-surface\">History</span> aka getByRole('button', { name: 'History' })\n 3) <h2 class=\"text-2xl font-normal text-on-surface\">History</h2> aka getByRole('heading', { name: 'History' })\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('History')\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('History')\nExpected: visible\nError: strict mode violation: getByText('History') resolved to 3 elements:\n 1) <span class=\"text-[10px] font-medium transition-colors truncate w-full text-center text-on-surface\">History</span> aka getByText('History').first()\n 2) <span class=\"text-[11px] font-medium text-center text-on-surface\">History</span> aka getByRole('button', { name: 'History' })\n 3) <h2 class=\"text-2xl font-normal text-on-surface\">History</h2> aka getByRole('heading', { name: 'History' })\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('History')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\navigation-desktop-navigation-rail.spec.ts:28:45",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\navigation-desktop-navigation-rail.spec.ts",
"column": 45,
"line": 28
},
"snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m \u001b[90m// Click on 'History'\u001b[39m\n \u001b[90m 27 |\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'History'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\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'History'\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\n \u001b[90m 30 |\u001b[39m \u001b[90m// Click on 'Stats'\u001b[39m\n \u001b[90m 31 |\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'Stats'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\navigation-desktop-navigation-rail.spec.ts",
"column": 45,
"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('History')\nExpected: visible\nError: strict mode violation: getByText('History') resolved to 3 elements:\n 1) <span class=\"text-[10px] font-medium transition-colors truncate w-full text-center text-on-surface\">History</span> aka getByText('History').first()\n 2) <span class=\"text-[11px] font-medium text-center text-on-surface\">History</span> aka getByRole('button', { name: 'History' })\n 3) <h2 class=\"text-2xl font-normal text-on-surface\">History</h2> aka getByRole('heading', { name: 'History' })\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('History')\u001b[22m\n\n\n 26 | // Click on 'History'\n 27 | await page.getByRole('button', { name: 'History' }).click();\n> 28 | await expect(page.getByText('History')).toBeVisible();\n | ^\n 29 |\n 30 | // Click on 'Stats'\n 31 | await page.getByRole('button', { name: 'Stats' }).click();\n at D:\\Coding\\gymflow\\tests\\navigation-desktop-navigation-rail.spec.ts:28:45"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:08.465Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\navigation-desktop-navigat-b0ac4-n---Desktop-Navigation-Rail-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\navigation-desktop-navigation-rail.spec.ts",
"column": 45,
"line": 28
}
}
],
"status": "unexpected"
}
],
"id": "b894f7c4c96e0767afff-beccdf3dd23948057cb0",
"file": "navigation-desktop-navigation-rail.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "navigation-mobile-bottom-navigation-bar.spec.ts",
"file": "navigation-mobile-bottom-navigation-bar.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "I. Core & Authentication",
"file": "navigation-mobile-bottom-navigation-bar.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Navigation - Mobile Bottom Navigation Bar",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 13,
"parallelIndex": 2,
"status": "failed",
"duration": 4818,
"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('History')\nExpected: visible\nError: strict mode violation: getByText('History') resolved to 3 elements:\n 1) <span class=\"text-[10px] font-medium transition-colors truncate w-full text-center text-on-surface\">History</span> aka getByRole('button', { name: 'History' })\n 2) <span class=\"text-[11px] font-medium text-center text-on-surface\">History</span> aka getByText('History').nth(1)\n 3) <h2 class=\"text-2xl font-normal text-on-surface\">History</h2> aka getByRole('heading', { name: 'History' })\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('History')\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('History')\nExpected: visible\nError: strict mode violation: getByText('History') resolved to 3 elements:\n 1) <span class=\"text-[10px] font-medium transition-colors truncate w-full text-center text-on-surface\">History</span> aka getByRole('button', { name: 'History' })\n 2) <span class=\"text-[11px] font-medium text-center text-on-surface\">History</span> aka getByText('History').nth(1)\n 3) <h2 class=\"text-2xl font-normal text-on-surface\">History</h2> aka getByRole('heading', { name: 'History' })\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('History')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\navigation-mobile-bottom-navigation-bar.spec.ts:28:45",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\navigation-mobile-bottom-navigation-bar.spec.ts",
"column": 45,
"line": 28
},
"snippet": "\u001b[0m \u001b[90m 26 |\u001b[39m \u001b[90m// Click on 'History'\u001b[39m\n \u001b[90m 27 |\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'History'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\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'History'\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\n \u001b[90m 30 |\u001b[39m \u001b[90m// Click on 'Stats'\u001b[39m\n \u001b[90m 31 |\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'Stats'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\navigation-mobile-bottom-navigation-bar.spec.ts",
"column": 45,
"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('History')\nExpected: visible\nError: strict mode violation: getByText('History') resolved to 3 elements:\n 1) <span class=\"text-[10px] font-medium transition-colors truncate w-full text-center text-on-surface\">History</span> aka getByRole('button', { name: 'History' })\n 2) <span class=\"text-[11px] font-medium text-center text-on-surface\">History</span> aka getByText('History').nth(1)\n 3) <h2 class=\"text-2xl font-normal text-on-surface\">History</h2> aka getByRole('heading', { name: 'History' })\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('History')\u001b[22m\n\n\n 26 | // Click on 'History'\n 27 | await page.getByRole('button', { name: 'History' }).click();\n> 28 | await expect(page.getByText('History')).toBeVisible();\n | ^\n 29 |\n 30 | // Click on 'Stats'\n 31 | await page.getByRole('button', { name: 'Stats' }).click();\n at D:\\Coding\\gymflow\\tests\\navigation-mobile-bottom-navigation-bar.spec.ts:28:45"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:10.892Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\navigation-mobile-bottom-n-bd4ba-obile-Bottom-Navigation-Bar-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\navigation-mobile-bottom-navigation-bar.spec.ts",
"column": 45,
"line": 28
}
}
],
"status": "unexpected"
}
],
"id": "0964b80b040b0a1a1239-7ea6d8ee6f66b0ed5092",
"file": "navigation-mobile-bottom-navigation-bar.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "performance-statistics-view-body-weight-chart.spec.ts",
"file": "performance-statistics-view-body-weight-chart.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "performance-statistics-view-body-weight-chart.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Performance Statistics - View Body Weight Chart",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 8,
"parallelIndex": 0,
"status": "failed",
"duration": 5471,
"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('81')\nExpected: visible\nError: strict mode violation: getByText('81') resolved to 2 elements:\n 1) <tspan x=\"57\" dy=\"0.355em\">81</tspan> aka locator('#recharts-zindex-2000-_r_16_').getByText('81')\n 2) <span aria-hidden=\"true\" id=\"recharts_measurement_span\">81</span> aka locator('#recharts_measurement_span')\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('81')\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('81')\nExpected: visible\nError: strict mode violation: getByText('81') resolved to 2 elements:\n 1) <tspan x=\"57\" dy=\"0.355em\">81</tspan> aka locator('#recharts-zindex-2000-_r_16_').getByText('81')\n 2) <span aria-hidden=\"true\" id=\"recharts_measurement_span\">81</span> aka locator('#recharts_measurement_span')\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('81')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\performance-statistics-view-body-weight-chart.spec.ts:31:40",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-body-weight-chart.spec.ts",
"column": 40,
"line": 31
},
"snippet": "\u001b[0m \u001b[90m 29 |\u001b[39m \u001b[90m// - The chart accurately reflects the user's body weight changes over time.\u001b[39m\n \u001b[90m 30 |\u001b[39m \u001b[90m// NOTE: Verifying chart content visually is hard, will verify presence of relevant text.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 31 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'81'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m \u001b[90m// Check for some values on the chart axis\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 32 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByText(\u001b[32m'85'\u001b[39m))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m \u001b[90m// Check for some values on the chart axis\u001b[39m\n \u001b[90m 33 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 34 |\u001b[39m })\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-body-weight-chart.spec.ts",
"column": 40,
"line": 31
},
"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('81')\nExpected: visible\nError: strict mode violation: getByText('81') resolved to 2 elements:\n 1) <tspan x=\"57\" dy=\"0.355em\">81</tspan> aka locator('#recharts-zindex-2000-_r_16_').getByText('81')\n 2) <span aria-hidden=\"true\" id=\"recharts_measurement_span\">81</span> aka locator('#recharts_measurement_span')\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByText('81')\u001b[22m\n\n\n 29 | // - The chart accurately reflects the user's body weight changes over time.\n 30 | // NOTE: Verifying chart content visually is hard, will verify presence of relevant text.\n> 31 | await expect(page.getByText('81')).toBeVisible(); // Check for some values on the chart axis\n | ^\n 32 | await expect(page.getByText('85')).toBeVisible(); // Check for some values on the chart axis\n 33 | });\n 34 | });\n at D:\\Coding\\gymflow\\tests\\performance-statistics-view-body-weight-chart.spec.ts:31:40"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:09.245Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\performance-statistics-vie-eb4ff-cs---View-Body-Weight-Chart-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-body-weight-chart.spec.ts",
"column": 40,
"line": 31
}
}
],
"status": "unexpected"
}
],
"id": "0c95906ed79492f86d3b-bd4caae75aa374a0fcef",
"file": "performance-statistics-view-body-weight-chart.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "performance-statistics-view-set-count-chart.spec.ts",
"file": "performance-statistics-view-set-count-chart.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "performance-statistics-view-set-count-chart.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Performance Statistics - View Set Count Chart",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 14,
"parallelIndex": 7,
"status": "failed",
"duration": 2607,
"error": {
"message": "Error: locator.fill: Error: strict mode violation: getByRole('spinbutton') resolved to 2 elements:\n 1) <input step=\"0.1\" value=\"80\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(1)\n 2) <input value=\"5\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(2)\n\nCall log:\n\u001b[2m - waiting for getByRole('spinbutton')\u001b[22m\n",
"stack": "Error: locator.fill: Error: strict mode violation: getByRole('spinbutton') resolved to 2 elements:\n 1) <input step=\"0.1\" value=\"80\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(1)\n 2) <input value=\"5\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(2)\n\nCall log:\n\u001b[2m - waiting for getByRole('spinbutton')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\performance-statistics-view-set-count-chart.spec.ts:27:40",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-set-count-chart.spec.ts",
"column": 40,
"line": 27
},
"snippet": "\u001b[0m \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m \u001b[90m// Session 2\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 27 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'spinbutton'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'83'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 28 |\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'Free Workout'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'textbox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'0'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'Bench Press'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\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'Bench Press'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-set-count-chart.spec.ts",
"column": 40,
"line": 27
},
"message": "Error: locator.fill: Error: strict mode violation: getByRole('spinbutton') resolved to 2 elements:\n 1) <input step=\"0.1\" value=\"80\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(1)\n 2) <input value=\"5\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(2)\n\nCall log:\n\u001b[2m - waiting for getByRole('spinbutton')\u001b[22m\n\n\n 25 |\n 26 | // Session 2\n> 27 | await page.getByRole('spinbutton').fill('83');\n | ^\n 28 | await page.getByRole('button', { name: 'Free Workout' }).click();\n 29 | await page.getByRole('textbox', { name: '0' }).fill('Bench Press');\n 30 | await page.getByRole('button', { name: 'Bench Press' }).click();\n at D:\\Coding\\gymflow\\tests\\performance-statistics-view-set-count-chart.spec.ts:27:40"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:15.764Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\performance-statistics-vie-534a7-tics---View-Set-Count-Chart-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-set-count-chart.spec.ts",
"column": 40,
"line": 27
}
}
],
"status": "unexpected"
}
],
"id": "cb17337051e1c357acc2-32eab82c7ec7dd096d10",
"file": "performance-statistics-view-set-count-chart.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "performance-statistics-view-volume-chart.spec.ts",
"file": "performance-statistics-view-volume-chart.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "performance-statistics-view-volume-chart.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "B. Performance Statistics - View Volume Chart",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 15,
"parallelIndex": 5,
"status": "failed",
"duration": 3042,
"error": {
"message": "Error: locator.fill: Error: strict mode violation: getByRole('spinbutton') resolved to 2 elements:\n 1) <input step=\"0.1\" value=\"80\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(1)\n 2) <input value=\"5\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(2)\n\nCall log:\n\u001b[2m - waiting for getByRole('spinbutton')\u001b[22m\n",
"stack": "Error: locator.fill: Error: strict mode violation: getByRole('spinbutton') resolved to 2 elements:\n 1) <input step=\"0.1\" value=\"80\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(1)\n 2) <input value=\"5\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(2)\n\nCall log:\n\u001b[2m - waiting for getByRole('spinbutton')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\performance-statistics-view-volume-chart.spec.ts:27:40",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-volume-chart.spec.ts",
"column": 40,
"line": 27
},
"snippet": "\u001b[0m \u001b[90m 25 |\u001b[39m\n \u001b[90m 26 |\u001b[39m \u001b[90m// Session 2\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 27 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'spinbutton'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'83'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 28 |\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'Free Workout'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 29 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'textbox'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'0'\u001b[39m })\u001b[33m.\u001b[39mfill(\u001b[32m'Bench Press'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 30 |\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'Bench Press'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-volume-chart.spec.ts",
"column": 40,
"line": 27
},
"message": "Error: locator.fill: Error: strict mode violation: getByRole('spinbutton') resolved to 2 elements:\n 1) <input step=\"0.1\" value=\"80\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(1)\n 2) <input value=\"5\" type=\"number\" placeholder=\"0\" inputmode=\"decimal\" class=\"w-full pt-6 pb-2 px-4 bg-transparent text-2xl text-on-surface focus:outline-none placeholder-transparent\"/> aka getByPlaceholder('0').nth(2)\n\nCall log:\n\u001b[2m - waiting for getByRole('spinbutton')\u001b[22m\n\n\n 25 |\n 26 | // Session 2\n> 27 | await page.getByRole('spinbutton').fill('83');\n | ^\n 28 | await page.getByRole('button', { name: 'Free Workout' }).click();\n 29 | await page.getByRole('textbox', { name: '0' }).fill('Bench Press');\n 30 | await page.getByRole('button', { name: 'Bench Press' }).click();\n at D:\\Coding\\gymflow\\tests\\performance-statistics-view-volume-chart.spec.ts:27:40"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:15.840Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\performance-statistics-vie-59696-tistics---View-Volume-Chart-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\performance-statistics-view-volume-chart.spec.ts",
"column": 40,
"line": 27
}
}
],
"status": "unexpected"
}
],
"id": "06eae7d5420692957d97-1e8a18b7be20f609a9a0",
"file": "performance-statistics-view-volume-chart.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "session-history-delete-sporadic-set.spec.ts",
"file": "session-history-delete-sporadic-set.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "session-history-delete-sporadic-set.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Session History - Delete Sporadic Set",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 16,
"parallelIndex": 0,
"status": "passed",
"duration": 7150,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:17.009Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "e941aedf22064e3ffd45-0153211d868e42423b28",
"file": "session-history-delete-sporadic-set.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "session-history-edit-past-session-details.spec.ts",
"file": "session-history-edit-past-session-details.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "session-history-edit-past-session-details.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Session History - Edit Past Session Details",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 17,
"parallelIndex": 2,
"status": "timedOut",
"duration": 30504,
"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\\session-history-edit-past-session-details.spec.ts",
"column": 172,
"line": 31
},
"message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('div').filter({ hasText: /^2025-11-30/ }).filter({ hasText: '1m No plan 83kg' }).filter({ hasText: 'Sets: 1' }).filter({ hasText: '0.4t' }).first()\u001b[22m\n\n\n 29 | // 4. Open the detailed view of a session.\n 30 | // Click on the most recent workout session.\n> 31 | await page.locator('div').filter({ hasText: /^2025-11-30/ }).filter({ hasText: '1m No plan 83kg' }).filter({ hasText: 'Sets: 1' }).filter({ hasText: '0.4t' }).first().click();\n | ^\n 32 |\n 33 | // 5. Modify the 'Start Time', 'End Time', or 'Body Weight'.\n 34 | await page.getByRole('spinbutton').first().fill('85'); // Change body weight\n at D:\\Coding\\gymflow\\tests\\session-history-edit-past-session-details.spec.ts:31:172"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:18.385Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\session-history-edit-past--fa31e---Edit-Past-Session-Details-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "0a8c9caeb92cd1206356-2032531933f1631ff68a",
"file": "session-history-edit-past-session-details.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "session-history-view-detailed-session.spec.ts",
"file": "session-history-view-detailed-session.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "session-history-view-detailed-session.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Session History - View Detailed Session",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 18,
"parallelIndex": 7,
"status": "timedOut",
"duration": 30373,
"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\\session-history-view-detailed-session.spec.ts",
"column": 172,
"line": 31
},
"message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for locator('div').filter({ hasText: /^2025-11-30/ }).filter({ hasText: '1m No plan 83kg' }).filter({ hasText: 'Sets: 1' }).filter({ hasText: '0.4t' }).first()\u001b[22m\n\n\n 29 | // 4. Click on a workout session entry.\n 30 | // Click on the most recent workout session.\n> 31 | await page.locator('div').filter({ hasText: /^2025-11-30/ }).filter({ hasText: '1m No plan 83kg' }).filter({ hasText: 'Sets: 1' }).filter({ hasText: '0.4t' }).first().click();\n | ^\n 32 |\n 33 | // Expected Results:\n 34 | // - A detailed view of the session opens, showing all individual sets with their metrics.\n at D:\\Coding\\gymflow\\tests\\session-history-view-detailed-session.spec.ts:31:172"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:21.665Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\session-history-view-detai-e4865-ory---View-Detailed-Session-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "6dc06d95cf9af1b59579-1b443a8a2f78400f651e",
"file": "session-history-view-detailed-session.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "session-history-view-past-sessions.spec.ts",
"file": "session-history-view-past-sessions.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "IV. Data & Progress",
"file": "session-history-view-past-sessions.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Session History - View Past Sessions",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 19,
"parallelIndex": 5,
"status": "failed",
"duration": 8585,
"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: locator('div').filter({ hasText: 'Bench Press' })\nExpected: visible\nError: strict mode violation: locator('div').filter({ hasText: 'Bench Press' }) resolved to 122 elements:\n 1) <div id=\"root\">…</div> aka locator('#root')\n 2) <div class=\"h-screen w-screen bg-surface text-on-surface font-sans flex flex-col md:flex-row overflow-hidden\">…</div> aka getByText('TrackerPlansHistoryStatsAI CoachProfileTrackerPlansHistoryStatsAI')\n 3) <div class=\"h-full w-full pb-20 md:pb-0 bg-surface\">…</div> aka locator('div').filter({ hasText: 'History2025-11-3008:20 PM<' }).nth(2)\n 4) <div class=\"h-full flex flex-col bg-surface\">…</div> aka getByText('History2025-11-3008:20 PM<')\n 5) <div class=\"flex-1 overflow-y-auto p-4 space-y-4 pb-20\">…</div> aka getByText('-11-3008:20 PM<1mNo plan85kgSets: 10.4t2025-11-3008:20 PM<1mNo plan85kgSets:')\n 6) <div class=\"mt-8\">…</div> aka getByText('Quick Logged Sets2025-11-')\n 7) <div class=\"mb-4\">…</div> aka getByText('2025-11-30Bench Press80kg x')\n 8) <div class=\"space-y-2\">…</div> aka getByText('Bench Press80kg x 508:20 PMBench Press80kg x 508:20 PMBench Press80kg x 508:20')\n 9) <div class=\"bg-surface-container-low rounded-xl p-4 border border-outline-variant/10 flex justify-between items-center\">…</div> aka locator('div').filter({ hasText: /^Bench Press80kg x 508:20 PM$/ }).first()\n 10) <div class=\"flex-1\">…</div> aka getByText('Bench Press80kg x 508:20 PM').first()\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: 'Bench Press' })\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: locator('div').filter({ hasText: 'Bench Press' })\nExpected: visible\nError: strict mode violation: locator('div').filter({ hasText: 'Bench Press' }) resolved to 122 elements:\n 1) <div id=\"root\">…</div> aka locator('#root')\n 2) <div class=\"h-screen w-screen bg-surface text-on-surface font-sans flex flex-col md:flex-row overflow-hidden\">…</div> aka getByText('TrackerPlansHistoryStatsAI CoachProfileTrackerPlansHistoryStatsAI')\n 3) <div class=\"h-full w-full pb-20 md:pb-0 bg-surface\">…</div> aka locator('div').filter({ hasText: 'History2025-11-3008:20 PM<' }).nth(2)\n 4) <div class=\"h-full flex flex-col bg-surface\">…</div> aka getByText('History2025-11-3008:20 PM<')\n 5) <div class=\"flex-1 overflow-y-auto p-4 space-y-4 pb-20\">…</div> aka getByText('-11-3008:20 PM<1mNo plan85kgSets: 10.4t2025-11-3008:20 PM<1mNo plan85kgSets:')\n 6) <div class=\"mt-8\">…</div> aka getByText('Quick Logged Sets2025-11-')\n 7) <div class=\"mb-4\">…</div> aka getByText('2025-11-30Bench Press80kg x')\n 8) <div class=\"space-y-2\">…</div> aka getByText('Bench Press80kg x 508:20 PMBench Press80kg x 508:20 PMBench Press80kg x 508:20')\n 9) <div class=\"bg-surface-container-low rounded-xl p-4 border border-outline-variant/10 flex justify-between items-center\">…</div> aka locator('div').filter({ hasText: /^Bench Press80kg x 508:20 PM$/ }).first()\n 10) <div class=\"flex-1\">…</div> aka getByText('Bench Press80kg x 508:20 PM').first()\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: 'Bench Press' })\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\session-history-view-past-sessions.spec.ts:40:74",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\session-history-view-past-sessions.spec.ts",
"column": 74,
"line": 40
},
"snippet": "\u001b[0m \u001b[90m 38 |\u001b[39m \u001b[90m// - All past workout sessions and sporadic sets are displayed, grouped by date.\u001b[39m\n \u001b[90m 39 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'heading'\u001b[39m\u001b[33m,\u001b[39m { name\u001b[33m:\u001b[39m \u001b[32m'History'\u001b[39m }))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 40 |\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[32m'Bench Press'\u001b[39m }))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m \u001b[90m// Check for logged session\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 41 |\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[32m'80kg / 5 reps'\u001b[39m }))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m \u001b[90m// Check for logged sporadic set\u001b[39m\n \u001b[90m 42 |\u001b[39m \u001b[90m// - Each entry shows key summary information (date, duration, plan name, total work, exercise count).\u001b[39m\n \u001b[90m 43 |\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/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2} [ap]m \\d{1,2}m No plan 83kgSets: \\d{1,2}0.\\d{1,2}t$/\u001b[39m }))\u001b[33m.\u001b[39mtoBeVisible()\u001b[33m;\u001b[39m \u001b[90m// Example check for a workout session summary\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\session-history-view-past-sessions.spec.ts",
"column": 74,
"line": 40
},
"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: locator('div').filter({ hasText: 'Bench Press' })\nExpected: visible\nError: strict mode violation: locator('div').filter({ hasText: 'Bench Press' }) resolved to 122 elements:\n 1) <div id=\"root\">…</div> aka locator('#root')\n 2) <div class=\"h-screen w-screen bg-surface text-on-surface font-sans flex flex-col md:flex-row overflow-hidden\">…</div> aka getByText('TrackerPlansHistoryStatsAI CoachProfileTrackerPlansHistoryStatsAI')\n 3) <div class=\"h-full w-full pb-20 md:pb-0 bg-surface\">…</div> aka locator('div').filter({ hasText: 'History2025-11-3008:20 PM<' }).nth(2)\n 4) <div class=\"h-full flex flex-col bg-surface\">…</div> aka getByText('History2025-11-3008:20 PM<')\n 5) <div class=\"flex-1 overflow-y-auto p-4 space-y-4 pb-20\">…</div> aka getByText('-11-3008:20 PM<1mNo plan85kgSets: 10.4t2025-11-3008:20 PM<1mNo plan85kgSets:')\n 6) <div class=\"mt-8\">…</div> aka getByText('Quick Logged Sets2025-11-')\n 7) <div class=\"mb-4\">…</div> aka getByText('2025-11-30Bench Press80kg x')\n 8) <div class=\"space-y-2\">…</div> aka getByText('Bench Press80kg x 508:20 PMBench Press80kg x 508:20 PMBench Press80kg x 508:20')\n 9) <div class=\"bg-surface-container-low rounded-xl p-4 border border-outline-variant/10 flex justify-between items-center\">…</div> aka locator('div').filter({ hasText: /^Bench Press80kg x 508:20 PM$/ }).first()\n 10) <div class=\"flex-1\">…</div> aka getByText('Bench Press80kg x 508:20 PM').first()\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: 'Bench Press' })\u001b[22m\n\n\n 38 | // - All past workout sessions and sporadic sets are displayed, grouped by date.\n 39 | await expect(page.getByRole('heading', { name: 'History' })).toBeVisible();\n> 40 | await expect(page.locator('div').filter({ hasText: 'Bench Press' })).toBeVisible(); // Check for logged session\n | ^\n 41 | await expect(page.locator('div').filter({ hasText: '80kg / 5 reps' })).toBeVisible(); // Check for logged sporadic set\n 42 | // - Each entry shows key summary information (date, duration, plan name, total work, exercise count).\n 43 | await expect(page.locator('div').filter({ hasText: /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2} [ap]m \\d{1,2}m No plan 83kgSets: \\d{1,2}0.\\d{1,2}t$/ })).toBeVisible(); // Example check for a workout session summary\n at D:\\Coding\\gymflow\\tests\\session-history-view-past-sessions.spec.ts:40:74"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:21.944Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\session-history-view-past--98158-istory---View-Past-Sessions-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\session-history-view-past-sessions.spec.ts",
"column": 74,
"line": 40
}
}
],
"status": "unexpected"
}
],
"id": "d5c5d0d11b5758182eb1-d160b8e2ad7003706d8e",
"file": "session-history-view-past-sessions.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "sporadic-logging-exercise-search-and-clear.spec.ts",
"file": "sporadic-logging-exercise-search-and-clear.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "III. Workout Tracking",
"file": "sporadic-logging-exercise-search-and-clear.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "D. Sporadic Logging - Exercise Search and Clear",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 20,
"parallelIndex": 3,
"status": "passed",
"duration": 3997,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:22.231Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "bb3574ad1b58859b2d2e-eebedb9c02e1b781d7a6",
"file": "sporadic-logging-exercise-search-and-clear.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "sporadic-logging-log-strength-sporadic-set.spec.ts",
"file": "sporadic-logging-log-strength-sporadic-set.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "III. Workout Tracking",
"file": "sporadic-logging-log-strength-sporadic-set.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "D. Sporadic Logging - Log Strength Sporadic Set",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 21,
"parallelIndex": 4,
"status": "failed",
"duration": 4672,
"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: locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })\nExpected: visible\nError: strict mode violation: locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }) resolved to 74 elements:\n 1) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).first()\n 2) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').first()\n 3) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).nth(2)\n 4) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(1)\n 5) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).nth(4)\n 6) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(2)\n 7) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div:nth-child(4)')\n 8) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(3)\n 9) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div:nth-child(5)')\n 10) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(4)\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })\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: locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })\nExpected: visible\nError: strict mode violation: locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }) resolved to 74 elements:\n 1) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).first()\n 2) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').first()\n 3) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).nth(2)\n 4) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(1)\n 5) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).nth(4)\n 6) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(2)\n 7) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div:nth-child(4)')\n 8) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(3)\n 9) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div:nth-child(5)')\n 10) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(4)\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\sporadic-logging-log-strength-sporadic-set.spec.ts:30:102",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\sporadic-logging-log-strength-sporadic-set.spec.ts",
"column": 102,
"line": 30
},
"snippet": "\u001b[0m \u001b[90m 28 |\u001b[39m \u001b[90m// Expected Results:\u001b[39m\n \u001b[90m 29 |\u001b[39m \u001b[90m// - The sporadic set is added to today's history in the Sporadic Logging view.\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 30 |\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/^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/\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 31 |\u001b[39m \u001b[90m// - Input fields are cleared.\u001b[39m\n \u001b[90m 32 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByPlaceholder(\u001b[32m'0'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m1\u001b[39m))\u001b[33m.\u001b[39mtoHaveValue(\u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 33 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByPlaceholder(\u001b[32m'0'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m2\u001b[39m))\u001b[33m.\u001b[39mtoHaveValue(\u001b[32m''\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\sporadic-logging-log-strength-sporadic-set.spec.ts",
"column": 102,
"line": 30
},
"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: locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })\nExpected: visible\nError: strict mode violation: locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }) resolved to 74 elements:\n 1) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).first()\n 2) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').first()\n 3) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).nth(2)\n 4) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(1)\n 5) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ }).nth(4)\n 6) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(2)\n 7) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div:nth-child(4)')\n 8) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(3)\n 9) <div class=\"bg-surface-container rounded-lg p-3 flex items-center justify-between shadow-elevation-1 animate-in fade-in\">…</div> aka locator('div:nth-child(5)')\n 10) <div>…</div> aka getByText('Bench Press80 Weight (kg) / 5').nth(4)\n ...\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })\u001b[22m\n\n\n 28 | // Expected Results:\n 29 | // - The sporadic set is added to today's history in the Sporadic Logging view.\n> 30 | await expect(page.locator('div').filter({ hasText: /^Bench Press80 Weight \\(kg\\) \\/ 5 Reps$/ })).toBeVisible();\n | ^\n 31 | // - Input fields are cleared.\n 32 | await expect(page.getByPlaceholder('0').nth(1)).toHaveValue('');\n 33 | await expect(page.getByPlaceholder('0').nth(2)).toHaveValue('');\n at D:\\Coding\\gymflow\\tests\\sporadic-logging-log-strength-sporadic-set.spec.ts:30:102"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:22.302Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\sporadic-logging-log-stren-da003---Log-Strength-Sporadic-Set-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\sporadic-logging-log-strength-sporadic-set.spec.ts",
"column": 102,
"line": 30
}
}
],
"status": "unexpected"
}
],
"id": "e7991d893c7bc86939c6-60b8dac8dc08c920c4d7",
"file": "sporadic-logging-log-strength-sporadic-set.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "ui-ux.spec.ts",
"file": "ui-ux.spec.ts",
"column": 0,
"line": 0,
"specs": [
{
"title": "seed",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 22,
"parallelIndex": 6,
"status": "passed",
"duration": 521,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:23.151Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "e121d5c986d935446888-4e3aee35455855203239",
"file": "ui-ux.spec.ts",
"line": 3,
"column": 1
}
]
},
{
"title": "user-profile-change-password-too-short.spec.ts",
"file": "user-profile-change-password-too-short.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "V. User & System Management",
"file": "user-profile-change-password-too-short.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. User Profile - Change Password (Too Short)",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 22,
"parallelIndex": 6,
"status": "passed",
"duration": 3960,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:24.268Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "a3cc9d506b5af1b46702-24df7a8b1c30c6f343a1",
"file": "user-profile-change-password-too-short.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "user-profile-change-password.spec.ts",
"file": "user-profile-change-password.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "V. User & System Management",
"file": "user-profile-change-password.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. User Profile - Change Password",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 16,
"parallelIndex": 0,
"status": "passed",
"duration": 6386,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:24.438Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "9b416c5e80affba5daf4-ef4cb20567324e94d700",
"file": "user-profile-change-password.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "user-profile-dedicated-daily-weight-logging.spec.ts",
"file": "user-profile-dedicated-daily-weight-logging.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "V. User & System Management",
"file": "user-profile-dedicated-daily-weight-logging.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. User Profile - Dedicated Daily Weight Logging",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 20,
"parallelIndex": 3,
"status": "timedOut",
"duration": 30030,
"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\\user-profile-dedicated-daily-weight-logging.spec.ts",
"column": 57,
"line": 15
},
"message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: 'Profile' })\u001b[22m\n\n\n 13 |\n 14 | // 2. Navigate to the 'Profile' section.\n> 15 | await page.getByRole('button', { name: 'Profile' }).click();\n | ^\n 16 |\n 17 | // 3. Expand 'Weight Tracker'.\n 18 | await page.getByRole('button', { name: 'Weight Tracker' }).click();\n at D:\\Coding\\gymflow\\tests\\user-profile-dedicated-daily-weight-logging.spec.ts:15:57"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:26.583Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\user-profile-dedicated-dai-c0400-icated-Daily-Weight-Logging-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "462fd088d4f549ceef61-0809e1a954f64272b0bf",
"file": "user-profile-dedicated-daily-weight-logging.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "user-profile-delete-own-account.spec.ts",
"file": "user-profile-delete-own-account.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "V. User & System Management",
"file": "user-profile-delete-own-account.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. User Profile - Delete Own Account",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 23,
"parallelIndex": 4,
"status": "failed",
"duration": 2370,
"error": {
"message": "Error: locator.fill: Error: strict mode violation: getByRole('textbox') resolved to 2 elements:\n 1) <input type=\"email\" placeholder=\"user@gymflow.ai\" value=\"deleteuser@gymflow.ai\" class=\"w-full bg-transparent px-4 pb-3 pt-1 text-lg text-on-surface focus:outline-none\"/> aka getByRole('textbox', { name: 'user@gymflow.ai' })\n 2) <input type=\"password\" value=\"deletepass123\" class=\"w-full bg-transparent px-4 pb-3 pt-1 text-lg text-on-surface focus:outline-none\"/> aka locator('input[type=\"password\"]')\n\nCall log:\n\u001b[2m - waiting for getByRole('textbox')\u001b[22m\n",
"stack": "Error: locator.fill: Error: strict mode violation: getByRole('textbox') resolved to 2 elements:\n 1) <input type=\"email\" placeholder=\"user@gymflow.ai\" value=\"deleteuser@gymflow.ai\" class=\"w-full bg-transparent px-4 pb-3 pt-1 text-lg text-on-surface focus:outline-none\"/> aka getByRole('textbox', { name: 'user@gymflow.ai' })\n 2) <input type=\"password\" value=\"deletepass123\" class=\"w-full bg-transparent px-4 pb-3 pt-1 text-lg text-on-surface focus:outline-none\"/> aka locator('input[type=\"password\"]')\n\nCall log:\n\u001b[2m - waiting for getByRole('textbox')\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\user-profile-delete-own-account.spec.ts:24:37",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\user-profile-delete-own-account.spec.ts",
"column": 37,
"line": 24
},
"snippet": "\u001b[0m \u001b[90m 22 |\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'Login'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 23 |\u001b[39m \u001b[90m// Handle first time login password change\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 24 |\u001b[39m \u001b[36mawait\u001b[39m page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'textbox'\u001b[39m)\u001b[33m.\u001b[39mfill(\u001b[32m'newdeletepass'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 25 |\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'Save & Login'\u001b[39m })\u001b[33m.\u001b[39mclick()\u001b[33m;\u001b[39m\n \u001b[90m 26 |\u001b[39m\n \u001b[90m 27 |\u001b[39m \u001b[90m// 2. Navigate to the 'Profile' section.\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\user-profile-delete-own-account.spec.ts",
"column": 37,
"line": 24
},
"message": "Error: locator.fill: Error: strict mode violation: getByRole('textbox') resolved to 2 elements:\n 1) <input type=\"email\" placeholder=\"user@gymflow.ai\" value=\"deleteuser@gymflow.ai\" class=\"w-full bg-transparent px-4 pb-3 pt-1 text-lg text-on-surface focus:outline-none\"/> aka getByRole('textbox', { name: 'user@gymflow.ai' })\n 2) <input type=\"password\" value=\"deletepass123\" class=\"w-full bg-transparent px-4 pb-3 pt-1 text-lg text-on-surface focus:outline-none\"/> aka locator('input[type=\"password\"]')\n\nCall log:\n\u001b[2m - waiting for getByRole('textbox')\u001b[22m\n\n\n 22 | await page.getByRole('button', { name: 'Login' }).click();\n 23 | // Handle first time login password change\n> 24 | await page.getByRole('textbox').fill('newdeletepass');\n | ^\n 25 | await page.getByRole('button', { name: 'Save & Login' }).click();\n 26 |\n 27 | // 2. Navigate to the 'Profile' section.\n at D:\\Coding\\gymflow\\tests\\user-profile-delete-own-account.spec.ts:24:37"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:30.752Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\user-profile-delete-own-ac-e5360-rofile---Delete-Own-Account-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\user-profile-delete-own-account.spec.ts",
"column": 37,
"line": 24
}
}
],
"status": "unexpected"
}
],
"id": "7b849742d8b012010916-98698d08d5b0bf74e18a",
"file": "user-profile-delete-own-account.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "user-profile-language-preference-change.spec.ts",
"file": "user-profile-language-preference-change.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "V. User & System Management",
"file": "user-profile-language-preference-change.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. User Profile - Language Preference Change",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 22,
"parallelIndex": 6,
"status": "timedOut",
"duration": 30058,
"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\\user-profile-language-preference-change.spec.ts",
"column": 57,
"line": 15
},
"message": "Error: locator.click: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('button', { name: 'Profile' })\u001b[22m\n\n\n 13 |\n 14 | // 2. Navigate to the 'Profile' section.\n> 15 | await page.getByRole('button', { name: 'Profile' }).click();\n | ^\n 16 |\n 17 | // 3. Select a different language (e.g., 'Русский') from the language dropdown.\n 18 | await page.getByRole('combobox').nth(1).selectOption(['Русский']);\n at D:\\Coding\\gymflow\\tests\\user-profile-language-preference-change.spec.ts:15:57"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:28.315Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\user-profile-language-pref-e2ecb--Language-Preference-Change-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "1f6df25086ae91f2535d-913fa5172edcb8eaf6f6",
"file": "user-profile-language-preference-change.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "user-profile-update-personal-information.spec.ts",
"file": "user-profile-update-personal-information.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "V. User & System Management",
"file": "user-profile-update-personal-information.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. User Profile - Update Personal Information",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 24,
"parallelIndex": 1,
"status": "failed",
"duration": 7919,
"error": {
"message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveValue\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('combobox').first()\nExpected: \u001b[32m\"F\u001b[7memale\u001b[27m\"\u001b[39m\nReceived: \u001b[31m\"F\u001b[7mEMALE\u001b[27m\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toHaveValue\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByRole('combobox').first()\u001b[22m\n\u001b[2m 9 × locator resolved to <select class=\"w-full bg-transparent text-on-surface focus:outline-none text-sm py-1 bg-surface-container-high\">…</select>\u001b[22m\n\u001b[2m - unexpected value \"FEMALE\"\u001b[22m\n",
"stack": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveValue\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('combobox').first()\nExpected: \u001b[32m\"F\u001b[7memale\u001b[27m\"\u001b[39m\nReceived: \u001b[31m\"F\u001b[7mEMALE\u001b[27m\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toHaveValue\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByRole('combobox').first()\u001b[22m\n\u001b[2m 9 × locator resolved to <select class=\"w-full bg-transparent text-on-surface focus:outline-none text-sm py-1 bg-surface-container-high\">…</select>\u001b[22m\n\u001b[2m - unexpected value \"FEMALE\"\u001b[22m\n\n at D:\\Coding\\gymflow\\tests\\user-profile-update-personal-information.spec.ts:37:54",
"location": {
"file": "D:\\Coding\\gymflow\\tests\\user-profile-update-personal-information.spec.ts",
"column": 54,
"line": 37
},
"snippet": "\u001b[0m \u001b[90m 35 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'spinbutton'\u001b[39m)\u001b[33m.\u001b[39mnth(\u001b[35m1\u001b[39m))\u001b[33m.\u001b[39mtoHaveValue(\u001b[32m'190'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m 36 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mlocator(\u001b[32m'input[type=\"date\"]'\u001b[39m))\u001b[33m.\u001b[39mtoHaveValue(\u001b[32m'1990-01-01'\u001b[39m)\u001b[33m;\u001b[39m\n\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 37 |\u001b[39m \u001b[36mawait\u001b[39m expect(page\u001b[33m.\u001b[39mgetByRole(\u001b[32m'combobox'\u001b[39m)\u001b[33m.\u001b[39mfirst())\u001b[33m.\u001b[39mtoHaveValue(\u001b[32m'Female'\u001b[39m)\u001b[33m;\u001b[39m\n \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\n \u001b[90m 38 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 39 |\u001b[39m })\u001b[33m;\u001b[39m\n \u001b[90m 40 |\u001b[39m\u001b[0m"
},
"errors": [
{
"location": {
"file": "D:\\Coding\\gymflow\\tests\\user-profile-update-personal-information.spec.ts",
"column": 54,
"line": 37
},
"message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoHaveValue\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\nLocator: getByRole('combobox').first()\nExpected: \u001b[32m\"F\u001b[7memale\u001b[27m\"\u001b[39m\nReceived: \u001b[31m\"F\u001b[7mEMALE\u001b[27m\"\u001b[39m\nTimeout: 5000ms\n\nCall log:\n\u001b[2m - Expect \"toHaveValue\" with timeout 5000ms\u001b[22m\n\u001b[2m - waiting for getByRole('combobox').first()\u001b[22m\n\u001b[2m 9 × locator resolved to <select class=\"w-full bg-transparent text-on-surface focus:outline-none text-sm py-1 bg-surface-container-high\">…</select>\u001b[22m\n\u001b[2m - unexpected value \"FEMALE\"\u001b[22m\n\n\n 35 | await expect(page.getByRole('spinbutton').nth(1)).toHaveValue('190');\n 36 | await expect(page.locator('input[type=\"date\"]')).toHaveValue('1990-01-01');\n> 37 | await expect(page.getByRole('combobox').first()).toHaveValue('Female');\n | ^\n 38 | });\n 39 | });\n 40 |\n at D:\\Coding\\gymflow\\tests\\user-profile-update-personal-information.spec.ts:37:54"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:31.942Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\user-profile-update-person-ce75d-Update-Personal-Information-chromium\\error-context.md"
}
],
"errorLocation": {
"file": "D:\\Coding\\gymflow\\tests\\user-profile-update-personal-information.spec.ts",
"column": 54,
"line": 37
}
}
],
"status": "unexpected"
}
],
"id": "6b2195db2735824a5a2f-a280bc136c83fb0765c3",
"file": "user-profile-update-personal-information.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "user-system-management.spec.ts",
"file": "user-system-management.spec.ts",
"column": 0,
"line": 0,
"specs": [
{
"title": "seed",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 16,
"parallelIndex": 0,
"status": "passed",
"duration": 193,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:30.879Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "fb639d24def07fb0a9be-88c0c658d3c7d935b643",
"file": "user-system-management.spec.ts",
"line": 3,
"column": 1
}
]
},
{
"title": "workout-management.spec.ts",
"file": "workout-management.spec.ts",
"column": 0,
"line": 0,
"specs": [
{
"title": "seed",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 25,
"parallelIndex": 5,
"status": "passed",
"duration": 205,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:33.333Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "0657f6e8877d5b69135b-849c91f2f7427ecff212",
"file": "workout-management.spec.ts",
"line": 3,
"column": 1
}
]
},
{
"title": "workout-plans-create-new-plan.spec.ts",
"file": "workout-plans-create-new-plan.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "workout-plans-create-new-plan.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Workout Plans - Create New Plan",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 16,
"parallelIndex": 0,
"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\\workout-plans-create-new-plan.spec.ts",
"column": 73,
"line": 21
},
"message": "Error: locator.fill: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('textbox', { name: 'E.g. Full-body Routine' })\u001b[22m\n\n\n 19 |\n 20 | // 4. Enter a 'Plan Name' (e.g., 'My New Strength Plan').\n> 21 | await page.getByRole('textbox', { name: 'E.g. Full-body Routine' }).fill('My New Strength Plan');\n | ^\n 22 |\n 23 | // 5. Enter a 'Description' (e.g., 'Focus on compound lifts').\n 24 | await page.getByRole('textbox', { name: 'Describe preparation...' }).fill('Focus on compound lifts');\n at D:\\Coding\\gymflow\\tests\\workout-plans-create-new-plan.spec.ts:21:73"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:31.126Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\workout-plans-create-new-p-4f68c-out-Plans---Create-New-Plan-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "56aed5698712642f579e-396935ceae733778de1d",
"file": "workout-plans-create-new-plan.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "workout-plans-delete-plan.spec.ts",
"file": "workout-plans-delete-plan.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "workout-plans-delete-plan.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Workout Plans - Delete Plan",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 26,
"parallelIndex": 4,
"status": "timedOut",
"duration": 30095,
"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\\workout-plans-delete-plan.spec.ts",
"column": 73,
"line": 21
},
"message": "Error: locator.fill: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('textbox', { name: 'E.g. Full-body Routine' })\u001b[22m\n\n\n 19 | // So, we create a new plan here.\n 20 | await page.getByRole('button').filter({ hasText: /^$/ }).nth(2).click(); // Click FAB\n> 21 | await page.getByRole('textbox', { name: 'E.g. Full-body Routine' }).fill('Plan to delete');\n | ^\n 22 | await page.getByRole('textbox', { name: 'Describe preparation...' }).fill('Description for plan to delete');\n 23 | await page.getByRole('button', { name: 'Save' }).click();\n 24 |\n at D:\\Coding\\gymflow\\tests\\workout-plans-delete-plan.spec.ts:21:73"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:35.953Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\workout-plans-delete-plan--4cad3-Workout-Plans---Delete-Plan-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "198bd85ccc95630f26a3-1f0a07bf2bc712f5dadd",
"file": "workout-plans-delete-plan.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "workout-plans-edit-existing-plan.spec.ts",
"file": "workout-plans-edit-existing-plan.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "workout-plans-edit-existing-plan.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Workout Plans - Edit Existing Plan",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 25,
"parallelIndex": 5,
"status": "passed",
"duration": 3693,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:33.861Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "cf20c209daf093ee0807-8437d0f25f51bfa1bb94",
"file": "workout-plans-edit-existing-plan.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "workout-plans-reorder-exercises-within-a-plan.spec.ts",
"file": "workout-plans-reorder-exercises-within-a-plan.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "workout-plans-reorder-exercises-within-a-plan.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Workout Plans - Reorder Exercises within a Plan",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 25,
"parallelIndex": 5,
"status": "timedOut",
"duration": 30064,
"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\\workout-plans-reorder-exercises-within-a-plan.spec.ts",
"column": 73,
"line": 19
},
"message": "Error: locator.fill: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('textbox', { name: 'E.g. Full-body Routine' })\u001b[22m\n\n\n 17 | // 3. Create a plan with at least two exercises.\n 18 | await page.getByRole('button').filter({ hasText: /^$/ }).nth(2).click(); // Click FAB\n> 19 | await page.getByRole('textbox', { name: 'E.g. Full-body Routine' }).fill('Reorder Test Plan');\n | ^\n 20 | await page.getByRole('textbox', { name: 'Describe preparation...' }).fill('Test plan for reordering exercises');\n 21 | await page.getByRole('button', { name: 'Add Exercise' }).click();\n 22 | await page.getByRole('button', { name: 'Squats BODYWEIGHT' }).click();\n at D:\\Coding\\gymflow\\tests\\workout-plans-reorder-exercises-within-a-plan.spec.ts:19:73"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:37.609Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\workout-plans-reorder-exer-420a5-der-Exercises-within-a-Plan-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "dba0b6fbc9a2aa0cf654-c24625881728bac49b3d",
"file": "workout-plans-reorder-exercises-within-a-plan.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "workout-plans-start-session-from-plan.spec.ts",
"file": "workout-plans-start-session-from-plan.spec.ts",
"column": 0,
"line": 0,
"specs": [],
"suites": [
{
"title": "II. Workout Management",
"file": "workout-plans-start-session-from-plan.spec.ts",
"line": 6,
"column": 6,
"specs": [
{
"title": "A. Workout Plans - Start Session from Plan",
"ok": false,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 27,
"parallelIndex": 1,
"status": "timedOut",
"duration": 30072,
"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\\workout-plans-start-session-from-plan.spec.ts",
"column": 73,
"line": 19
},
"message": "Error: locator.fill: Test timeout of 30000ms exceeded.\nCall log:\n\u001b[2m - waiting for getByRole('textbox', { name: 'E.g. Full-body Routine' })\u001b[22m\n\n\n 17 | // 3. Create a plan with at least one exercise.\n 18 | await page.getByRole('button').filter({ hasText: /^$/ }).nth(4).click(); // Click FAB\n> 19 | await page.getByRole('textbox', { name: 'E.g. Full-body Routine' }).fill('Start Session Test Plan');\n | ^\n 20 | await page.getByRole('textbox', { name: 'Describe preparation...' }).fill('Test plan for starting a session');\n 21 | await page.getByRole('button', { name: 'Add Exercise' }).click();\n 22 | await page.getByRole('button', { name: 'Squats BODYWEIGHT' }).click();\n at D:\\Coding\\gymflow\\tests\\workout-plans-start-session-from-plan.spec.ts:19:73"
}
],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:41.468Z",
"annotations": [],
"attachments": [
{
"name": "error-context",
"contentType": "text/markdown",
"path": "D:\\Coding\\gymflow\\test-results\\workout-plans-start-sessio-41745-s---Start-Session-from-Plan-chromium\\error-context.md"
}
]
}
],
"status": "unexpected"
}
],
"id": "6f604cdf8f1f69dfae98-dd73ad9a439d88370a64",
"file": "workout-plans-start-session-from-plan.spec.ts",
"line": 7,
"column": 3
}
]
}
]
},
{
"title": "workout-tracking.spec.ts",
"file": "workout-tracking.spec.ts",
"column": 0,
"line": 0,
"specs": [
{
"title": "seed",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 28,
"parallelIndex": 2,
"status": "passed",
"duration": 150,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2025-11-30T18:20:50.837Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "8da950f07c07d22e116e-20fb5c321088ea5d8e34",
"file": "workout-tracking.spec.ts",
"line": 3,
"column": 1
}
]
}
],
"errors": [],
"stats": {
"startTime": "2025-11-30T18:19:39.424Z",
"duration": 92453.96500000001,
"expected": 26,
"skipped": 0,
"unexpected": 28,
"flaky": 0
}
}