Compare commits

..
2 Commits
Author SHA1 Message Date
Hermes d12a9a3cfa DC-001: mark done, claim DC-002
CI / Security audit (push) Has been cancelled
CI / Test & Lint (push) Has been cancelled
2026-06-13 11:12:37 -07:00
Hermes 2580c65074 DC-001: Fix 4 failing services.routes tests - add /services/ prefix to credential routes
The 3 credential endpoints (POST/DELETE/GET /:serviceId/credentials) were missing
the /services/ path segment, causing 404s when tests called /api/services/<id>/credentials.

Fixed routes now match the URL pattern used by the live frontend
(/api/v1/services/<id>/credentials) and the test suite.

All 759 tests pass.
2026-06-13 11:12:14 -07:00
2 changed files with 7 additions and 6 deletions
+4 -3
View File
@@ -10,13 +10,14 @@
## P0 — Must Fix (blocks public release)
### DC-001: Fix 4 failing tests in services.routes.test.js
- **status:** in-progress
- **status:** done
- **owner:** hermes
- **details:** Credential storage tests failing since before v1.13.4. Run `cd dashcaddy-api && npx jest __tests__/routes/services.routes.test.js` to see failures. Fix the root cause, not the test.
- **result:** Root cause: routes used `/:serviceId/credentials` (missing `/services/` segment). All 3 credential routes (POST/DELETE/GET) in `routes/services.js` had the wrong path. Fixed to `/services/:serviceId/credentials` — matches the URL pattern used by the live frontend and all 759 tests pass.
### DC-002: Sync VERSION file
- **status:** todo
- **owner:**
- **status:** in-progress
- **owner:** hermes
- **details:** `/root/dashcaddy/VERSION` says `1.13.0` but `package.json` says `1.13.4`. VERSION file should always match package.json. Add a pre-commit or post-version bump hook to keep them in sync.
### DC-003: Remove stale test/debug files from repo root
+3 -3
View File
@@ -197,7 +197,7 @@ module.exports = function({
// ===== SERVICE CREDENTIAL ENDPOINTS =====
// Store credentials for a service
router.post('/:serviceId/credentials', asyncHandler(async (req, res) => {
router.post('/services/:serviceId/credentials', asyncHandler(async (req, res) => {
const { serviceId } = req.params;
// Validate serviceId to prevent path traversal in credential keys
@@ -221,7 +221,7 @@ module.exports = function({
}, 'store-service-creds'));
// Delete credentials for a service
router.delete('/:serviceId/credentials', asyncHandler(async (req, res) => {
router.delete('/services/:serviceId/credentials', asyncHandler(async (req, res) => {
const { serviceId } = req.params;
// Validate serviceId to prevent path traversal in credential keys
@@ -236,7 +236,7 @@ module.exports = function({
}, 'delete-service-creds'));
// Check credential status for a service (what's stored)
router.get('/:serviceId/credentials', asyncHandler(async (req, res) => {
router.get('/services/:serviceId/credentials', asyncHandler(async (req, res) => {
const { serviceId } = req.params;
// Validate serviceId to prevent path traversal in credential keys