🧪 Testing Infrastructure (45 tests, 100% passing) - Implemented Jest + Supertest framework for automated testing - Unit tests: 5 tests for auth middleware (100% coverage) - Integration tests: 40 tests covering admin, consent, migration, upload APIs - Test execution time: ~10 seconds for full suite - Coverage: 26% statements, 15% branches (realistic start) - In-memory SQLite database for isolated testing - Singleton server pattern for fast test execution - Automatic cleanup and teardown 🔒 Admin API Authentication - Bearer token authentication for all admin endpoints - requireAdminAuth middleware with ADMIN_API_KEY validation - Protected routes: /api/admin/*, /api/system/migration/migrate|rollback - Complete authentication guide in AUTHENTICATION.md - HTTP 403 for missing/invalid tokens, 500 if not configured - Ready for production with token rotation support 📋 API Route Documentation - Single Source of Truth: backend/src/routes/routeMappings.js - Comprehensive route overview in backend/src/routes/README.md - Express routing order documented (specific before generic) - Frontend integration guide with authentication examples - OpenAPI auto-generation integrated 🐛 Bug Fixes - Fixed SQLite connection not properly awaited (caused test hangs) - Fixed upload validation checking req.files.file before req.files - Fixed Express route order (consent before admin router) - Fixed test environment using /tmp for uploads (permission issues) 📚 Documentation Updates - Updated README.md with testing and authentication features - Updated README.dev.md with testing section and API development guide - Updated CHANGELOG.md with complete feature documentation - Updated FEATURE_PLAN-autogen-openapi.md (status: 100% complete) - Added frontend/MIGRATION-GUIDE.md for frontend team 🚀 Frontend Impact Frontend needs to add Bearer token to all /api/admin/* calls. See frontend/MIGRATION-GUIDE.md for detailed instructions. Test Status: ✅ 45/45 passing (100%) Backend: ✅ Production ready Frontend: ⚠️ Migration required (see MIGRATION-GUIDE.md)
46 lines
1.3 KiB
JSON
46 lines
1.3 KiB
JSON
{
|
|
"name": "backend",
|
|
"version": "1.0.0",
|
|
"description": "",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"server": "nodemon src/index.js",
|
|
"client": "npm run dev --prefix ../frontend",
|
|
"client-build": "cd ../frontend && npm run build && serve -s build -l 80",
|
|
"dev": "concurrently \"npm run server\" \"npm run client\"",
|
|
"build": "concurrently \"npm run server\" \"npm run client-build\"",
|
|
"generate-openapi": "node src/generate-openapi.js",
|
|
"test-openapi": "node test-openapi-paths.js",
|
|
"validate-openapi": "redocly lint docs/openapi.json",
|
|
"test": "jest --coverage",
|
|
"test:watch": "jest --watch",
|
|
"test:api": "jest tests/api"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"dotenv": "^8.2.0",
|
|
"express": "^4.17.1",
|
|
"express-fileupload": "^1.2.1",
|
|
"find-remove": "^2.0.3",
|
|
"fs": "^0.0.1-security",
|
|
"node-cron": "^4.2.1",
|
|
"sharp": "^0.34.4",
|
|
"shortid": "^2.2.16",
|
|
"sqlite3": "^5.1.7",
|
|
"uuid": "^13.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@redocly/cli": "^2.11.1",
|
|
"@stoplight/prism-cli": "^5.14.2",
|
|
"concurrently": "^6.0.0",
|
|
"jest": "^30.2.0",
|
|
"nodemon": "^2.0.7",
|
|
"supertest": "^7.1.4",
|
|
"swagger-autogen": "^2.23.7",
|
|
"swagger-ui-express": "^5.0.1"
|
|
}
|
|
}
|