- Add @japa/api-client devDependency (was missing despite being required
for the 'client' fixture used in functional tests)
- Wire up sessionApiClient/authApiClient/shieldApiClient plugins in
tests/bootstrap.ts so tests can authenticate (loginAs) and pass CSRF
validation (withCsrfToken)
- Wrap each functional test in a global DB transaction (withGlobalTransaction)
for isolation and rollback
- Add .env.test with SESSION_DRIVER=memory: the cookie session driver used
in dev/prod is incompatible with Japa's session test client, which needs
a store it can read/write by session id
- tests/functional/computers.spec.ts: covers owner can update; a user
cannot update/delete another user's computer (404); a user cannot
attach another user's component via componentsId (404); two components
of the same unique type cannot be attached (422); deleting a computer
detaches its components instead of destroying them
- tests/functional/components.spec.ts: covers owner can update; a user
cannot update/delete another user's component (404); an unauthenticated
request cannot delete a component (redirects to /auth/login)
All 10 tests pass, exercising the security fixes from commit 3cc189c.
101 lines
2.9 KiB
JSON
101 lines
2.9 KiB
JSON
{
|
|
"name": "pc-builder",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"license": "UNLICENSED",
|
|
"engines": {
|
|
"node": ">=24.0.0"
|
|
},
|
|
"scripts": {
|
|
"start": "node bin/server.js",
|
|
"build": "node ace build",
|
|
"dev": "node ace serve --hmr",
|
|
"test": "node ace test",
|
|
"lint": "eslint .",
|
|
"format": "prettier --write .",
|
|
"typecheck": "tsc --noEmit && vue-tsc --noEmit --project inertia/tsconfig.json"
|
|
},
|
|
"imports": {
|
|
"#controllers/*": "./app/controllers/*.js",
|
|
"#exceptions/*": "./app/exceptions/*.js",
|
|
"#models/*": "./app/models/*.js",
|
|
"#mails/*": "./app/mails/*.js",
|
|
"#services/*": "./app/services/*.js",
|
|
"#listeners/*": "./app/listeners/*.js",
|
|
"#events/*": "./app/events/*.js",
|
|
"#generated/*": "./.adonisjs/server/*.js",
|
|
"#middleware/*": "./app/middleware/*.js",
|
|
"#transformers/*": "./app/transformers/*.js",
|
|
"#types/*": "./types/*.js",
|
|
"#validators/*": "./app/validators/*.js",
|
|
"#providers/*": "./providers/*.js",
|
|
"#policies/*": "./app/policies/*.js",
|
|
"#abilities/*": "./app/abilities/*.js",
|
|
"#database/*": "./database/*.js",
|
|
"#tests/*": "./tests/*.js",
|
|
"#start/*": "./start/*.js",
|
|
"#config/*": "./config/*.js"
|
|
},
|
|
"devDependencies": {
|
|
"@adonisjs/assembler": "^8.4.0",
|
|
"@adonisjs/eslint-config": "^3.1.0",
|
|
"@adonisjs/prettier-config": "^1.5.0",
|
|
"@adonisjs/tsconfig": "^2.0.0",
|
|
"@japa/api-client": "^3.2.1",
|
|
"@japa/assert": "^4.2.0",
|
|
"@japa/browser-client": "^2.3.0",
|
|
"@japa/plugin-adonisjs": "^5.2.0",
|
|
"@japa/runner": "^5.3.0",
|
|
"@poppinss/ts-exec": "^1.4.4",
|
|
"@types/luxon": "^3.7.1",
|
|
"@types/node": "~25.9.1",
|
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
"autoprefixer": "^10.5.2",
|
|
"eslint": "^10.4.0",
|
|
"eslint-plugin-vue": "^10.9.1",
|
|
"hot-hook": "^1.0.0",
|
|
"pino-pretty": "^13.1.3",
|
|
"postcss": "^8.5.15",
|
|
"prettier": "^3.8.3",
|
|
"tailwindcss": "^3.4.19",
|
|
"typescript": "~6.0.3",
|
|
"vite": "^7.3.3",
|
|
"vue-tsc": "^3.3.2",
|
|
"youch": "^4.1.1"
|
|
},
|
|
"dependencies": {
|
|
"@adonisjs/auth": "^10.1.0",
|
|
"@adonisjs/core": "^7.3.3",
|
|
"@adonisjs/cors": "^3.0.0",
|
|
"@adonisjs/inertia": "^4.2.0",
|
|
"@adonisjs/lucid": "^22.4.2",
|
|
"@adonisjs/session": "^8.1.0",
|
|
"@adonisjs/shield": "^9.0.0",
|
|
"@adonisjs/static": "^2.0.1",
|
|
"@adonisjs/vite": "^5.1.1",
|
|
"@inertiajs/vue3": "^2.3.24",
|
|
"@tuyau/core": "^1.2.2",
|
|
"@types/uuid": "^10.0.0",
|
|
"@vinejs/vine": "^4.4.0",
|
|
"@vue/server-renderer": "^3.5.35",
|
|
"@vuepic/vue-datepicker": "^13.0.0",
|
|
"better-sqlite3": "^12.10.0",
|
|
"edge.js": "^6.5.1",
|
|
"luxon": "^3.7.2",
|
|
"mysql2": "^3.22.4",
|
|
"reflect-metadata": "^0.2.2",
|
|
"uuid": "^14.0.1",
|
|
"vue": "^3.5.35",
|
|
"vue-sonner": "^2.0.9",
|
|
"vue3-carousel": "^0.17.0"
|
|
},
|
|
"hotHook": {
|
|
"boundaries": [
|
|
"./app/controllers/**/*.ts",
|
|
"./app/middleware/*.ts"
|
|
]
|
|
},
|
|
"prettier": "@adonisjs/prettier-config"
|
|
}
|