869b5774fb
* Initial plan * Add Playwright E2E testing infrastructure - Add @playwright/test dependency - Create playwright.config.ts with best practices configuration - Create e2e test structure with fixtures and auth setup - Add E2E tests for auth, dashboard, medications, and settings pages - Add npm scripts for running E2E tests - Update .gitignore for Playwright artifacts - Add E2E test job to CI workflow - Update vite.config.ts to support BACKEND_URL env variable - Update biome.json to include e2e files in linting Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com> * Remove waitForTimeout anti-pattern from E2E tests Replace hard-coded timeouts with proper Playwright waiting strategies: - Use waitForLoadState('networkidle') for page load - Use element.waitFor() for dynamic elements - Use expect assertions for state verification Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com> * Remove E2E tests from CI workflow E2E tests will only be run locally as requested. Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: DanielVolz <3275994+DanielVolz@users.noreply.github.com> Co-authored-by: Daniel Volz <mail@danielvolz.org>
55 lines
1.3 KiB
JSON
55 lines
1.3 KiB
JSON
{
|
|
"$schema": "https://biomejs.dev/schemas/2.3.12/schema.json",
|
|
"assist": { "actions": { "source": { "organizeImports": "on" } } },
|
|
"files": {
|
|
"includes": ["backend/src/**/*.ts", "frontend/src/**/*.ts", "frontend/src/**/*.tsx", "frontend/src/**/*.css", "frontend/e2e/**/*.ts", "frontend/playwright.config.ts"]
|
|
},
|
|
"linter": {
|
|
"enabled": true,
|
|
"rules": {
|
|
"recommended": true,
|
|
"complexity": {
|
|
"noForEach": "off"
|
|
},
|
|
"suspicious": {
|
|
"noExplicitAny": "warn",
|
|
"useIterableCallbackReturn": "off",
|
|
"noImplicitAnyLet": "warn",
|
|
"noArrayIndexKey": "warn",
|
|
"noAssignInExpressions": "off"
|
|
},
|
|
"style": {
|
|
"noNonNullAssertion": "off",
|
|
"useConst": "error",
|
|
"noParameterAssign": "off"
|
|
},
|
|
"correctness": {
|
|
"noUnusedVariables": "warn",
|
|
"noUnusedImports": "warn",
|
|
"noUnusedFunctionParameters": "warn",
|
|
"useExhaustiveDependencies": "warn"
|
|
},
|
|
"a11y": {
|
|
"useKeyWithClickEvents": "warn",
|
|
"noSvgWithoutTitle": "off",
|
|
"noStaticElementInteractions": "off",
|
|
"useButtonType": "off",
|
|
"noLabelWithoutControl": "warn"
|
|
}
|
|
}
|
|
},
|
|
"formatter": {
|
|
"enabled": true,
|
|
"indentStyle": "tab",
|
|
"indentWidth": 2,
|
|
"lineWidth": 120
|
|
},
|
|
"javascript": {
|
|
"formatter": {
|
|
"quoteStyle": "double",
|
|
"semicolons": "always",
|
|
"trailingCommas": "es5"
|
|
}
|
|
}
|
|
}
|