Files
adastra_api/package.json
T
julien da1f9437ab feat(tests): add Jest+Supertest infrastructure with jump route suite (14 tests)
- Extract Express app creation into src/createApp.js to enable testing without starting the server
- Add Jest, Supertest, test helpers (createTestApp, auth token generator)
- Write 14 integration tests for skydive/jumps: auth protection, CRUD, ownership checks

Bugs caught and fixed by the test suite:
- MongoDB models: author field typed as Schema.Types.UUID (Mongoose 6 rejects string UUIDs) → changed to String
- Jump.toJSONFor: called toProfileJSONFor on a UUID string → guarded with typeof check
- exceptions.handler: used err.statusCode but express-jwt throws err.status → returns 500 on 401 errors
- Jump.count(query): deprecated Mongoose method was ignoring the filter → replaced with countDocuments
- jumps.routes GET /: $or query included non-schema field "title" stripped by strictQuery, leaving {} (match-all) → replaced with slug/lieu search
- $regex: was passing a JS RegExp object which serializes to {} in MongoDB → now passes raw string
2026-04-26 01:23:01 +02:00

70 lines
2.3 KiB
JSON

{
"name": "adastra-api",
"version": "1.0.0",
"description": "Ad Astra API",
"main": "app.js",
"author": {
"name": "Julien Gautier",
"email": "jgautier.webdev@gmail.com"
},
"scripts": {
"start": "APP_ENV=production node ./app.js",
"dev": "APP_ENV=development node ./app.js",
"local": "APP_ENV=local nodemon ./app.js",
"test": "jest",
"test:postman": "newman run ./tests/adastra-api-tests.postman_collection.json -e ./tests/adastra-api-tests.postman_environment.json",
"stop": "lsof -ti :3200 | xargs kill",
"mongo:start": "docker run --name hu-mongo -p 27017:27017 mongo & sleep 5",
"mongo:stop": "docker stop hu-mongo && docker rm hu-mongo",
"create:user": "node scripts/create-user.js",
"setup:api": "npx sequelize-cli db:migrate && npx sequelize-cli db:seed --seed 20251126-add-roles.js && npm run create:user && npx sequelize-cli db:seed --seed 20251127-add-articles.js"
},
"engines": {
"node": "^16.20.2 || ^18.19.1 || ^20.11.1"
},
"license": "UNLICENSED",
"private": true,
"dependencies": {
"@sendgrid/mail": "^7.7.0",
"bcrypt": "^5.1.1",
"body-parser": "^1.20.2",
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"ejs": "^3.1.9",
"errorhandler": "^1.5.1",
"express": "^4.18.2",
"express-jwt": "^8.4.1",
"express-session": "^1.18.0",
"js-yaml": "^4.1.1",
"jsonwebtoken": "^9.0.2",
"method-override": "3.0.0",
"methods": "1.1.2",
"mongoose": "^6.12.6",
"mongoose-unique-validator": "^3.1.0",
"morgan": "^1.10.0",
"mysql2": "^3.14.3",
"node-fetch": "^3.3.2",
"passport": "^0.6.0",
"passport-headerapikey": "^1.2.2",
"passport-local": "^1.0.0",
"request": "^2.88.2",
"sequelize": "^6.37.3",
"sequelize-auto": "^0.8.8",
"slug": "^8.2.3",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.1",
"underscore": "^1.13.6",
"uuid": "^9.0.1"
},
"devDependencies": {
"@eslint/js": "^9.0.0",
"eslint": "^9.0.0",
"globals": "^15.0.0",
"jest": "^30.3.0",
"newman": "^5.3.2",
"nodemon": "^2.0.22",
"sequelize-cli": "^6.6.2",
"supertest": "^7.2.2"
}
}