$ npm test exit code: 0 ---------------------------------------------------------------------- > platform-api@1.19.0 test > nyc mocha -r ts-node/register "./test/unit/**/*.spec.ts" --exit Assets Controller listAssets ✓ should return 200 with a paginated envelope of assets ✓ should forward paging query params to the service {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error listing assets DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:76:54\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:74:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error getAsset ✓ should return 200 with the asset {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error getting asset Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:97:56\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:95:65)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when asset not found createAsset ✓ should return 201 with the created asset {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error creating asset AssetType with id not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: AssetType with id not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:118:55\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:116:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when asset type not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error creating asset DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:127:55\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assets/assets.controller.spec.ts:125:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error AssetTypes Controller listAssetTypes ✓ should return 200 with a paginated envelope of asset types ✓ should forward paging query params to the service {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error listing asset types DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:76:58\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:74:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error getAssetType ✓ should return 200 with the asset type {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error getting asset type Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:97:60\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:95:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when asset type not found createAssetType ✓ should return 201 with the created asset type {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error creating asset type CommissioningWorkflow with id not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: CommissioningWorkflow with id not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:118:59\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:116:82)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when commissioning workflow not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error creating asset type DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:127:59\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/assetTypes/asset.types.controller.spec.ts:125:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AssetTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error Outage Message Controller tests getActiveOutageMessageList ✓ should return 200 with active outage messages list ✓ should return 200 with empty array when no messages {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while fetching active outage messages: Database error","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:88:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:86:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"OutageMessageController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response getFutureOutageMessageList ✓ should return 200 with outage messages list ✓ should return 200 with empty array when no messages {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while fetching outage message: Database error","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:125:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:123:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"OutageMessageController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response getOutageMessageList ✓ should return 200 with all outage messages list {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while fetching outage message: Database error","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:151:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:149:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"OutageMessageController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response upsertMessage ✓ should return 200 and create new message when messageId is not provided ✓ should return 200 and update message when messageId is provided ✓ should return 200 with button and isDismissible when provided ✓ should return 200 with button as null when not provided ✓ should return 200 with optional fields enabled and title {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while upserting outage message: Database error","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:331:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:320:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"OutageMessageController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response deleteOutageMessage ✓ should return 204 when message is deleted successfully {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while deleting outage message: Database error","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:366:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/banners/outage.messages.controller.spec.ts:359:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"OutageMessageController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response Outage Message Validator tests validate Upsert Outage message ✓ should call next when request is valid without messageId ✓ should call next when request is valid with messageId ✓ should call next when request is valid with optional fields ✓ should call next when timeframeEnabled is false and dates are omitted ✓ should 400 when "title" is not provided {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: timeframeEnabled is required.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "timeframeEnabled" is not provided ✓ should 400 when "status" is not provided ✓ should 400 when "status" is not a valid enum value {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: startDateTime and endDateTime are required when timeframeEnabled is true.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when timeframeEnabled is true and "startDateTime" is not provided {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: startDateTime and endDateTime are required when timeframeEnabled is true.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when timeframeEnabled is true and "endDateTime" is not provided {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: 2025-05-20T17:02:01.111Z should be before 2025-05-19T17:01:01.111Z","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "endDateTime" is before "startDateTime" {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: messageId must be a non-blank string when provided.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "messageId" is empty string {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: messageId must be a non-blank string when provided.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "messageId" is empty spaces {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: messageId must be a non-blank string when provided.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "messageId" is not a string ✓ should 400 when "enabled" is not a valid boolean ✓ should 400 when "title" is not a string ✓ should 400 when "displayMessage" is provided but not a string ✓ should accept all valid status enum values ✓ should call next when request is valid with button and isDismissible ✓ should call next when button is null {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: button must be an object or null.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "button" is not an object or null {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: button must be an object or null.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "button" is an array {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: button.text must be a non-blank string.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "button.text" is missing or empty {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Validation failed: button.link must be a non-blank string.","source":"OutageMessageValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should 400 when "button.link" is missing or empty ✓ should 400 when "isDismissible" is not a valid boolean validate Delete Outage message ✓ should call next when messageId is provided ✓ should 400 when "messageId" is not provided ✓ should 400 when "messageId" is empty Category Types Controller tests createCategoryTypes {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Creating 2 category types for projectId: project-123.","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 201 when category types are created successfully {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Creating 2 category types for projectId: project-123.","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while creating category types Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:88:45\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:81:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when service throws NotFoundError {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Creating 2 category types for projectId: project-123.","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while creating category types Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:107:45\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:100:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs getCategoryType ✓ Should return 200 with category type JSON when found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while getting category type No category type found for projectId: project-123, categoryTypeId: category-type-456.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No category type found for projectId: project-123, categoryTypeId: category-type-456.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:161:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:153:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when category type is not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while getting category type Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:182:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:174:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs getActivityCategoryTreeByCategoryTypeId {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Found 2 root categories for category type type-123.","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Found 5 child categories for category type type-123.","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 200 with subtree categories for given category type ✓ Should return 404 when no root categories found for the type {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while getting activity category tree by category type id Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:252:54\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:247:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs updateActivityCategoryType ✓ Should return 204 when category type is successfully updated {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while updating Activity Category Type No editable category type found for projectId: project-123, categoryTypeId: category-type-456.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No editable category type found for projectId: project-123, categoryTypeId: category-type-456.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:313:44\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:299:91)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when category type is not found (not editable) {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while updating Activity Category Type Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:344:44\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:331:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs getCategoryTypeList ✓ Should return 200 with category type list JSON {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while getting category types Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:415:45\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:408:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs setCategoryTypeEnablement {"0":"c","1":"a","2":"t","3":"e","4":"g","5":"o","6":"r","7":"y","8":"-","9":"t","10":"y","11":"p","12":"e","13":"-","14":"4","15":"5","16":"6","level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Setting category type enablement for projectId: project-123, categoryTypeId: category-type-456, enabled: true","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Category type enablement changed successfully.","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 204 when category type enablement is successfully changed {"0":"c","1":"a","2":"t","3":"e","4":"g","5":"o","6":"r","7":"y","8":"-","9":"t","10":"y","11":"p","12":"e","13":"-","14":"4","15":"5","16":"6","level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Category type enablement not changed for projectId: project-123, categoryTypeId: category-type-456, enabled: true","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 304 when category type enablement is already set to the requested value {"0":"c","1":"a","2":"t","3":"e","4":"g","5":"o","6":"r","7":"y","8":"-","9":"t","10":"y","11":"p","12":"e","13":"-","14":"4","15":"5","16":"6","level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Category type enablement not changed for projectId: project-123, categoryTypeId: category-type-456, enabled: false","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 304 when disabling and category type is already disabled {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while setting category type enablement No category type found for projectId: project-123, categoryTypeId: category-type-456.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No category type found for projectId: project-123, categoryTypeId: category-type-456.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:548:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:537:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when category type is not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while setting category type enablement Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:574:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:563:99)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs during getCategoryType {"0":"c","1":"a","2":"t","3":"e","4":"g","5":"o","6":"r","7":"y","8":"-","9":"t","10":"y","11":"p","12":"e","13":"-","14":"4","15":"5","16":"6","level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Setting category type enablement for projectId: project-123, categoryTypeId: category-type-456, enabled: true","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error while setting category type enablement Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:606:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/categories/category.types.controller.spec.ts:589:109)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CategoryTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs during setCategoryTypeEnablement CommissioningWorkflows Controller listCommissioningWorkflows ✓ should return 200 with list of workflows {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error listing commissioning workflows DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:52:70\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:50:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error getCommissioningWorkflow ✓ should return 200 with the workflow {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error getting commissioning workflow Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:73:72\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:71:68)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when workflow not found createCommissioningWorkflow ✓ should return 201 with the created workflow {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error creating commissioning workflow Project not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:94:71\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:92:67)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when project not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error creating commissioning workflow A commissioning workflow named 'HVAC Commissioning' already exists in this project.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: A commissioning workflow named 'HVAC Commissioning' already exists in this project.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:103:71\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:101:93)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when workflow name already exists in the project updateCommissioningWorkflow ✓ should return 200 with the updated workflow {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error updating commissioning workflow Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:126:71\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:124:68)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when workflow not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error updating commissioning workflow A commissioning workflow named 'HVAC Commissioning' already exists in this project.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: A commissioning workflow named 'HVAC Commissioning' already exists in this project.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:135:71\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:133:93)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when workflow name already exists in the project deleteCommissioningWorkflow ✓ should return 204 on successful deletion {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error deleting commissioning workflow Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:156:71\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/commissioningWorkflows/commissioning.workflows.controller.spec.ts:154:68)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CommissioningWorkflowsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when workflow not found Devices Controller tests Get Devices ✓ Should return the list of devices and status 200 when devices are found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching devices: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:92:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:84:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Device By UDI ✓ Should return the device and status 200 when the device is found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching device with deviceUdi: c326a91d-8284-416c-8fe9-6c2d1b5d1fbb Device not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Device not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:146:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:139:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when the device is not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching device with deviceUdi: vc326a91d-8284-416c-8fe9-6c2d1b5d1fbb Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:167:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:159:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Device By ID ✓ Should return the device and status 200 when the device is found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching device with id: d7b5b1f8-5dca-4d64-99d1-c4b63c4ba03b Device not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Device not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:220:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:213:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when the device is not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching device with id: d7b5b1f8-5dca-4d64-99d1-c4b63c4ba03b Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:240:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:233:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Users By Device Udi When IAM is up and running {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Fetching people for project 443b4964-09df-4f86-9e98-7bec5a9fcdab and mongoProjectId mongo-project-1 from IAM","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return the users and status 200 when the device linked to project is found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching device with deviceUdi: 9279b928-9a63-44f3-82a4-96661e9b73ac Device not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Device not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:326:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:319:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when the device is not found {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error fetching device with deviceUdi: 9279b928-9a63-44f3-82a4-96661e9b73ac Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:346:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:339:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Delete Devices {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Error while looking for secret for device with deviceId: 188065cf-96a1-46e3-a5ac-40618fbe4b96 Invalid URL","code":"ERR_INVALID_URL","input":"","stack":"TypeError: Invalid URL\n at new URL (node:internal/url:840:25)\n at appendPath (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-client/src/urlHelpers.ts:114:21)\n at getRequestUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-client/src/urlHelpers.ts:46:20)\n at KeyVaultClient.sendOperationRequest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-client/src/serviceClient.ts:147:30)\n at KeyVaultClient.sendOperationRequest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-http-compat/src/extendedClient.ts:99:35)\n at KeyVaultClient.getSecret (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/keyvault-secrets/src/generated/keyVaultClient.ts:191:17)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/keyvault-secrets/src/index.ts:300:42\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/tracingClient.ts:71:25\n at Object.withContext (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/instrumenter.ts:60:14)\n at withContext (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/tracingClient.ts:91:30)\n at Object.withSpan (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/tracingClient.ts:70:28)\n at SecretClient.getSecret (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/keyvault-secrets/src/index.ts:299:26)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:5:1934\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:2:3970)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Deleting device without secret for deviceId: 188065cf-96a1-46e3-a5ac-40618fbe4b96","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:47.4747","message":"Error while looking for secret for device with deviceId: 2a5b6c7d-8e9f-40a1-11b2-12c3d4e5f6a7 Invalid URL","code":"ERR_INVALID_URL","input":"","stack":"TypeError: Invalid URL\n at new URL (node:internal/url:840:25)\n at appendPath (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-client/src/urlHelpers.ts:114:21)\n at getRequestUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-client/src/urlHelpers.ts:46:20)\n at KeyVaultClient.sendOperationRequest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-client/src/serviceClient.ts:147:30)\n at KeyVaultClient.sendOperationRequest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-http-compat/src/extendedClient.ts:99:35)\n at KeyVaultClient.getSecret (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/keyvault-secrets/src/generated/keyVaultClient.ts:191:17)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/keyvault-secrets/src/index.ts:300:42\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/tracingClient.ts:71:25\n at Object.withContext (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/instrumenter.ts:60:14)\n at withContext (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/tracingClient.ts:91:30)\n at Object.withSpan (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/core-tracing/src/tracingClient.ts:70:28)\n at SecretClient.getSecret (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/@azure/keyvault-secrets/src/index.ts:299:26)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:5:1934\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:2:3970)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:47.4747","message":"Deleting device without secret for deviceId: 2a5b6c7d-8e9f-40a1-11b2-12c3d4e5f6a7","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 204 when successfully deleted {"level":"error","timestamp":"2026-07-09 13:05:47.4747","message":"Error deleting devices: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:425:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:417:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Set Access Token When refreshToken matches {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Preparing to generate new token and update device access token.","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with new access token (595ms) When refreshToken does not match {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error while setting accessToken for DeviceUdi: udi123 Invalid refreshToken for DeviceUdi: udi123.","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: Invalid refreshToken for DeviceUdi: udi123.\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:9:145)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:2:3970)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 400 Reset device token {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Acquired device data. Resetting device token for device deviceTokenId 'device-token-id'.","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should reset the device token and return 200 when the device is found (293ms) {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error while resetting accessToken for DeviceId: 4bea0c31-610d-4615-a489-62e53652405a Device not found for DeviceId: 4bea0c31-610d-4615-a489-62e53652405a.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Device not found for DeviceId: 4bea0c31-610d-4615-a489-62e53652405a.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:575:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:570:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when the device is not found {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error while resetting accessToken for DeviceId: 4bea0c31-610d-4615-a489-62e53652405a Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:593:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/devices/devices.controller.spec.ts:588:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get encryption keys When accessToken matches ✓ Then it should return 200 with encryption key (77ms) When accessToken does not match {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error while fetching encryption key for DeviceUdi: udi123 Invalid accessToken for DeviceUdi: udi123.","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: Invalid accessToken for DeviceUdi: udi123.\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:13:214)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/devices/devices.controller.ts:2:3970)","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 400 Create device When project id is not sent {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Storing secret for device: device-id","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Device created successfully.","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with device details When project id is sent {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Storing secret for device: device-id","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Device created successfully.","source":"DevicesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with device details Devices Validator tests validateGetDevicesRequest ✓ should call next when request is valid ✓ should return 400 when lastFetchedIndexId is invalid ✓ should return 400 when size is not a number ✓ should call next when query parameters are missing validateGetDeviceByCodeAndUdiRequest ✓ should call next when request is valid ✓ should return 400 when code is missing ✓ should return 400 when code is empty ✓ should return 400 when udi is missing ✓ should return 400 when udi is empty validateGetDeviceByIdRequest ✓ should call next when request is valid ✓ should return 400 when deviceId is missing ✓ should return 400 when deviceId is empty validateDeleteDevicesRequest ✓ should call next when request is valid ✓ should return 400 when request body is not an array ✓ should return 400 when request body is an empty array ✓ should return 400 when deviceIds contains an invalid UUID Devices Controller tests Get Devices ✓ Should return the list of devices and status 200 when devices are found ✓ Should return 500 when an unexpected error occurs 360 Controller tests Create 360 Capture files {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Received request to upload 360 capture for project 123 with filename 'photo.jpg'. Blur faces: false","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Checking if room capture point 443b4964-09df-4f86-9e98-7bec5a9fcdab exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Room capture point exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Uploading 1000 bytes 360Capture for project 123 with filename 'photo.jpg'.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should upload a 360 Capture {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Generating image hash for file /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/../../../../../resources/samplephoto.png","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Received request to upload 360 capture for project 123 with filename 'photo.jpg'. Blur faces: false","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Checking if room capture point 443b4964-09df-4f86-9e98-7bec5a9fcdab exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Room capture point exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Uploading 1000 bytes 360Capture for project 123 with filename 'photo.jpg'.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should call getRoomCapturePoint with the correct projectId and roomCapturePointId {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Generating image hash for file /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/../../../../../resources/samplephoto.png","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Received request to upload 360 capture for project 123 with filename 'photo.jpg'. Blur faces: false","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Checking if room capture point 223e4567-e89b-12d3-a456-426614174000 exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:48.4848","message":"Room capture point 223e4567-e89b-12d3-a456-426614174000 does not exist in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when roomCapturePointId is invalid {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Generating image hash for file /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/../../../../../resources/samplephoto.png","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Received request to upload 360 capture for project 123 with filename 'photo.jpg'. Blur faces: false","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Checking if room capture point 443b4964-09df-4f86-9e98-7bec5a9fcdab exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Room capture point exists in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Uploading 1000 bytes 360Capture for project 123 with filename 'photo.jpg'.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Uploading image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/../../../../../resources/samplephoto.png with blur faces: false.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Creating thumbnail for image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/../../../../../resources/samplephoto.png","source":"ImageUploader","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Attempting to scale jpg image with dimensions 1280x720.","source":"ImageUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Scaling image. New dimensions are 500x281.","source":"ImageUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Successfully scaled image. New dimensions are 500x281.","source":"ImageUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Uploading image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/../../../../../resources/samplephoto.png to blob storage.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Full cloud storage path: /RawData/360capture/ProjectId=123/a828a9b6-18c8-4551-ab06-7a03cb85cfe3","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Uploading image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/resources/scaled_samplephoto.png to blob storage.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Full cloud storage path: /RawData/360capture/ProjectId=123/a828a9b6-18c8-4551-ab06-7a03cb85cfe3_small","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Successfully uploaded 360Capture image to Azure Blob Storage.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Successfully uploaded 360Capture image to Azure Blob Storage.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Generating image hash for file /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/resources/scaled_samplephoto.png","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Connecting to Redis URL: rediss://localhost:6380","source":"RedisClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:48.4848","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error while generating generating sas token for blob file download. Attempted to create blob sas token for an invalid container name.","stack":"Error: Attempted to create blob sas token for an invalid container name.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:4:429\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasToken (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:3738)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:618\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasQueryString (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:505)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1644\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at buildTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1299)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:572)\n at getCachedOrGenerateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:297\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at generateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:121)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:10:112\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:2:4071)","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error uploading 360Capture image. Error while generating generating sas token for blob file download. ","stack":"Error: Error while generating generating sas token for blob file download. \n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:4:1346\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasToken (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:3738)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:618\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasQueryString (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:505)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1644\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at buildTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1299)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:572)\n at getCachedOrGenerateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:297\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at generateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:121)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:10:112\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:2:4071)","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle error uploading file {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Starting background Redis connection checker. Interval: 300 seconds.","source":"RedisClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} Get 360 Captures List {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Found 2 360Captures in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return a list of 360 captures {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error fetching 360Captures list. Test Error","stack":"Error: Test Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:357:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:352:55)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle service errors {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Fetching 360Captures list for ProjectId: 123 since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Found 0 360Captures in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call get360Captures with lastSyncDateTime when provided {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Fetching 360Captures list for ProjectId: 123 since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Found 2 360Captures in project 123.","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return list with isDeleted when lastSyncDateTime is provided and service returns rows with isDeleted Get 360 Capture ✓ should return a 360 capture {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error fetching 360Capture. Error fetching 360 capture","stack":"Error: Error fetching 360 capture\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:524:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:522:47)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors Update 360 Capture ✓ Should update a 360 capture {"level":"error","timestamp":"2026-07-09 13:05:48.4848","message":"Error updating 360Capture. Error updating 360 capture","stack":"Error: Error updating 360 capture\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:569:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:564:47)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"360CapturesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors Delete 360 Capture {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Attempting to delete 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Successfully got 360Capture metadata from database for 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Successfully deleted 360Capture metadata from database for 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:48.4848","message":"Successfully deleted 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should delete a 360 capture {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error getting 360Capture metadata from database. Error getting 360 capture metadata","stack":"Error: Error getting 360 capture metadata\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:610:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:608:81)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors when getting 360 capture metadata {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully got 360Capture metadata from database for 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully deleted 360Capture metadata from database for 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting 360Capture from cloud storage: Error: Error deleting 360 capture from cloud storage","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors when deleting 360 capture from cloud storage {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully got 360Capture metadata from database for 360Capture with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error occurred deleting 360Capture metadata from database Error deleting 360 capture metadata","stack":"Error: Error deleting 360 capture metadata\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:640:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/360captures/360captures.controller.spec.ts:637:82)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors when deleting 360 capture metadata 360Captures Validator tests validate360CaptureUploadRequest ✓ should call next() one time when request is valid ✓ should return 400 when no file is provided ✓ should return 400 when projectId is invalid ✓ should return 400 when roomCapturePointId is missing ✓ should return 400 when roomCapturePointId is whitespace-only ✓ should return 400 when roomCapturePointId is not a valid UUID validate360CaptureUpdateRequest ✓ should call next() one time when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when fileReferenceId is invalid ✓ should return 400 all optionals are omitted ✓ should return 400 when optional xyzDisplayName is provided but empty (empty string is not valid) ✓ should return 400 when optional description is provided but empty (empty string is not valid) validate360CaptureListRequest ✓ should call next() when request is valid with projectId only ✓ should call next() when request is valid with projectId and lastSyncDateTime ✓ should return 400 when projectId is invalid ✓ should return 400 when lastSyncDateTime is invalid validate360CaptureRequest ✓ should call next() one time when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when fileReferenceId is invalid Photos Controller tests Get Photos List {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found 2 photos in project 123.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return a list of photos {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching photos list for ProjectId: 123 since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found 0 photos in project 123.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getPhotos with lastSyncDateTime when provided {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching photos list for ProjectId: 123 since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found 2 photos in project 123.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return list with isDeleted when lastSyncDateTime is provided and service returns rows with isDeleted {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching photos list. Error fetching photos list","stack":"Error: Error fetching photos list\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:263:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:254:55)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle service errors Get Device code List {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Retrieving unique Photo device codes from project '123'.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found '2' unique device codes on photos in project '123'.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return a list of device code {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Retrieving unique Photo device codes from project '123'.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching device codes. Error fetching device codes","stack":"Error: Error fetching device codes\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:306:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:304:55)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle service errors Get Photo ✓ should return a photo {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching photo. Error fetching photo","stack":"Error: Error fetching photo\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:393:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:391:47)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors Create Photo {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Uploading 1000 byte photo for project 123 with filename 'photo.jpg'. Blur faces: false","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should upload a photo {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Generating image hash for file /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/../../../../../resources/samplephoto.png","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Uploading 1000 byte photo for project 123 with filename 'photo.jpg'. Blur faces: false","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Uploading image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/../../../../../resources/samplephoto.png with blur faces: false.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating thumbnail for image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/../../../../../resources/samplephoto.png","source":"ImageUploader","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to scale jpg image with dimensions 1280x720.","source":"ImageUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Scaling image. New dimensions are 500x281.","source":"ImageUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully scaled image. New dimensions are 500x281.","source":"ImageUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Uploading image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/../../../../../resources/samplephoto.png to blob storage.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Full cloud storage path: /RawData/photo/ProjectId=123/6e081d4e-389c-418b-afd4-8408fc53ca4a","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Uploading image /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/resources/scaled_samplephoto.png to blob storage.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Full cloud storage path: /RawData/photo/ProjectId=123/6e081d4e-389c-418b-afd4-8408fc53ca4a_small","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully uploaded Photo image to Azure Blob Storage.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully uploaded Photo image to Azure Blob Storage.","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Generating image hash for file /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/resources/scaled_samplephoto.png","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while generating generating sas token for blob file download. Attempted to create blob sas token for an invalid container name.","stack":"Error: Attempted to create blob sas token for an invalid container name.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:4:429\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasToken (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:3738)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:618\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasQueryString (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:505)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1644\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at buildTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1299)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:572)\n at getCachedOrGenerateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:297\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at generateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:121)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:10:112\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:2:4071)","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error uploading photo. Error while generating generating sas token for blob file download. ","stack":"Error: Error while generating generating sas token for blob file download. \n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:4:1346\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasToken (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:3738)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:618\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at getBlobSasQueryString (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:505)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1644\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at buildTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:1299)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:2:572)\n at getCachedOrGenerateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/blob-download-url.cache.ts:53:2)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:297\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:2:586)\n at generateTokenisedBlobDownloadUrl (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/util/azure.util.ts:9:121)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:10:112\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/images/image.uploader.ts:2:4071)","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle error uploading file Update Photo ✓ Should update a photo {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error updating photo. Error updating photo","stack":"Error: Error updating photo\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:559:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:554:47)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PhotosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors Delete Photo {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully got photo metadata from database for photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully deleted photo metadata from database for photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully deleted photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should delete a photo {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error getting photo metadata from database. Error getting photo metadata","stack":"Error: Error getting photo metadata\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:600:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:598:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors when getting photo metadata {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully got photo metadata from database for photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully deleted photo metadata from database for photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting photo from cloud storage: Error: Error deleting photo from cloud storage","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors when deleting photo from cloud storage {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Successfully got photo metadata from database for photo with fileReferenceId: 456 from projectId: 123.","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error occurred deleting photo metadata from database Error deleting photo metadata","stack":"Error: Error deleting photo metadata\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:631:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/images/photos/photos.controller.spec.ts:628:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"FileDeletionHandler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle errors when deleting photo metadata Photos Validator tests validatePhotoListRequest ✓ should call next() when request is valid with projectId only ✓ should call next() when request is valid with projectId and lastSyncDateTime ✓ should return 400 when projectId is invalid ✓ should return 400 when lastSyncDateTime is invalid validatePhotoUploadRequest ✓ should not return 400 when request is valid ✓ should return 400 when no file is provided ✓ should return 400 when projectId is invalid ✓ should return 400 when deviceId is invalid validatePhotoUpdateRequest ✓ should not return 400 when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when fileReferenceId is invalid ✓ should return 400 when xyzDisplayName is invalid validateUnlinkCapturePointsRequest ✓ should not return 400 when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when capturePointIds is not an array ✓ should return 400 when capturePointIds contains invalid UUIDs ✓ should call next when capturePointIds is not provided Issue Severity Category Controller tests Get Issue Severity Categories ✓ Should return the list of severity categories and status 200 when severity categories are found {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching severity categories: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/issues/issue.severity.controller.spec.ts:79:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/issues/issue.severity.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/issues/issue.severity.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/issues/issue.severity.controller.spec.ts:76:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueSeverityCategoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Logs Controller tests getLogs {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching logs for service test-service.","source":"LogsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with tokenised URLs and continuationToken {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching logs for service test-service.","source":"LogsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with empty records and null continuationToken when no blobs {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching logs for service my-service_prod.","source":"LogsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should pass sanitized prefix built from serviceName to listLogFiles {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching logs for service svc.","source":"LogsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should pass from/to dates and continuationToken to listLogFiles {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching logs for service svc.","source":"LogsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should propagate errors thrown by listLogFiles getLogFileCloudStoragePath ✓ should build correct storage path ✓ should sanitize path separators in serviceName segment ✓ should sanitize path separators in filename segment Logs Validator tests validateGetLogsRequest ✓ should call next when only serviceName is provided ✓ should call next when all optional params are valid ✓ should call next when serviceName contains subfolder segments ✓ should return 400 when serviceName is missing ✓ should return 400 when serviceName is blank ✓ should return 400 when from is not a valid date ✓ should return 400 when to is not a valid date ✓ should return 400 when size is zero ✓ should return 400 when size is negative ✓ should return 400 when size is not a number Portfolios Controller tests listPortfoliosByTenantHandler ✓ Should return 200 and array when tenantId in query ✓ Should resolve mongoTenantId and return 200 ✓ Should treat JWT tenantId claim as mongoTenantId and resolve to Postgres tenant createPortfolioHandler ✓ Should return 201 and created portfolio getPortfolioHandler ✓ Should return 200 and portfolio when found updatePortfolioHandler ✓ Should return 200 and updated portfolio deletePortfolioHandler ✓ Should return 204 when delete succeeds (non-default portfolio) {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting portfolio p1111111-1111-1111-1111-111111111111 Cannot delete the default portfolio for the tenant. Set another portfolio as default first.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Cannot delete the default portfolio for the tenant. Set another portfolio as default first.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:156:11\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 409 when portfolio is default (default portfolio must not be deleted) listPortfolioProjectsHandler ✓ Should return 200 and call service without tenantId for non-admin user ✓ Should pass tenantId to service when user has ADMIN_FOR_ALL_PROJECT role portfolioDashboardHandler ✓ Should return 200 and report with projects when found ✓ Should call getPortfolioProjectReport with progressInterval and qualityInterval from query ✓ Should use default WEEK for progressInterval when not provided ✓ Should use default MONTH for qualityInterval when not provided ✓ Should return 200 and empty projects array when portfolio has no projects {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error listing projects for portfolio 00000000-0000-0000-0000-000000000099 Portfolio with PortfolioId: 00000000-0000-0000-0000-000000000099 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Portfolio with PortfolioId: 00000000-0000-0000-0000-000000000099 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:295:11\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when portfolio does not exist {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error listing projects for portfolio p1111111-1111-1111-1111-111111111111 Error listing projects for PortfolioId","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error listing projects for PortfolioId\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:310:18\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when service throws unexpected error getPortfolioProjectHandler ✓ Should return 200 and project removeProjectFromPortfolioHandler ✓ Should return 204 when remove succeeds getPortfolioMilestonesHandler ✓ Should return 200 with portfolioId and milestones array ✓ Should return 200 with empty milestones array when portfolio has no milestones {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching milestones for portfolio 00000000-0000-0000-0000-000000000099 Portfolio with PortfolioId: 00000000-0000-0000-0000-000000000099 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Portfolio with PortfolioId: 00000000-0000-0000-0000-000000000099 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:394:11\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when portfolio does not exist {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching milestones for portfolio p1111111-1111-1111-1111-111111111111 Error fetching milestones for PortfolioId","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error fetching milestones for PortfolioId\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:410:11\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when service throws unexpected error attachProjectToPortfolioHandler ✓ Should return 200 and message when attach succeeds {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error attaching project proj-111 to portfolio 00000000-0000-0000-0000-000000000099 Portfolio with PortfolioId: 00000000-0000-0000-0000-000000000099 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Portfolio with PortfolioId: 00000000-0000-0000-0000-000000000099 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:446:11\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when portfolio does not exist {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error attaching project 00000000-0000-0000-0000-000000000099 to portfolio p1111111-1111-1111-1111-111111111111 Project 00000000-0000-0000-0000-000000000099 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project 00000000-0000-0000-0000-000000000099 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:467:11\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/portfolios/portfolios.controller.spec.ts:38:58)","source":"PortfoliosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when project does not exist Portfolios Validator tests validateListPortfoliosRequest ✓ should return 400 when tenantId and mongoTenantId are both set ✓ should call next when both query tenant params are omitted (handler uses JWT tenantId claim) ✓ should return 400 when tenantId is invalid UUID ✓ should call next when tenantId is valid UUID ✓ should call next when mongoTenantId is provided validatePortfolioIdRequest ✓ should return 400 when portfolioId is invalid UUID ✓ should call next when portfolioId is valid ✓ should return 400 when progressInterval is invalid (not WEEK, MONTH, QUARTER) ✓ should return 400 when qualityInterval is invalid (not WEEK, MONTH, QUARTER) ✓ should call next when progressInterval and qualityInterval are valid (WEEK, MONTH, QUARTER) validateCreatePortfolioRequest ✓ should return 400 when tenantId is missing ✓ should return 400 when name is missing ✓ should call next when body is valid validateUpdatePortfolioRequest ✓ should return 400 when currencyId is invalid UUID ✓ should call next when currencyId and isDefaultForTenant are valid validatePortfolioIdAndProjectIdRequest ✓ should return 400 when portfolioId is invalid ✓ should call next when both ids are valid UUIDs validateUpdatePortfolioProjectRequest ✓ should call next when progressWeighting and isPortfolioEnabled are valid Activity categories controller test Create activity category tests When required parameters are missing from the request When empty request is posted {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"not a valid project id","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity category should return 400 When required parameters are provided in the request And when DB is down {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while creating ActivityCategories Sinon-provided ","name":"","stack":"Error: Sinon-provided \n at Object.fake.exceptionCreator (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/default-behaviors.js:18:34)\n at Object.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/behavior.js:165:35)\n at functionStub (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/stub.js:44:43)\n at createActivityCategories.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy-invoke.js:53:47)\n at createActivityCategories (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy.js:275:26)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:4:3584\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:572)\n at createActivityCategoriesOldFormat (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:4:1655)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:3620\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:572)\n at Object.createActivityCategories (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:2911)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:84:38\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:83:65)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have 500 status code {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while creating ActivityCategories Sinon-provided ","name":"","stack":"Error: Sinon-provided \n at Object.fake.exceptionCreator (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/default-behaviors.js:18:34)\n at Object.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/behavior.js:165:35)\n at functionStub (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/stub.js:44:43)\n at createActivityCategories.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy-invoke.js:53:47)\n at createActivityCategories (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy.js:275:26)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:4:3584\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:572)\n at createActivityCategoriesOldFormat (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:4:1655)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:3620\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:572)\n at Object.createActivityCategories (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.categories.controller.ts:2:2911)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:89:38\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:88:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid error in the response And when DB is up {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Activity categories created successfully for projectId: 123 with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should should return 201 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Activity categories created successfully for projectId: 123 with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should create activity category When CategoryType Discipline has CategoryType Package as parent {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"Discipline cannot have parentCategoryType","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should should return 400 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"Discipline cannot have parentCategoryType","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should create activity category When CategoryType Package has CategoryType Package as parent {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"provided categoryType: Package doesn't have correct parentCategoryType Package","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should should return 400 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"provided categoryType: Package doesn't have correct parentCategoryType Package","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should create activity category When CategoryType Package has CategoryType Location as parent {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"provided parentCategoryType: Location cannot be used as parentCategoryType","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should should return 400 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"provided parentCategoryType: Location cannot be used as parentCategoryType","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should create activity category When CategoryType Location has CategoryType Package as parent {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Activity categories created successfully for projectId: 123 with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should should return 201 When CategoryType Location has CategoryType Discipline as parent {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received create activity categories request with old format query parameter.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Received create activity categories request with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"DEPRECATED: Activity categories created successfully for projectId: 123 with 1 items.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should should return 201 Bulk update activity categories ✓ should call service and return 204 on success {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while updating ActivityCategories Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:282:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:280:69)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should map service error to error response Get activity category tests When valid project id is provided Then it should return activity categories ✓ It should return 200 ✓ It should have valid response When valid project id is provided and extra fields are requested Then it should return activity categories undefined ✓ It should return 200 ✓ It should have valid response Get discipline from category tests Then it should return discipline category ✓ It should return 200 ✓ It should have valid response Then it should return empty discipline category ✓ It should return 404 Then it should cause an error as params are invalid {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching ActivityCategories InvalidRequest","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: InvalidRequest\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:442:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 400 Delete discipline from category tests Delete discipline from category tests - It should return 204 Shouldnt delete discipline category if project and category id isnt there - It should return 404 Shouldnt delete discipline category if there is a resource conflict - It should return 409 Delete activity category by ID tests When deleteChildren query parameter is true {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: parent-category-id and all its children.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found 4 categories to delete for activity category with activityCategoryId: parent-category-id.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Activity categories deleted successfully for projectId: parent-project-id.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 204 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: parent-category-id and all its children.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found 4 categories to delete for activity category with activityCategoryId: parent-category-id.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Activity categories deleted successfully for projectId: parent-project-id.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should call deleteActivityCategoriesBulk service with correct parameters {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: parent-category-id and all its children.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Found 4 categories to delete for activity category with activityCategoryId: parent-category-id.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Activity categories deleted successfully for projectId: parent-project-id.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should not return any response body When valid project ID and activity category ID are provided {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Activity category deleted successfully for projectId: 123.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 204 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Activity category deleted successfully for projectId: 123.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should call deleteActivityCategory service with correct parameters {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Activity category deleted successfully for projectId: 123.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should not return any response body When activity category is not found {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting activity Category. Activity Category not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Activity Category not found.\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:579:39)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 404 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting activity Category. Activity Category not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Activity Category not found.\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:579:39)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return appropriate error message When there is a resource conflict {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting activity Category. Cannot delete activity category - it is referenced by existing activities","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Cannot delete activity category - it is referenced by existing activities\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:602:47)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 409 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting activity Category. Cannot delete activity category - it is referenced by existing activities","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Cannot delete activity category - it is referenced by existing activities\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:602:47)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return appropriate error message When database throws an unexpected error {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting activity Category. Database connection failed","stack":"Error: Database connection failed\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:625:51)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Attempting to delete activity category with activityCategoryId: 11111111-1111-1111-1111-111111111111.","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting activity Category. Database connection failed","stack":"Error: Database connection failed\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.categories.controller.spec.ts:625:51)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityCategories","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return generic error message Utility: validateCategoryTypesAndParentLevels ✓ returns valid when types are consistent and parent is lower level ✓ flags error when a category type appears with multiple levels ✓ flags error when parent level is equal or higher than child level (parent present) ✓ does not validate parent level when parent is not in payload ✓ aggregates multiple errors across the payload Utility: listSubtreeCategoryIds listSubtreeCategoryIds input (missing root): [{"categoryId":"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa","parentCategoryId":null},{"categoryId":"bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb","parentCategoryId":"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"}] listSubtreeCategoryIds output (missing root): [] ✓ returns [] when root does not exist listSubtreeCategoryIds input (leaf root): [{"categoryId":"00000000-0000-0000-0000-000000000000","parentCategoryId":null},{"categoryId":"22222222-2222-2222-2222-222222222222","parentCategoryId":null}] listSubtreeCategoryIds output (leaf root): [ '00000000-0000-0000-0000-000000000000' ] ✓ returns only the root id when it is a leaf listSubtreeCategoryIds input (multi-branch): [{"categoryId":"33333333-3333-3333-3333-333333333333","parentCategoryId":null},{"categoryId":"44444444-4444-4444-4444-444444444444","parentCategoryId":"33333333-3333-3333-3333-333333333333"},{"categoryId":"55555555-5555-5555-5555-555555555555","parentCategoryId":"33333333-3333-3333-3333-333333333333"},{"categoryId":"66666666-6666-6666-6666-666666666666","parentCategoryId":"44444444-4444-4444-4444-444444444444"},{"categoryId":"77777777-7777-7777-7777-777777777777","parentCategoryId":"55555555-5555-5555-5555-555555555555"},{"categoryId":"88888888-8888-8888-8888-888888888888","parentCategoryId":null},{"categoryId":"99999999-9999-9999-9999-999999999999","parentCategoryId":"88888888-8888-8888-8888-888888888888"}] listSubtreeCategoryIds output (multi-branch): [ '33333333-3333-3333-3333-333333333333', '55555555-5555-5555-5555-555555555555', '77777777-7777-7777-7777-777777777777', '44444444-4444-4444-4444-444444444444', '66666666-6666-6666-6666-666666666666' ] ✓ returns all ids from a multi-branch subtree (order agnostic) listSubtreeCategoryIds input (child before parent): [{"categoryId":"bbbbbbbb-cccc-dddd-eeee-ffffffffffff","parentCategoryId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"},{"categoryId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","parentCategoryId":null},{"categoryId":"cccccccc-dddd-eeee-ffff-000000000000","parentCategoryId":"bbbbbbbb-cccc-dddd-eeee-ffffffffffff"}] listSubtreeCategoryIds output (child before parent): [ 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee', 'bbbbbbbb-cccc-dddd-eeee-ffffffffffff', 'cccccccc-dddd-eeee-ffff-000000000000' ] ✓ works when children appear before their parent in the input listSubtreeCategoryIds input (sub-branch B): [{"categoryId":"12121212-3434-5656-7878-909090909090","parentCategoryId":null},{"categoryId":"23232323-4545-6767-8989-010101010101","parentCategoryId":"12121212-3434-5656-7878-909090909090"},{"categoryId":"34343434-5656-7878-9090-121212121212","parentCategoryId":"23232323-4545-6767-8989-010101010101"},{"categoryId":"45454545-6767-8989-0101-232323232323","parentCategoryId":null}] listSubtreeCategoryIds output (sub-branch B): [ '23232323-4545-6767-8989-010101010101', '34343434-5656-7878-9090-121212121212' ] ✓ returns just the branch under a non-root node listSubtreeCategoryIds input (multiple disjoint roots): [{"categoryId":"aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb","parentCategoryId":null},{"categoryId":"cccccccc-1111-2222-3333-dddddddddddd","parentCategoryId":"aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb"},{"categoryId":"eeeeeeee-1111-2222-3333-ffffffffffff","parentCategoryId":"aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb"},{"categoryId":"99999999-8888-7777-6666-555555555555","parentCategoryId":null},{"categoryId":"12121212-1313-1414-1515-161616161616","parentCategoryId":"99999999-8888-7777-6666-555555555555"}] listSubtreeCategoryIds output (multiple disjoint roots): [ '99999999-8888-7777-6666-555555555555', '12121212-1313-1414-1515-161616161616', 'aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb', 'eeeeeeee-1111-2222-3333-ffffffffffff', 'cccccccc-1111-2222-3333-dddddddddddd' ] ✓ returns union of ids for multiple disjoint roots (order agnostic) listSubtreeCategoryIds input (overlapping roots): [{"categoryId":"71717171-8181-9191-a1a1-b1b1b1b1b1b1","parentCategoryId":null},{"categoryId":"c2c2c2c2-d3d3-e4e4-f5f5-060606060606","parentCategoryId":"71717171-8181-9191-a1a1-b1b1b1b1b1b1"},{"categoryId":"07070707-0808-0909-0a0a-0b0b0b0b0b0b","parentCategoryId":"c2c2c2c2-d3d3-e4e4-f5f5-060606060606"}] listSubtreeCategoryIds output (overlapping roots): [ 'c2c2c2c2-d3d3-e4e4-f5f5-060606060606', '07070707-0808-0909-0a0a-0b0b0b0b0b0b', '71717171-8181-9191-a1a1-b1b1b1b1b1b1' ] ✓ handles overlapping roots where one is ancestor of another (no duplicates) Activity Elements controller test Get activity elements tests When valid project id is provided Then it should return activity categories {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching elements for a ProjectId: projectId and an Activity: activity-Id","lastFetchedIndexId":0,"size":10000,"source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 200 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching elements for a ProjectId: projectId and an Activity: activity-Id","lastFetchedIndexId":0,"size":10000,"source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid response When error is thrown Then response should have error code {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching elements for a ProjectId: projectId and an Activity: activity-Id","lastFetchedIndexId":0,"size":10000,"source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching elements for projectId: projectId and activityId: activity-Id some unknown error","stack":"Error: some unknown error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:88:33)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:87:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:35:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:20:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching elements for a ProjectId: projectId and an Activity: activity-Id","lastFetchedIndexId":0,"size":10000,"source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching elements for projectId: projectId and activityId: activity-Id some unknown error","stack":"Error: some unknown error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:88:33)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:87:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:35:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:20:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should response with code and message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching elements for a ProjectId: projectId and an Activity: activity-Id","lastFetchedIndexId":0,"size":10000,"source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching elements for projectId: projectId and activityId: activity-Id some unknown error","stack":"Error: some unknown error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:88:33)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:87:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:35:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:20:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should have logged info message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching elements for a ProjectId: projectId and an Activity: activity-Id","lastFetchedIndexId":0,"size":10000,"source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching elements for projectId: projectId and activityId: activity-Id some unknown error","stack":"Error: some unknown error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:88:33)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:87:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:35:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.elements.controller.spec.ts:20:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should have logged error message Create Activities Progress controller test When valid request body is provided {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Created activity progress collection with 2 entries for calendarDate: 2024-01-15","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 201 with success message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Created activity progress collection with 2 entries for calendarDate: 2024-01-15","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return correct success message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Created activity progress collection with 2 entries for calendarDate: 2024-01-15","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log info message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Created activity progress collection with 2 entries for calendarDate: 2024-01-15","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log collection creation with correct count When request body has empty activitiesProgress array {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Created activity progress collection with 0 entries for calendarDate: 2024-01-15","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 201 with success message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Created activity progress collection with 0 entries for calendarDate: 2024-01-15","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log collection creation with 0 entries When error is thrown {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while creating activities progress for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab Cannot read properties of undefined (reading 'map')","stack":"TypeError: Cannot read properties of undefined (reading 'map')\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:4:79)\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:2:586)\n at Object.createActivitiesProgress (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:3:2349)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:134:30\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:133:44)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while creating activities progress for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab Cannot read properties of undefined (reading 'map')","stack":"TypeError: Cannot read properties of undefined (reading 'map')\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:4:79)\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:2:586)\n at Object.createActivitiesProgress (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:3:2349)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:139:30\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:138:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should response with error code and message {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Creating activities progress for a ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while creating activities progress for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab Cannot read properties of undefined (reading 'map')","stack":"TypeError: Cannot read properties of undefined (reading 'map')\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:4:79)\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:2:586)\n at Object.createActivitiesProgress (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/activities/activities.controller.ts:3:2349)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:147:30\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activities.progress.controller.spec.ts:146:59)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivityElementsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should have logged error message Activities Progress Validator Tests validateActivitiesProgressReq Valid requests ✓ should call next when request is valid with all fields ✓ should call next when request is valid without scheduleRevisionId ✓ should call next when progress is 0 ✓ should call next when progress is 1 ✓ should call next when activitiesProgress is empty array Invalid projectId ✓ should return 400 when projectId is invalid Invalid calendarDate ✓ should return 400 when calendarDate is missing ✓ should return 400 when calendarDate is not a valid date ✓ should return 400 when calendarDate is empty string Invalid activitiesProgress ✓ should return 400 when activitiesProgress is missing ✓ should return 400 when activitiesProgress is null ✓ should return 400 when activitiesProgress is not an array ✓ should return 400 when activitiesProgress item is not an object ✓ should return 400 when activitiesProgress item is null Invalid activityId ✓ should return 400 when activityId is missing ✓ should return 400 when activityId is not a valid UUID Invalid progress ✓ should return 400 when progress is missing ✓ should return 400 when progress is null ✓ should return 400 when progress is not a number ✓ should return 400 when progress is NaN ✓ should return 400 when progress is less than 0 ✓ should return 400 when progress is greater than 1 Multiple activitiesProgress items validation ✓ should return 400 when first item has invalid progress ✓ should return 400 when second item has invalid activityId validateActivityCategory ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when activityCategoryId is invalid validateUpdateActivityCategoryRequest ✓ should call next when request is valid with categoryName ✓ should call next when request is valid with categoryDescription ✓ should call next when request is valid with categoryIdentifier ✓ should call next when request is valid with all fields ✓ should return 400 when projectId is invalid ✓ should return 400 when activityCategoryId is invalid ✓ should return 400 when no fields are provided ✓ should return 400 when categoryName is not a string ✓ should return 400 when categoryDescription is not a string ✓ should return 400 when categoryIdentifier is not a string validateActivityRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when activityId is invalid validateActivitiesListRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid validateActivityCategoryType ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when categoryTypeId is invalid validatePackagePredictionsReq ✓ should call next when request is valid without maxPredictionsPerActivity ✓ should call next when request is valid with valid maxPredictionsPerActivity ✓ should return 400 when projectId is invalid ✓ should return 400 when maxPredictionsPerActivity is not a number ✓ should return 400 when maxPredictionsPerActivity is 0 ✓ should return 400 when maxPredictionsPerActivity is negative ✓ should return 400 when lastFetchedIndexId is not a number ✓ should return 400 when lastFetchedIndexId is negative ✓ should call next when lastFetchedIndexId is 0 ✓ should call next when lastFetchedIndexId is a positive number ActivityCategoryMapping controller test Create activity mappings tests When required parameters are missing from the request When an empty request with invalid projectId is posted {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":["not a valid project id","Payload is not valid"],"source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 When an empty request with projectId is posted {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":["Payload is not valid"],"source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 When an empty array request with projectId is posted {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":["Payload is not valid"],"source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 When an invalid request with invalid array and with projectId is posted {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":["Payload is not valid"],"source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 When required parameters are provided in the request And when DB is down ✓ It should have 500 status code ✓ It should have valid error in the response And project already exist in the DB ✓ It should return 201 ✓ And it should create model element activity mapping Get activity mappings tests When error thrown from DB in the request {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching ActivitiesMapping DB error","stack":"Error: DB error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:135:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:132:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:131:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:22:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ fetch activity mappings should return 400 When pagination parameters are provided ✓ should call fetchActivitiesMappingsWithPagination when size query parameter is provided ✓ should call fetchActivitiesMappingsWithPagination with lastSyncDateTime when provided ✓ should call fetchActivitiesMappings when size is not provided {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching ActivitiesMapping Database error","stack":"Error: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:268:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:267:94)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors from fetchActivitiesMappingsWithPagination Delete activity mappings tests When error thrown from DB in the request {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while deleting ActivityCategoryMappings DB error","stack":"Error: DB error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:294:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:291:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:290:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/activitymapping.controller.spec.ts:22:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ActivitiesMappingController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Delete activity mappings should return 400 Package Predictions controller test Get package predictions tests When valid project id is provided Then it should return package predictions {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching PackagePrediction for ProjectId:projectId","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 200 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching PackagePrediction for ProjectId:projectId","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid response When project id doesn't exist Then it should return 404 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching PackagePrediction for ProjectId:projectId","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching package predictions ProjectId not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ProjectId not found.\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/package.predictions.spec.ts:89:43)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 404 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching PackagePrediction for ProjectId:projectId","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching package predictions ProjectId not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ProjectId not found.\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/package.predictions.spec.ts:89:43)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid response When valid project id is provided but DBError occurred Then it should return 404 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching PackagePrediction for ProjectId:projectId","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching package predictions some unknown error","stack":"Error: some unknown error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/package.predictions.spec.ts:120:41)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Fetching PackagePrediction for ProjectId:projectId","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching package predictions some unknown error","stack":"Error: some unknown error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/activities/package.predictions.spec.ts:120:41)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"PackagePredictionController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid response Batchfiles Controller test Get batchfile status When DB throws unexpected error {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching BatchFileIngestStatus for project = 443b4964-09df-4f86-9e98-7bec5a9fcdab, batchFileId = batch-file-uuid Forced Error","stack":"Error: Forced Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:42:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:35:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BatchFileController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 with the schedule revision When DB returns empty list {"level":"warn","timestamp":"2026-07-09 13:05:49.4949","message":"Batch file not found for project = 443b4964-09df-4f86-9e98-7bec5a9fcdab, batchFileId = batch-file-uuid.","source":"BatchFileController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 with the schedule revision Stage data from batchfile When DB throws unexpected error {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while staging data for project = 443b4964-09df-4f86-9e98-7bec5a9fcdab, batchFileId = batch-file-uuid Forced Error","stack":"Error: Forced Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:83:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:76:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BatchFileController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 with the schedule revision When Not Found Error returned {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while staging data for project = 443b4964-09df-4f86-9e98-7bec5a9fcdab, batchFileId = batch-file-uuid Forced Error","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Forced Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:105:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:97:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BatchFileController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 with the schedule revision Migrate data from staging to XYZ When DB throws unexpected error {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while migrating data for project = 443b4964-09df-4f86-9e98-7bec5a9fcdab, batchFileId = batch-file-uuid Forced Error","stack":"Error: Forced Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:128:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:121:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BatchFileController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 with the schedule revision When Not Found Error returned {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while migrating data for project = 443b4964-09df-4f86-9e98-7bec5a9fcdab, batchFileId = batch-file-uuid Forced Error","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Forced Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:150:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/batchfiles/batchfiles.controller.spec.ts:142:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BatchFileController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 with the schedule revision CDE Controller tests createSyncCriteria ✓ Should successfully create sync criteria and return 201 ✓ Should handle error when updateCdeSyncConfig fails ✓ Should handle missing syncActionType in query ✓ Should handle empty sync criteria payload updateSyncCriteria ✓ Should successfully update sync criteria and return 200 ✓ Should handle error when updateCdeSyncConfig fails and return error response ✓ Should handle empty sync criteria payload ✓ Should handle null sync criteria payload getSyncCriteria ✓ Should successfully get sync criteria and return 200 ✓ Should handle error when getCdeSyncConfig fails and return error response ✓ Should handle NotFoundError when sync criteria not found ✓ Should handle empty sync criteria response ✓ Should handle undefined sync criteria response Edge cases and error handling ✓ Should handle invalid projectId format in createSyncCriteria ✓ Should handle missing projectId in updateSyncCriteria ✓ Should handle service timeout error in getSyncCriteria CDE Criteria Validator tests validateCdeSyncCriteriaRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid ✓ Should return 400 when request body is empty array ✓ Should return 400 when request body is null ✓ Should return 400 when request body is undefined {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"INVALID_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'INVALID_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when criteria_type is invalid {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"ISSUE_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'ISSUE_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when ids object is missing required fields {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"ISSUE_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'ISSUE_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when ids.types is not an array {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"ISSUE_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'ISSUE_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when ids.validMethods is not an array {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"ISSUE_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'ISSUE_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when ids.required is not a boolean {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"ISSUE_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'ISSUE_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when ids.order is not a number ✓ Should call next when all valid criteria types are used ✓ Should handle multiple valid criteria in array {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Sync criteria validation error: [{\"received\":\"ISSUE_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[0,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'ISSUE_TYPE'\"},{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[0,\"ids\"],\"message\":\"Expected array, received object\"},{\"received\":\"INVALID_TYPE\",\"code\":\"invalid_enum_value\",\"options\":[\"ISSUE_SUBTYPE\",\"ISSUE_STATUS\",\"CONTACT\",\"ROLE\",\"COMPANY\",\"CREATED_BY\",\"ASSIGNED_TO\"],\"path\":[1,\"criteria_type\"],\"message\":\"Invalid enum value. Expected 'ISSUE_SUBTYPE' | 'ISSUE_STATUS' | 'CONTACT' | 'ROLE' | 'COMPANY' | 'CREATED_BY' | 'ASSIGNED_TO', received 'INVALID_TYPE'\"}]","source":"CdeSyncCriteriaValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when array contains invalid criteria ✓ Should handle optional fields correctly CDE helper test Get BIM360Project List {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting list of BIM360 projects, for access token token","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return only BIM 360 projects {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting list of BIM360 projects, for access token token","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should not return any remote project if project is already linked {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting list of BIM360 projects, for access token token","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw error when autodesk is not reachable Get hub Id lists {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting BIM360Hubs from Autodesk, for access token: [token]","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return only hub ids starting with "b." {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting BIM360Hubs from Autodesk, for access token: [token]","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw error when autodesk is not reachable Get AutodeskToken {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting autodesk token","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching two legged token from ACC. Forced error","stack":"Error: Forced error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:175:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:173:74)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should log error when autodesk is not reachable Get Autodesk user info {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting autodesk user","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Getting autodesk profile client url is: ","source":"AutodeskClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error while fetching user details from ACC. Forced error","stack":"Error: Forced error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:192:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/cde/cde.helper.spec.ts:190:74)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CdeHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should log error when autodesk is not reachable Cde link Validator tests validate link project request ✓ should return 400 when invalid ProjectId is sent ✓ should return 400 when missing thirdPartyProjectId from body ✓ should return 400 when missing thirdPartyProjectName from body ✓ should return 400 when missing cdeType from body ✓ should return 400 when wrong cdeType is provided ✓ should return 400 when wrong region is provided ✓ should return 400 when thirdPartyCccountId is missing ✓ should return 400 when thirdPartyAccountName is missing ✓ should return 400 when thirdPartyProjectId is missing validate link Cde user request ✓ should return 400 when invalid ProjectId is sent ✓ should return 400 when missing cdeType from query ✓ should return 400 when wrong cdeType is provided Coordinates Conflict Controller tests Get Coordinate Conflicts {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching Coordinate Conflicts by Project ID. Coordinate Conflict not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Coordinate Conflict not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:41:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:34:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when coordinate conflicts is not found {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching Coordinate Conflicts by Project ID. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:61:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:54:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs ✓ Should return the coordinate conflicts and status 200 when conflict is found Delete Coordinate Conflict {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting Coordinate Conflicts. Coordinate Conflict not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Coordinate Conflict not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:123:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:115:82)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when coordinate conflict is not found {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error deleting Coordinate Conflicts. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:143:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:136:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs ✓ Should return status 204 when coordinate is deleted successfully Solve Coordinate Conflicts {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received Coordinate Conflict resolution request.","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error resolving conflicts for Project Id. There are no coordinate conflicts to solve in project 456b4864-07df-3t75-9e89-9bec5a9fcdab.","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: There are no coordinate conflicts to solve in project 456b4864-07df-3t75-9e89-9bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/conflict.controller.ts:2:5931\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/conflict.controller.ts:2:3970)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when no conflicts exist to solve {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received Coordinate Conflict resolution request.","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error resolving conflicts for Project Id. The following coordinate IDs do not correspond to existing conflicts: 184062cf-97a1-31e3-a4ac-20733fbe2b45","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: The following coordinate IDs do not correspond to existing conflicts: 184062cf-97a1-31e3-a4ac-20733fbe2b45\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/conflict.controller.ts:3:534\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/conflict.controller.ts:2:3970)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when coordinate IDs don't match existing conflicts {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received Coordinate Conflict resolution request.","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error resolving conflicts for Project Id. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:286:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/conflict.controller.spec.ts:253:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs {"level":"info","timestamp":"2026-07-09 13:05:49.4949","message":"Received Coordinate Conflict resolution request.","source":"CoordinatesConflictController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 200 when conflicts are resolved successfully Conflict Validator tests validateResolveConflictRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid ✓ Should return 400 when body is not an array ✓ Should return 400 when body array is empty {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Conflict resolution validation error: [{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"undefined\",\"path\":[0,\"xCoordinate\"],\"message\":\"Required\"},{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"undefined\",\"path\":[0,\"yCoordinate\"],\"message\":\"Required\"},{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"undefined\",\"path\":[0,\"zCoordinate\"],\"message\":\"Required\"}]","source":"CoordinatesConflictValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when array item is missing required fields validateGetCoordinateConflictRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid validateDeleteCoordinateConflictRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid Coordinates Controller tests Get Coordinate ✓ Should return the coordinate and status 200 when coordinate is found {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching Coordinate by ID. Coordinate not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Coordinate not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:73:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:65:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when coordinate is not found {"level":"error","timestamp":"2026-07-09 13:05:49.4949","message":"Error fetching Coordinate by ID. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:94:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:86:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Coordinate List ✓ Should return the list of coordinates and status 200 when coordinates are found {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error fetching Coordinate list. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:161:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:150:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching coordinates list for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getCoordinateList with lastSyncDateTime when provided ✓ should call getCoordinateList without lastSyncDateTime when not provided Get Coordinate as CSV downloadable file ✓ Should return the list of coordinates and status 200 when coordinates are found {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while fetching Coordinate list for downloadable CSV Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:254:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:243:103)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs while fetching Coordinates {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while fetching Coordinate list for downloadable CSV Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:284:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:273:107)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs while fetching Project details Delete Coordinate ✓ Should return status 200 when coordinate is deleted successfully {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error deleting Coordinate. Coordinate not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Coordinate not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:329:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:321:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when coordinate is not found {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error deleting Coordinate. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:350:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:342:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Delete Coordinates ✓ Should return status 200 when specific coordinates are deleted successfully ✓ Should return status 200 when all coordinates are deleted successfully {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error deleting Coordinates. No project found for ProjectId.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No project found for ProjectId.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:414:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:404:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when project is not found {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error deleting Coordinates. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:437:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:427:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Upload coordinates {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"No conflicts found. Inserting to coordinates table.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 200 when inserted successfully {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Unresolved conflicts for this project found in conflict table.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 200 when existing conflicts found {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 1 conflicts. Inserting to coordinate conflicts table.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 200 when new conflicts found {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"No conflicts found. Inserting to coordinates table.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error uploading coordinates. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:551:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:543:91)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when unexpected error occurs insertCoordinates {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error uploading coordinates. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:575:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:567:104)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when unexpected error occurs calculatingCoordinateConflicts {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Conflicting point IDs point-1,point-2","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error uploading coordinates. Invalid CSV. Contained 2 conflicting point IDs and 0 conflicting sets of coordinates.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Invalid CSV. Contained 2 conflicting point IDs and 0 conflicting sets of coordinates.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:26:808\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:4668\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:3823)\n at processCoordinates (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:25:128)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:16:554\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:4668\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:3823)\n at Object.uploadCoordinates (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:14:124)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:608:30\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:589:117)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should log conflicting point IDs when internal conflicts (conflicting point IDs) are found {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Conflicting point IDs ","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Conflicting Coordinates [{\"pointId\":\"point-1\",\"xCoordinate\":1,\"yCoordinate\":2,\"zCoordinate\":3}]","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error uploading coordinates. Invalid CSV. Contained 0 conflicting point IDs and 1 conflicting sets of coordinates.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Invalid CSV. Contained 0 conflicting point IDs and 1 conflicting sets of coordinates.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:26:808\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:4668\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:3823)\n at processCoordinates (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:25:128)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:16:554\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:4668\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:3823)\n at Object.uploadCoordinates (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:14:124)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:637:30\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:615:121)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should log conflicting coordinates when internal conflicts (conflicting coordinates) are found {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Received uploadCoordinates request for file 'coordinates.csv'.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Parsed 2 coordinates from file.","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Conflicting point IDs point-1","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Conflicting Coordinates [{\"pointId\":\"point-2\",\"xCoordinate\":10,\"yCoordinate\":20,\"zCoordinate\":30}]","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error uploading coordinates. Invalid CSV. Contained 1 conflicting point IDs and 1 conflicting sets of coordinates.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Invalid CSV. Contained 1 conflicting point IDs and 1 conflicting sets of coordinates.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:26:808\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:4668\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:3823)\n at processCoordinates (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:25:128)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:16:554\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:4668\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:2:3823)\n at Object.uploadCoordinates (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/coordinates/coordinates.controller.ts:14:124)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:666:30\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/coordinates/coordinates.controller.spec.ts:644:131)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"CoordinatesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should log both conflicting point IDs and conflicting coordinates when both internal conflicts are found Coordinates Validator tests validateCreateCoordinateRequest Single coordinate object ✓ Should call next when request is valid with single coordinate object {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"undefined\",\"path\":[\"yCoordinate\"],\"message\":\"Required\"},{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"undefined\",\"path\":[\"zCoordinate\"],\"message\":\"Required\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[],\"message\":\"Expected array, received object\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when single coordinate body is missing required fields {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"string\",\"received\":\"number\",\"path\":[\"pointId\"],\"message\":\"Expected string, received number\"},{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"string\",\"path\":[\"xCoordinate\"],\"message\":\"Expected number, received string\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"object\",\"path\":[],\"message\":\"Expected array, received object\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when single coordinate has wrong types Array of coordinates ✓ Should call next when request is valid with array of coordinates ✓ Should call next when request is valid with single coordinate in array ✓ Should call next when request is valid with empty array {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"array\",\"path\":[],\"message\":\"Expected object, received array\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"undefined\",\"path\":[0,\"zCoordinate\"],\"message\":\"Required\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when array contains coordinate missing required fields {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"array\",\"path\":[],\"message\":\"Expected object, received array\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"string\",\"received\":\"number\",\"path\":[0,\"pointId\"],\"message\":\"Expected string, received number\"},{\"code\":\"invalid_type\",\"expected\":\"number\",\"received\":\"string\",\"path\":[0,\"xCoordinate\"],\"message\":\"Expected number, received string\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when array contains coordinate with wrong types {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"array\",\"path\":[],\"message\":\"Expected object, received array\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"null\",\"path\":[0],\"message\":\"Expected object, received null\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when array contains null or invalid values Common validation ✓ Should return 400 when projectId is invalid ✓ Should return 400 when projectId is invalid with array {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"string\",\"path\":[],\"message\":\"Expected object, received string\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"string\",\"path\":[],\"message\":\"Expected array, received string\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when body is neither object nor array {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate creation parsing error: [{\"code\":\"invalid_union\",\"unionErrors\":[{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"object\",\"received\":\"null\",\"path\":[],\"message\":\"Expected object, received null\"}],\"name\":\"ZodError\"},{\"issues\":[{\"code\":\"invalid_type\",\"expected\":\"array\",\"received\":\"null\",\"path\":[],\"message\":\"Expected array, received null\"}],\"name\":\"ZodError\"}],\"path\":[],\"message\":\"Invalid input\"}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when body is null validateUpdateCoordinateRequest ✓ Should call next when request is valid ✓ should return 400 when projectId is invalid ✓ Should return 400 when coordinateId is invalid {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Coordinate update parsing error: [{\"code\":\"custom\",\"message\":\"At least one field must be provided\",\"path\":[]}]","source":"CoordinatesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when body is missing all fields validateGetCoordinateRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ Should return 400 when coordinateId is invalid validateGetCoordinateListRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid ✓ Should return 400 when paging parameters are invalid ✓ Should call next when request is valid with lastSyncDateTime ✓ Should return 400 when lastSyncDateTime is invalid validateDeleteCoordinateRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid ✓ Should return 400 when coordinateId is invalid validateDeleteCoordinatesRequest ✓ Should call next when request is valid with ids ✓ Should call next when coordinateIds is an empty array ✓ Should return 400 when projectId is invalid ✓ Should return 400 when coordinateIds is not an array validateUploadCoordinatesRequest ✓ Should call next when request is valid ✓ Should return 400 when projectId is invalid ✓ Should return 400 when no file is uploaded ✓ Should return 400 when the uploaded file is not a CSV Coordinate Service Tests generateCSVFileName ✓ Should generate a valid CSV file name ✓ Should replace non-alphanumeric characters with underscores ✓ Should leave alphanumeric name intact parseCoordinatesCsv ✓ Should parse CSV and return valid coordinates ✓ Should throw an error if CSV parsing fails ✓ Should throw an error if headers are invalid Project Devices Controller test Get project devices {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching project devices","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return the list of devices and status 200 when devices are found (default user) {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching tenant devices","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return all tenant devices when user has AdminForAllProject role (regardless of project assignment) ✓ Should return project devices when user mongoTenantId doesn't match project tenant (skips role checks) {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching ProjectDeviceManage devices","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return filtered devices when user has ProjectDeviceManage role {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching tenant devices","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return all tenant devices when user has both AdminForAllProject and ProjectDeviceManage roles (AdminForAllProject takes precedence) {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching tenant devices","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return all tenant devices when only getPermissionFromCacheOrIam returns true for AdminForAllProject (hasRole false) {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Fetching project devices","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error fetching devices: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:470:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:459:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Set Project Devices ✓ Should return 200 when devices are set successfully {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error setting devices: Devices are not assigned to a Tenant. Assign them to this tenant first.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Devices are not assigned to a Tenant. Assign them to this tenant first.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:512:91\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:504:86)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when devices are not assigned to a tenant {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error setting devices: Devices {device1, device2} do not belong to this project tenant. Assign them to this tenant first.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Devices {device1, device2} do not belong to this project tenant. Assign them to this tenant first.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:532:91\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:524:97)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when devices are not assigned to this project tenant {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error setting devices: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:552:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/devices/project.devices.controller.spec.ts:544:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectDevicesV1Handler","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Project Devices Delegation getHandler (registry) ✓ returns the default handler when no version is provided ✓ returns the v1 handler for the exact default version ✓ falls back to the default handler when a later version has no registered handler ✓ falls back to the default handler when a much later version has no registered handler ✓ falls back to the default handler when the version string is unrecognised ✓ DEFAULT_API_VERSION is 1.16.0 registerVersionHandler {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Registered handler for API version: v-test","source":"ProjectDevicesDelegation","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ allows registering and retrieving a new version handler by exact version {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Registered handler for API version: 3.0.0","source":"ProjectDevicesDelegation","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ falls back to the default handler when a version newer than a registered handler is requested controller dispatch by header {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Registered handler for API version: v-get","source":"ProjectDevicesDelegation","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ delegateGetProjectDevices uses the handler matching the request header {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Registered handler for API version: v-set","source":"ProjectDevicesDelegation","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ delegateSetProjectDevices uses the handler matching the request header ✓ falls back to the default (v1) handler when header is missing ✓ falls back to the default (v1) handler when a later version has no registered handler ✓ falls back to the default (v1) handler when header is an unrecognised string Project Devices Validator tests validateGetProjectDevicesRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when lastFetchedIndexId is invalid ✓ should return 400 when size is not a number ✓ should call next when query parameters are missing validateSetProjectDevicesRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should call next when body is an empty array {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Invalid request: Request body must be an array of device IDs.","source":"ProjectDevicesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when body is not an array Disciplines Controller test Create Discipline When created successfully ✓ Then it should return 200 with a success message When Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error creating discipline. Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:57:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:51:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DisciplinesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error creating discipline. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:78:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:72:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DisciplinesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 with an error message Get Disciplines When fetched successfully ✓ Then it should return 200 with a list of disciplines When Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error fetching disciplines. Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:121:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:116:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DisciplinesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error fetching disciplines. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:141:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/disciplines/disciplines.controller.spec.ts:136:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DisciplinesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 with an error message ElementsActivitiesCategoryMapping controller test Create ElementsActivitiesCategoryMapping tests When required parameters are missing from the request When an empty request with invalid projectId is posted {"0":"not a valid project id","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 {"0":"not a valid project id","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it logs warnings to the log When an empty request with projectId is posted {"0":"Payload is not valid","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 {"0":"Payload is not valid","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it logs warnings to the log When an empty array request with projectId is posted {"0":"Payload is not valid","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 {"0":"Payload is not valid","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it logs warnings to the log When an invalid request with invalid array and with projectId is posted {"0":"Payload is not valid","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create activity should return 400 {"0":"Payload is not valid","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it logs warnings to the log When required parameters are provided in the request And when DB is down {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have 500 status code {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid error in the response {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating ElementsMappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it logs warnings messages And project already exist in the DB ✓ It should return 201 ✓ And it should create activity mapping Get ElementsActivitiesCategoryMapping tests Given project with element mappings already exist in DB When Get request is made ✓ It should return 200 ✓ It should have valid response And DB is down {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while fetching elements mappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while fetching elements mappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have logged correct error messages Delete ElementsActivitiesCategoryMapping tests When project with element mappings already exist in DB When project with element mappings already exist in DB ✓ It should return 204 ✓ It should have called correct db method ✓ It should have called correct db method with correct parameter And DB is down {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while deleting ElementsMappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while deleting ElementsMappings Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:27:27)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.activities.controller.spec.ts:19:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ElementActivityMappings","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have logged correct error Element Activity Mappings Validator Tests validateGetElementsMappingsRequest ✓ should call next when request has no query params ✓ should call next when lastSyncDateTime and endSyncDateTime are valid ✓ should return 400 when projectId is invalid ✓ should return 400 when lastSyncDateTime is invalid ✓ should return 400 when endSyncDateTime is invalid Element Status Controller getElementStatus {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Successfully fetched model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return status 200 and element status when fetched successfully {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error fetching element status for ProjectId: test-project-id, ModelElementId: test-model-element-id Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:77:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:71:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return status 500 when an unexpected error occurs getElementStatusList ✓ should return status 200 and element statuses when fetched successfully ✓ should return status 200 and element statuses when fetched successfully with lastSyncDateTime ✓ should forward endSyncDateTime to the service when provided {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error fetching model element status list for ProjectId: test-project-id. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:195:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:190:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return status 500 when an unexpected error occurs updateElementStatus {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Updating model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id with status 'installed_accurately'.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Successfully updated model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id with status 'installed_accurately'.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return status 204 when status is updated successfully {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Updating model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id with status 'not_set'.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error updating model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:264:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:255:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when unexpected error occurs {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Updating model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id with status 'not_set'.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error updating model element status for ProjectId: test-project-id, ModelElementId: test-model-element-id Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:293:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/elements/elements.status.controller.spec.ts:284:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 when unexpected error occurs Post updateElementStatus file - should return status 201 when last chunk uploaded successfully - should return status 200 when one of the chunk uploaded successfully uploadElementStatusBatchFile - magic number validation {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Uploading ElementStatus file for project test-project-id, fileName = invalid.parquet, chunkIndex = 0, totalChunks = 1.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when file does not have PAR1 magic number as first chunk {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Uploading ElementStatus file for project test-project-id, fileName = valid.parquet, chunkIndex = 0, totalChunks = 1.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should pass validation when file has PAR1 magic number as first chunk {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Uploading ElementStatus file for project test-project-id, fileName = valid.parquet, chunkIndex = 1, totalChunks = 2.","source":"ElementStatusController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should skip magic number check for non-first chunks Element Status Validator Tests validateGetElementStatusRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when modelElementId is invalid validateGetElementStatusListRequest ✓ should call next when lastSyncDateTime and endSyncDateTime are valid ✓ should return 400 when lastSyncDateTime is invalid ✓ should return 400 when endSyncDateTime is invalid validateUpdateElementStatusRequest ✓ should update correctly when status is upper case ✓ should update correctly when status is lower case ✓ should return 400 when request body is empty ✓ should return 400 when status key is missing in request body ✓ should return 400 when status value is invalid ✓ should return 400 when projectId is invalid ✓ should return 400 when modelElementId is invalid validateStatusJsonPostRequest ✓ should validate correctly when correct payload is sent ✓ should validate correctly when status is lower case ✓ should return 400 when installationCheckDate is empty ✓ should return 400 when installationCheckDate is not provided ✓ should return 400 when request body is empty ✓ should return 400 when status key is missing in request body ✓ should return 400 when status value is invalid ✓ should return 400 when projectId is invalid ModelFolder controller test Create ModelFolder tests When required parameters are missing from the request When an empty request with invalid projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid project id","1":"not a valid folder name","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating a Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create folder should return 400 When an empty request with projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid folder name","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating a Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create folder should return 400 When an empty object request with projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid folder name","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating a Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create folder should return 400 When an invalid request with an invalid payload and with projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid folder name","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while creating a Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create folder should return 400 When required parameters are provided in the request And when DB is down {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Server error while creating a Folder Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:119:39)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:117:21)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:102:17)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:50:13)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:21:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have 500 status code {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Server error while creating a Folder Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:119:39)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:117:21)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:102:17)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:50:13)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:21:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid error in the response {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Server error while creating a Folder Forced Error","stack":"Error: Forced Error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:119:39)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:117:21)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:102:17)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:50:13)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at exports.describe (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/mocha.js:119:60)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:21:9)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should log error message And project already exist in the DB {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Created folder undefined for project 123 with parentFolderId undefined and folderName test-folder-name.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 201 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Create folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Created folder undefined for project 123 with parentFolderId undefined and folderName test-folder-name.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it should create a folder Rename ModelFolder tests When required parameters are missing from the request When an empty request with invalid projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid project id","1":"not a valid folder name","2":"not a valid folder id","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while renaming Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Rename folder should return 400 When an empty request with projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid folder name","1":"not a valid folder id","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while renaming Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Rename folder should return 400 When an empty object request with projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid folder name","1":"not a valid folder id","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while renaming Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Rename folder should return 400 When an invalid request with an invalid payload and with projectId is posted {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"0":"not a valid folder name","1":"not a valid folder id","level":"warn","timestamp":"2026-07-09 13:05:50.5050","message":"Error while renaming Folder","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Rename folder should return 400 When required parameters are provided in the request And when DB is down {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while renaming Folder Sinon-provided ","name":"","stack":"Error: Sinon-provided \n at Object.fake.exceptionCreator (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/default-behaviors.js:18:34)\n at Object.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/behavior.js:165:35)\n at functionStub (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/stub.js:44:43)\n at updateModelFolder.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy-invoke.js:53:47)\n at updateModelFolder (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy.js:285:26)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:7:1244\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:2:586)\n at Object.renameFolder (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:7:606)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:216:38\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:215:65)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have 500 status code {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while renaming Folder Sinon-provided ","name":"","stack":"Error: Sinon-provided \n at Object.fake.exceptionCreator (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/default-behaviors.js:18:34)\n at Object.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/behavior.js:165:35)\n at functionStub (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/stub.js:44:43)\n at updateModelFolder.invoke (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy-invoke.js:53:47)\n at updateModelFolder (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/sinon/lib/sinon/proxy.js:285:26)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:7:1244\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:2:1415\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:2:586)\n at Object.renameFolder (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/folders/folders.controller.ts:7:606)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:222:38\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:221:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have valid error in the response And db is working fine {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 204 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Rename folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ And it should create a folder Delete ModelFolder tests When valid delete req is made for empty folders {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 0 models and 0 child folders to delete from 2 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 204 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 0 models and 0 child folders to delete from 2 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have called getFolderContents for each folder {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 0 models and 0 child folders to delete from 2 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have called deleteModelFolder with root folders {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 0 models and 0 child folders to delete from 2 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should not call deleteModel when there are no models When deleting folders with child folders and models {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 1 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-1 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 204 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 1 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-1 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should get folder contents {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 1 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-1 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should delete all models first {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 1 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-1 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should delete child folders before root folders When deleting folders with nested child folders {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 0 models and 2 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should delete folders in correct order (deepest first) When deleting multiple folders with overlapping children {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 1 child folders to delete from 2 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-1 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should collect all models and folders from all root folders {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 1 child folders to delete from 2 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-1 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 child folders from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 2 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should delete child folders before root folders When model deletion fails {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 0 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error deleting model model-1: Model deletion failed","stack":"Error: Model deletion failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:426:51\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:412:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should continue deleting other models even if one fails {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Found 2 models and 0 child folders to delete from 1 root folder(s)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error deleting model model-1: Model deletion failed","stack":"Error: Model deletion failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:426:51\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:412:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted model model-2 from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Deleted 1 root folder(s) from project 123","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should still delete folders after model deletion errors When getFolderContents throws an error {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while deleting Folders Folder not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Folder not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:451:54\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:444:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 404 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Delete folder request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error while deleting Folders Folder not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Folder not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:451:54\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:444:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return error response Get all ModelFolders tests When valid get req is made {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get folders request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 200 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get folders request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have called correct db method {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get folders request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have called correct db method with correct parameter {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get folders request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have return data in correct format Get folder content test When valid get request is made {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 200 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return folder contents in correct format {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have called getFolderContents with correct parameters When folder is not found {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: ModelFolder with ModelFolderId folder-1 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelFolder with ModelFolderId folder-1 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:564:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:563:36)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 404 status code {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: ModelFolder with ModelFolderId folder-1 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelFolder with ModelFolderId folder-1 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:564:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:563:36)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return not found error response {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: ModelFolder with ModelFolderId folder-1 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelFolder with ModelFolderId folder-1 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:564:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:563:36)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should log the error When there is a database error {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: Error finding model folders","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error finding model folders\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:594:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:593:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 status code {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: Error finding model folders","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error finding model folders\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:594:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:593:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return database error response {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: Error finding model folders","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error finding model folders\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:594:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:593:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should log the error Get folder content (HMD) test When valid get request is made {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 200 {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return folder contents in correct format {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should have called getFolderContents with correct parameters When folder is not found {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: ModelFolder with ModelFolderId folder-1 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelFolder with ModelFolderId folder-1 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:662:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:661:36)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 404 status code {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: ModelFolder with ModelFolderId folder-1 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelFolder with ModelFolderId folder-1 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:662:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:661:36)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return not found error response {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: ModelFolder with ModelFolderId folder-1 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelFolder with ModelFolderId folder-1 not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:662:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:661:36)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should log the error When there is a database error {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: Error finding model folders","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error finding model folders\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:692:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:691:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return 500 status code {"level":"info","timestamp":"2026-07-09 13:05:50.5050","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:50.5050","message":"Error attempting to retrieve folder contents: Error finding model folders","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error finding model folders\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:692:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:691:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should return database error response {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Get Folder Contents request","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error attempting to retrieve folder contents: Error finding model folders","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error finding model folders\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:692:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:691:35)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ It should log the error Move ModelFolders tests When valid request is made {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received moveFolder request with 2 elements, to be moved to dest-folder-1.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Validating folder move is allowed.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 and move folders successfully When moveFolders throws a NotFoundError {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received moveFolder request with 2 elements, to be moved to dest-folder-1.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Validating folder move is allowed.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error moving ModelFolder Folder not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Folder not found\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:750:44)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 and an error message When moveFolders throws a DatabaseError {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received moveFolder request with 2 elements, to be moved to dest-folder-1.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Validating folder move is allowed.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error moving ModelFolder Database connection failed","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database connection failed\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:772:44)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 and an error message When moveFolders throws an unexpected error {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received moveFolder request with 2 elements, to be moved to dest-folder-1.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Validating folder move is allowed.","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error moving ModelFolder Unexpected error","stack":"Error: Unexpected error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/folders/folders.controller.spec.ts:795:44)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"Folder","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 and a generic error message Folders Validator tests validateGetFolderRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when folderId is invalid validatePutFolderRequest ✓ should call next when request is valid ✓ should return 400 when name is not provided ✓ should return 400 when projectId is invalid ✓ should return 400 when folderId is invalid validateCreateFolderRequest ✓ should call next when request is valid ✓ should return 400 when name is invalid ✓ should return 400 when projectId is invalid ✓ should return 400 when parentFolderId is invalid ✓ should call next when parentFolderId is valid validateMoveFoldersRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when parentFolderId is invalid and not 'NULL' ✓ should return 400 when any folderIds is invalid ✓ should return 400 when trying to move a folder into itself Issue Categories Controller tests Link Issue to Activity Categories {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 2 activity category mappings to issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully linked 2 activity category mappings to issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should successfully link activity categories and return 201 {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 1 activity category mappings to issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully linked 1 activity category mappings to issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should use default platform when not provided {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 1 activity category mappings to issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error linking activity categories to issues: The payload contains activity category ids that do not exist for the specified project id.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: The payload contains activity category ids that do not exist for the specified project id.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:137:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:122:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when service throws BadRequestError {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 1 activity category mappings to issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error linking activity categories to issues: Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:165:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:150:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Unlink Issue from Activity Categories {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 2 activity categories from issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully unlinked 2 activity categories from issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should successfully unlink activity categories and return 204 {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 1 activity categories from issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully unlinked 1 activity categories from issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should use default platform when not provided {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error unlinking activity categories from issue: Issue not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Issue not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:262:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:252:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when issue does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 1 activity categories from issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error unlinking activity categories from issue: Invalid activity category ID","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Invalid activity category ID\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:293:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:277:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when service throws BadRequestError {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 1 activity categories from issue 123e4567-e89b-12d3-a456-426614174001 in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error unlinking activity categories from issue: Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:323:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:307:93)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs during unlinking {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error unlinking activity categories from issue: Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:349:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/categories/issue.categories.controller.spec.ts:339:95)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCategoriesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs during issue check Issues Categories Validator Tests validateLinkIssuesToActivityCategories ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when activityCategories is empty array ✓ should return 400 when activityCategories is not an array ✓ should return 400 when activityCategoryId is invalid ✓ should return 400 when categoryTypeId is invalid ✓ should return 400 when multiple categories have the same category type ✓ should return 400 when activityCategoryId is missing ✓ should return 400 when categoryTypeId is missing validateUnlinkIssueFromActivityCategories ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when activityCategories is empty IssueFileReferencesController linkIssueToFileReference {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 2 files to issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully linked 2 files to issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should link videos to issue and return 200 status {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 2 files to issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error linking file references to issue: Test error","stack":"Error: Test error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:65:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:64:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 3 files to issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error linking file references to issue: Not all provided file references belong to the issue","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: Not all provided file references belong to the issue\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.ts:7:131\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.ts:2:4071)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when not all provided file reference IDs exist in the database unlinkIssueFromFileReference {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 2 files from issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully unlinked 2 files from issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should unlink videos from issue and return 204 status {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 2 files from issue testIssueId in project testProjectId.","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error unlinking file references from issue: Test error","stack":"Error: Test error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:183:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/fileReferences/issues.fileReferences.controller.spec.ts:182:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueFileReferenceController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response IssueFileReferencesValidator validateLinkOrUnlinkIssueToFileRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when fileReferenceIds is not an array ✓ should return 400 when fileReferenceIds array is empty ✓ should return 400 when fileReferenceIds contains invalid UUIDs Issue Comments Controller Tests getIssueComments {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching comments for ProjectId: test-project-id, IssueId: test-issue-id (lastFetchedIndexId: 0, size: 10000)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return comments and status 200 when comments are fetched successfully {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching comments for ProjectId: test-project-id, IssueId: test-issue-id (lastFetchedIndexId: 0, size: 10000)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching comments for ProjectId: test-project-id, IssueId: test-issue-id No comments found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No comments found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:101:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:93:71)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when no comments are found {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching comments for ProjectId: test-project-id, IssueId: test-issue-id (lastFetchedIndexId: 0, size: 10000)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching comments for ProjectId: test-project-id, IssueId: test-issue-id Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:122:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:114:66)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 for unexpected errors insertIssueComment {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Inserting comments for ProjectId: test-project-id, IssueId: test-issue-id","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 201 with the inserted comment DTO when the comment is inserted successfully {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Inserting comments for ProjectId: test-project-id, IssueId: non-existent-issue-id","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error inserting comments for ProjectId: test-project-id, IssueId: non-existent-issue-id Specified IssueId not found, cannot insert comment.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Specified IssueId not found, cannot insert comment.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:199:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:190:84)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when the service throws a NotFoundError {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Inserting comments for ProjectId: test-project-id, IssueId: test-issue-id","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error inserting comments for ProjectId: test-project-id, IssueId: test-issue-id Invalid request body","name":"InvalidRequest","statusCode":400,"stack":"InvalidRequest: Invalid request body\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:225:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:218:69)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 for invalid request data {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Inserting comments for ProjectId: test-project-id, IssueId: test-issue-id","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error inserting comments for ProjectId: test-project-id, IssueId: test-issue-id Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:253:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.comments.controller.spec.ts:244:66)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueCommentsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 for unexpected errors IssueHistoryController Tests getIssueHistory {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return status 200 when the issue history when request is valid {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return status 200 when only mapping updates are present {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 when only legacy history and initial API 2 state is available {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 when a combination of API 1 and API 2 history is present {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching comments for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000 Project or Issue not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project or Issue not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:567:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:558:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when the project or issue is not found {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching comments for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000 Unexpected database error","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Unexpected database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:588:29\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issue.history.controller.spec.ts:580:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 for unexpected database errors {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 when mapping history has multiple entries {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ resolves actor names and assignee old/new names from the IAM cache {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ emits severity changes as resolved names under fieldName 'issueSeverity' {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching history for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, IssueId: 123e4567-e89b-12d3-a456-426614174000","source":"IssueHistoryController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ emits activityCategories as typed objects carrying typeId/typeName Issue History Validator Tests validateGetIssueHistoryRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when both projectId and issueId are invalid ✓ should return 400 when projectId is missing ✓ should return 400 when issueId is missing ✓ should return 400 when both projectId and issueId are missing Issue Comment Validator Tests validateGetIssueCommentRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid validateInsertIssueCommentRequest ✓ should call next when request is valid ✓ should return 400 when comments is not a string ✓ should return 400 when body is missing ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid Issues Controller tests Create Issue {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Issue successfully created.","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 201 when issue is created successfully {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Issue successfully created.","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should set reporterEmail from logged-in user when omitted from request body {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Issue successfully created.","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should keep reporterEmail from request body when provided {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. No project found for ProjectId.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No project found for ProjectId.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:137:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:127:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when project is not found {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Issue Status with id 'invalid-status-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Status with id 'invalid-status-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:161:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:150:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Status does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Issue Location with id 'invalid-location-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Location with id 'invalid-location-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:185:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:174:79)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Location does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Issue Type with id 'invalid-type-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Type with id 'invalid-type-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:209:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:198:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Type does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Model Element with id 'invalid-element-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Model Element with id 'invalid-element-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:233:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:222:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Model Element does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Model Room with id 'invalid-room-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Model Room with id 'invalid-room-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:257:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:246:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Model Room does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Issue Stage with id 'invalid-stage-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Stage with id 'invalid-stage-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:281:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:270:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Stage does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Issue Outcome with id 'invalid-outcome-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Outcome with id 'invalid-outcome-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:305:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:294:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Outcome does not exist {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to create Issue for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error creating Issue. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:328:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:318:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Issue {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received request for simple issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Returning simple issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 200 and simple issue when request is valid {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received request for detailed issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get detailed Issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Basic issue data successfully retrieved","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Activity categories successfully retrieved","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Returning detailed issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 200 and detailed issue when request is valid and simple is false {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received request for detailed issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get detailed Issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Basic issue data successfully retrieved","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Activity categories successfully retrieved","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Returning detailed issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 200 and detailed issue when request is valid and simple is not set {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received request for detailed issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get detailed Issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error retrieving Issue. Issue not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Issue not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:445:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:438:68)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when issue is not found {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Received request for detailed issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get detailed Issue: 123e4567-e89b-12d3-a456-426614174000 for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error retrieving Issue. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:465:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:458:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Issue List {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching issues list for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Returning 0 issues for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getIssueList with lastSyncDateTime when provided {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Fetching issues list for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Returning 0 issues for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getDetailedIssueList with lastSyncDateTime when provided and simple is false {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Returning 0 issues for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getIssueList without lastSyncDateTime when not provided Update Issue {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Issue updated. Issue: [object Object]","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 200 when issue is updated successfully {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. No project found for ProjectId.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No project found for ProjectId.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:623:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:612:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when project is not found {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Issue with IssueId: 123e4567-e89b-12d3-a456-426614174000 and ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Issue with IssueId: 123e4567-e89b-12d3-a456-426614174000 and ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:647:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:636:68)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when issue is not found {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Issue Status with id 'invalid-status-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Status with id 'invalid-status-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:672:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:660:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Status does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Issue Location with id 'invalid-location-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Location with id 'invalid-location-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:697:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:685:79)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Location does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Issue Type with id 'invalid-type-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Type with id 'invalid-type-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:722:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:710:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Type does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Model Element with id 'invalid-element-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Model Element with id 'invalid-element-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:747:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:735:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Model Element does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Model Room with id 'invalid-room-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Model Room with id 'invalid-room-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:772:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:760:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Model Room does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Issue Stage with id 'invalid-stage-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Stage with id 'invalid-stage-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:797:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:785:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Stage does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Issue Outcome with id 'invalid-outcome-id' does not exist.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: Issue Outcome with id 'invalid-outcome-id' does not exist.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:822:37\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:810:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when Issue Outcome does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating Issue. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:846:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:835:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get distinct types from Issue {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get distinct Issue types for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return status 200 when successfully get distinct issueType from issues {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get distinct Issue types for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching types from Issues. Project not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:1071:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:1065:70)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 when project is not found {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Request to get distinct Issue types for project: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching types from Issues. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:1090:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/issues.controller.spec.ts:1084:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssuesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Issues Validator tests validateCreateIssueRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when title is missing ✓ should return 400 when title is not a string ✓ should return 400 when title is a blank string ✓ should return 400 when modelId is not an array ✓ should return 400 when modelId is not an array of strings ✓ should return 400 when modelElementId is not a valid uuid {"level":"warn","timestamp":"2026-07-09 13:05:51.5151","message":"Validation failed: customAttributes must be an array of objects.","source":"IssuesValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when customAttributes is not an array of objects modelRoomId validation ✓ should call next when modelRoomId is a valid UUID ✓ should call next when modelRoomId is a valid UUID (different format) ✓ should call next when modelRoomId is undefined (optional field) ✓ should call next when modelRoomId is null (optional field) ✓ should return 400 when modelRoomId is empty string (not allowed when provided) ✓ should call next when modelRoomId is not provided (optional field) ✓ should return 400 when modelRoomId is an invalid UUID ✓ should return 400 when modelRoomId is not a string ✓ should return 400 when modelRoomId is an empty object ✓ should return 400 when modelRoomId is an array ✓ should return 400 when modelRoomId is a boolean validateGetIssueRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when issueId is missing ✓ should return 400 when projectId is missing validateGetIssueListRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when lastFetchedIndexId is invalid ✓ should return 400 when size is invalid ✓ should return 400 when size is not positive number ✓ should call next() when request is valid with projectId and lastSyncDateTime ✓ should return 400 when lastSyncDateTime is invalid validateUpdateIssueRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when issueId is missing ✓ should return 400 when projectId is missing ✓ should return 400 when body is an empty object ✓ should return 400 when customAttributes is not an array of objects validateDeleteIssueRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when issueId is missing ✓ should return 400 when projectId is missing validateGetIssueTypesRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when projectId is missing IssueModelsController linkIssueToModel {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 2 models to issue testIssueId in project testProjectId.","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully linked 2 files to issue testIssueId in project testProjectId.","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should link models to issue and return 201 status {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to link 2 models to issue testIssueId in project testProjectId.","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error linking models to issue: Test error","stack":"Error: Test error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:49:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:48:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response unlinkIssueFromModel {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 2 models from issue testIssueId in project testProjectId.","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Successfully unlinked 2 models from issue testIssueId in project testProjectId.","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should unlink models from issue and return 204 status {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Attempting to unlink 2 models from issue testIssueId in project testProjectId.","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error unlinking models from issue: Test error","stack":"Error: Test error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:76:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/issues/models/issues.models.controller.spec.ts:75:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"IssueModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors and return error response IssueModelsValidator validateLinkOrUnlinkIssueToModel ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when issueId is invalid ✓ should return 400 when modelIds is not an array ✓ should return 400 when modelIds array is empty ✓ should return 400 when modelIds contains invalid UUIDs Marker Controller test Get project marker list ✓ Should return the list of markers and status 200 when found {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching marker list. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:91:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:81:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get project marker by id ✓ Should return the marker and status 200 when found {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching marker. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:149:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:142:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Update project marker by udi {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Updating marker by UDI udi-1 for project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Marker Udi: udi-1 is in PENDING status.","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 422 when marker is in PENDING state {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Updating marker by UDI udi-1 for project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Marker Udi: udi-1 already assigned to another project.","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 422 when marker is assigned to another project {"level":"info","timestamp":"2026-07-09 13:05:51.5151","message":"Updating marker by UDI udi-1 for project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error while updating marker error","stack":"Error: error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:264:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/markers/markers.controller.spec.ts:239:65)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"MarkersController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when db throws error Marker Validator Tests validateGetMarkerRequest ✓ should return 400 when request invalid id is provided ✓ should return 400 when request invalid project id is provided ✓ should return 200 when request is valid validateUpdateMarkerRequest ✓ should return 400 when request doesn't have alignmentMethod ✓ should return 400 when request doesn't have valid alignmentMethod ✓ should return 400 when request doesn't have markerCorners ✓ should return 400 when request have an empty markerCorners ✓ should return 400 when request have invalid markerCorners ✓ should return 200 when valid request is provided Model Versions Controller test Get Model version When Model version exists for Project ✓ Then it should return 200 with the model version When request has ADMIN_API authority and sourceModelFiles=true ✓ Then it should call getModelVersionForAdmin and return 200 with source model file details When request has ADMIN_API authority but sourceModelFiles is not set ✓ Then it should call getModelVersion and not return source model file details When Model version does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error getting modelVersion with ID non-existent-version-id. ModelVersion not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelVersion not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:160:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:150:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error getting modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Database error!","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error!\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:185:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:175:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error getting modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:212:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:202:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Get Model version artefacts When Model version exists for Project ✓ Then it should return 200 with the model version When Model version does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error getting modelVersionArtefacts with ID non-existent-version-id. ModelVersion not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelVersion not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:266:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:257:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error getting modelVersionArtefacts with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Database error!","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error!\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:289:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:281:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error getting modelVersionArtefacts with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:314:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:306:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Delete model version When Model version exists for Project ✓ Then Model version should be deleted and return 200 When trying to delete the current version of the model {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error deleting modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Cannot delete the current version of the model","name":"CurrentVersionError","statusCode":400,"stack":"CurrentVersionError: Cannot delete the current version of the model\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:359:45\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:350:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 400 When Model or Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error deleting modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Model or Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Model or Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:388:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:379:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error deleting modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:412:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:403:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Update model version When Model version exists and is updated successfully ✓ Then it should return 204 with the updated model version When Model version does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating modelVersion with ID non-existent-version-id. ModelVersion not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: ModelVersion not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:463:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:451:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Database error!","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Database error!\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:490:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:478:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating modelVersion with ID 7b8717e3-d425-485f-8873-218be0f26fe2. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:519:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/model.versions.controller.spec.ts:507:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelVersionsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Model Controller test Get model list When models exist for Project ✓ Then it should return the list of models and return 200 When request has ADMIN_API authority and sourceModelFiles=true ✓ Then it should call getModelListForAdmin and return 200 with source model file details When request has ADMIN_API authority but sourceModelFiles is not set ✓ Then it should call getModelList and not return source model file details When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching model list. The server does not support SSL connections","stack":"Error: The server does not support SSL connections\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:219:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:210:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Move model When Model exists for Project ✓ Then Model should move and return 200 When Model already in specified location ✓ Then it should return 200 When Model or Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error moving model Model or Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Model or Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:289:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:278:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error moving model Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:315:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:304:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Get Model by id When Model exists ✓ Then Model should be returned with 200 When Model does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching model by ID. Model not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Model not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:356:79\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:354:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error fetching model by ID. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:372:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:370:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Delete model When Model exists for Project ✓ Then Model should be deleted and return 204 ✓ Then it should call deleteModel with removeActivityLinks=true when query param is 'true' ✓ Then it should call deleteModel with removeActivityLinks=false when query param is 'false' When Model or Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error deleting model. Model or Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Model or Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:455:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:447:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error deleting model. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:478:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:470:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Update model When Model exists for Project ✓ Then Model should be updated and return 204 ✓ Then Model should be updated with partial fields and return 204 When Model or Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:51.5151","message":"Error updating model. Model or Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Model or Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:558:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:547:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error updating model. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:584:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:573:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Billy search query When valid request is posted {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Sending request to billy search service","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then Model should be returned with 200 Get Artefacts When Project found without includeModels parameter {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting Project artefacts for ProjectId test-project-id with includeModels: false","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then should return 200 with basic artefacts When Project found with includeModels=true parameter {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting Project artefacts for ProjectId test-project-id with includeModels: true","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then should return 200 with artefacts including models When Project not found {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting Project artefacts for ProjectId test-project-id with includeModels: false","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting artefacts for ProjectId: test-project-id Project for 'test-project-id' not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project for 'test-project-id' not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:682:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:677:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 When unexpected error {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting Project artefacts for ProjectId test-project-id with includeModels: false","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting artefacts for ProjectId: test-project-id Test Error","stack":"Error: Test Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:701:38\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/models/models.controller.spec.ts:696:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ModelsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 Models Validator tests validateGetModelListRequest ✓ should call next when request is valid ✓ should call next when request is valid with includeDeleted=true ✓ should call next when request is valid with includeDeleted=false ✓ should call next when includeDeleted is not provided ✓ should return 400 when projectId is invalid ✓ should return 400 when paging parameters are invalid ✓ should return 400 when includeDeleted is invalid validateGetModelRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when modelId is invalid validateMoveModelRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when modelId is invalid ✓ should return 400 when parentModelFolderId is invalid validateDeleteModelRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when modelId is invalid ✓ should call next when removeActivityLinks=true ✓ should call next when removeActivityLinks=false ✓ should return 400 when removeActivityLinks is not a valid boolean validateGetModelVersionRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when versionId is invalid validateDeleteModelVersionRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when versionId is invalid validatePatchModelVersionRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Validation failed: versionId is required and must be a valid UUID.","source":"ModelsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when versionId is invalid ✓ should return 400 when no valid fields are provided ✓ should return 406 when a field is not allowed ✓ should return 406 when a field is of incorrect type ✓ should call next when request is valid with isCurrentVersion boolean validateTranslateQueryRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when modelId is invalid ✓ should return 422 when user_query is missing ✓ should return 422 when user_query is empty string ✓ should return 422 when user_query is only whitespace ✓ should return 422 when user_query is not a string validateGetProjectArtefactsRequest ✓ should call next when request is valid ✓ should call next when request is valid with includeModels=true ✓ should call next when request is valid with includeModels=false ✓ should default includeModels to false when not provided ✓ should return 400 when projectId is invalid ✓ should return 400 when includeModels is invalid validateUpdateModelRequest ✓ should call next when request is valid with all fields ✓ should call next when request is valid with partial fields ✓ should call next when request is valid with null/undefined values ✓ should return 400 when projectId is invalid ✓ should return 400 when modelId is invalid ✓ should return 400 when no valid fields are provided ✓ should return 406 when a field is not allowed ✓ should return 406 when a field is of incorrect type ModelGroup request validator test Test validate request When request doesn't have projectId ✓ It should fail validation When request doesn't have groupName ✓ It should fail validation When request has projectId and groupName ✓ It should pass validation Test rename validate request When request doesn't have projectId ✓ It should fail validation When request doesn't have groupName ✓ It should fail validation When request doesn't have groupId ✓ It should fail validation When request has projectId, groupId and groupName ✓ It should pass validation Test validate Deleterequest When request doesn't have projectId ✓ It should fail validation When request doesn't have groupIds ✓ It should fail validation When request has projectId and groupIds ✓ It should pass validation ProjectFiles Controller unit tests getFile ✓ should return 200 with file details and a signed download URL {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching project file. File with id '8b141d85-3305-4bdd-b802-e83639c260e8' not found in project '443b4964-09df-4f86-9e98-7bec5a9fcdab'.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: File with id '8b141d85-3305-4bdd-b802-e83639c260e8' not found in project '443b4964-09df-4f86-9e98-7bec5a9fcdab'.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:90:11\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:84:63)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when file is not found {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching project file. DB failure","stack":"Error: DB failure\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:103:53\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:100:60)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error uploadFile {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 1 of 1 for fileReferenceId: d07a2fc1-85ee-44ee-a6e0-c3eed098581b, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 201 with fileReferenceId on single-chunk upload {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 2 of 3 for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with fileReferenceId on intermediate chunk {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 1 of 2 for fileReferenceId: e10694e0-e1cf-475a-9cef-9af0785611c6, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should create DB record only on first chunk {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 2 of 2 for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should not create DB record on non-first chunks {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 2 of 3 for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should pass isFirstChunk=false for subsequent chunks and complete successfully when prior hash is missing {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 2 of 2 for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should store null fileHash when prior chunk hash was missing (final chunk) ✓ should return 400 when no file is provided {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading project file chunk 1 of 1 for fileReferenceId: 32ffa156-d141-442e-b1df-c9307b5bc8c5, projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error uploading project file. Azure storage unavailable","stack":"Error: Azure storage unavailable\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:346:18\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projectfiles/projectfiles.controller.spec.ts:332:63)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectFilesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on blob upload failure Project Controller test Delete project When Project exists ✓ Then Project should be deleted and return 200 When Project does not exist {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error deleting project. Project not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:109:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:102:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error deleting project. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:131:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:124:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 getMongoTenantId When no row corresponding to mongoProjectId is found {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting Tenant Id. No row corresponding to mongoProjectId 123 found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No row corresponding to mongoProjectId 123 found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/projects.controller.ts:2:8973\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/projects.controller.ts:2:4071)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When MongoTenantId is found ✓ Then it should return 200 When an error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting Tenant Id. Database error","stack":"Error: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:180:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:178:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 GET project parameters When project exist with no parameters ✓ Then it should return empty list When project doesn't exist {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting parameters Project with projectId: 123 not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project with projectId: 123 not found.\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:210:33)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:209:9)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:196:5)\n at Object.create (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/common.js:148:19)\n at context.describe.context.context (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/interfaces/bdd.js:42:27)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:35:1)\n at Module._compile (node:internal/modules/cjs/loader:1854:14)\n at Module.replacementCompile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:60:13)\n at Module.m._compile (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1618:23)\n at module.exports (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/default-require-extensions/js.js:7:9)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4\n at require.extensions. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/ts-node/src/index.ts:1621:12)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/append-transform/index.js:64:4)\n at Module.load (node:internal/modules/cjs/loader:1577:32)\n at Module._load (node:internal/modules/cjs/loader:1379:12)\n at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)\n at Module.require (node:internal/modules/cjs/loader:1600:12)\n at require (node:internal/modules/helpers:153:16)\n at Object.exports.requireOrImport (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:42:12)\n at Object.exports.loadFilesAsync (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/esm-utils.js:55:34)\n at async singleRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run-helpers.js:125:3)\n at async Object.exports.handler (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/cli/run.js:362:5)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 Get project locations When project locations exist {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching locations for project valid-project-id.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved locations.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with the locations When no project locations exist {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching locations for project valid-project-id.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching locations for project. Project with projectId: valid-project-id not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project with projectId: valid-project-id not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:258:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:256:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching locations for project valid-project-id.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching locations for project. Database error","stack":"Error: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:276:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:274:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Get CDE project status When project CDE status exists {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching cde status of project valid-project-id.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved status.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with the status When project CDE status does not exist {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching cde status of project valid-project-id.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved status.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with NOT_LINKED When an unexpected error occurs {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching cde status of project valid-project-id.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching cde status for project. Database error","stack":"Error: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:341:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:339:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Delete Tenant When no row corresponding to mongoTenanId is found {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Received request to delete projects in tenant with TenantId: 123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully deleted projects in tenant with TenantId: 123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 204 {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Received request to delete projects in tenant with TenantId: 123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error deleting Project(s). Database error","stack":"Error: Database error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:371:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:369:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Received request to delete projects in tenant with TenantId: 123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error deleting Project(s). No project found for mongoTenantId: 123.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No project found for mongoTenantId: 123.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:382:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:380:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 GET user projects When IAM is down {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching User Projects from IAM","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"iamProjects.forEach is not a function","stack":"TypeError: iamProjects.forEach is not a function\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/projects.controller.ts:5:325)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/projects.controller.ts:2:4071)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)","name":"TypeError","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 When IAM is up and running And Projects exist in the DB {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching User Projects from IAM","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching Projects from 1 MongoProjectIds","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Retrieved information for 1/1 projects from Postgres.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Retrieved information for 1/1 projects.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with projects from DB And Projects do not exist in the DB {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching User Projects from IAM","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching Projects from 1 MongoProjectIds","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Retrieved information for 0/1 projects from Postgres.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"unmapped projects from IAM.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Retrieved information for 1/1 projects.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with IAM projects converted to Project format And no projects found in IAM {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching User Projects from IAM","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"No projects found for user Unknown in MongoDB.","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with empty array Get Project by MongoProjectId When Project found ✓ Then should return 200 When Project not found {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting project by MongoProjectId mongo-project-id: Project for 'mongo-project-id' not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project for 'mongo-project-id' not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:532:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:530:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 When more than 1 project returned {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting project by MongoProjectId mongo-project-id: More than 1 Project record found for MongoProjectId 'mongo-project-id'","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: More than 1 Project record found for MongoProjectId 'mongo-project-id'\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:549:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:547:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 409 When unexpected error {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting project by MongoProjectId mongo-project-id: Test Error","stack":"Error: Test Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:568:61\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:566:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 Get Project by ProjectId When Project found ✓ Then should return 200 When Project not found {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting project by ProjectId test-project-id: Project for 'test-project-id' not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Project for 'test-project-id' not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:603:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:601:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 404 When unexpected error {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting project by ProjectId test-project-id: Test Error","stack":"Error: Test Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:620:56\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:618:48)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 GIVEN valid POST request WHEN project exist in the DB ✓ THEN it should not create new Project and return 200 WHEN project exist in the DB ✓ THEN it should not create new Project and return 200 WHEN DB throws error while fetching details {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error occurred while fetching project details for mongoProjectId 1 ForcedError","stack":"Error: ForcedError\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:734:37)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should not create project and return 500 WHEN project doesn't exist in the DB {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should create project and return 201 {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should populate Default discipline When all parameters are provided in the request And project exist in the DB ✓ It should not create Project should return 200 And project doesn't exist in the DB {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Create Project should return 201 WHEN project is created with file upload {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for project-id-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Saving uploaded file as photo for project project-id-123: test-photo.png, size: 1000 bytes","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully saved uploaded file as photo for project project-id-123 with fileReferenceId 65a85d3e-eeb3-4dfa-9a8e-4a4a56281088","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Photo saved with blob storage path: local-azurite-container/RawData/photo/ProjectId=project-id-123/file-ref-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Updating project project-id-123 iconUrl. ProjectId=project-id-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully updated project project-id-123 iconUrl with blob storage path: local-azurite-container/RawData/photo/ProjectId=project-id-123/file-ref-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should save file as photo and update project iconUrl {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId 1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for project-id-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Saving uploaded file as photo for project project-id-123: test-photo.png, size: 1000 bytes","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully saved uploaded file as photo for project project-id-123 with fileReferenceId 95592710-bb98-49b5-a1db-e699364eb04d","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Photo saved with blob storage path: local-azurite-container/RawData/photo/ProjectId=project-id-123/file-ref-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Updating project project-id-123 iconUrl. ProjectId=project-id-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error updating project iconUrl for project project-id-123: Update failed","stack":"Error: Update failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:961:43\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:952:79)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should continue even if iconUrl update fails WHEN createV2Project is called with file upload {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new project with name: V2 Test Project","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Attaching project in IAM for project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Saving uploaded file as photo for project project-uuid-123: test-photo.png, size: 1000 bytes","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully saved uploaded file as photo for project project-uuid-123 with fileReferenceId 6b62a9e7-0b0f-49d4-9897-beb0f6c01bf0","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Photo saved with blob storage path: local-azurite-container/RawData/photo/ProjectId=project-uuid-123/file-ref-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Updating project project-uuid-123 iconUrl. ProjectUuid=project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully updated project project-uuid-123 iconUrl with blob storage path: local-azurite-container/RawData/photo/ProjectId=project-uuid-123/file-ref-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should save file as photo and update project iconUrl {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new project with name: V2 Test Project","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Attaching project in IAM for project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Saving uploaded file as photo for project project-uuid-123: test-photo.png, size: 1000 bytes","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully saved uploaded file as photo for project project-uuid-123 with fileReferenceId 817fe446-b334-45dc-b3b3-dcae203da786","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Photo saved with blob storage path: local-azurite-container/RawData/photo/ProjectId=project-uuid-123/file-ref-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Updating project project-uuid-123 iconUrl. ProjectUuid=project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error updating project iconUrl for project project-uuid-123: Update failed","stack":"Error: Update failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:1059:43\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/projects.controller.spec.ts:1050:79)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should continue even if iconUrl update fails {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new project with name: V2 Test Project","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Attaching project in IAM for project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for project-uuid-123","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should work without file upload Geocoding integration in project handlers updateProject {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ calls forwardGeocode when address fields are present {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes resolved lat/long/region to updateProjectById {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes contractorId to updateProjectById {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes null lat/long when geocoding returns null {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ does NOT call forwardGeocode when no address fields are in the body {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ returns 200 on success createProject geocoding {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId mongo-1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId mongo-1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for new-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes geocoded lat/long and region when address is provided {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId mongo-1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId mongo-1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for new-id","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes contractorId to createMongoCompatibleProject createV2Project geocoding {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new project with name: London Project","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Attaching project in IAM for geo-project-uuid","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for geo-project-uuid","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes geocoded lat/long and region when address is provided getProjectsByMongoIds {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting projects by MongoProjectIds","count":2,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved projects by MongoProjectIds","requested":2,"found":2,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with projects when mongoProjectIds are found {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting projects by MongoProjectIds","count":1,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved projects by MongoProjectIds","requested":1,"found":0,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with empty array when no projects are found {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting projects by MongoProjectIds","count":1,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved projects by MongoProjectIds","requested":1,"found":1,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with single project when one mongoProjectId is provided {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting projects by MongoProjectIds","count":3,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved projects by MongoProjectIds","requested":3,"found":1,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 200 with partial results when only some mongoProjectIds are found {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting projects by MongoProjectIds","count":1,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while getting projects by MongoProjectIds","error":"Database connection failed","count":1,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle errors from service layer {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Getting projects by MongoProjectIds","count":1000,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Successfully retrieved projects by MongoProjectIds","requested":1000,"found":1000,"source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle large batch of 1000 mongoProjectIds enableAI field updateProject {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes enableAI=true to updateProjectById when provided in body {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes enableAI=false to updateProjectById when false provided {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Progress weighting: undefined","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes undefined for enableAI when not in body createProject {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Project doesn't exist with mongoProjectId mongo-1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating new mongo compatible project for mongoProjectId mongo-1","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Creating default categories for new-proj","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes enableAI=true to createMongoCompatibleProject when provided Project Upload File Controller GIVEN a valid POST request WHEN the file is not a chunk {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading file for projectID: 123, entityType: Models, userFileId: 123 by user: Unknown","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should upload file, return 201 (Created) AND set the status to queued WHEN the file is a chunk AND it is the first chunk {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading file for projectID: 123, entityType: Models, userFileId: 123 by user: Unknown","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should upload the chunk, create the user file and return 200 (OK) AND it is not the first or last chunk {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading file for projectID: 123, entityType: Models, userFileId: 123 by user: Unknown","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should upload the chunk, return 200 (OK) AND not set the status to queued AND it is the last chunk {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading file for projectID: 123, entityType: Models, userFileId: 123 by user: Unknown","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN it should upload the chunk, return 201 (Created) AND set the status to queued WHEN the entity type is Models {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading file for projectID: 123, entityType: Models, userFileId: 123 by user: Unknown","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN the destination should contain Models' WHEN the entity type is Schedules {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Uploading file for projectID: 123, entityType: Schedules, userFileId: 123 by user: Unknown","source":"ProjectsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ THEN the destination should contain Schedules' Projects Validator tests validateUploadFileRequest ✓ should not return 400 when request is valid for Models ✓ should return 400 when projectId is invalid ✓ should return 400 when no file is provided ✓ should return 400 when mongoModelId is invalid ✓ should return 400 when mongoModelDetailId is invalid (wrong length) ✓ should return 400 when mongoModelDetailId is invalid ✓ should return 400 when invalid ModelId is provided ✓ should return 400 when invalid modelFolderId is provided ✓ should return 400 when invalid ignoreTrueNorth is provided ✓ should return 400 when invalid doubleSidedGeometry is provided ✓ should return 400 when invalid triangulationQuality is provided ✓ should not return 400 when request is valid for Schedules validate create project request ✓ should return 400 when mongoProjectId is missing ✓ should return 400 when name is missing ✓ should return 400 when country is missing ✓ should call next when all required fields are present ✓ should return 400 when contractorId is not a string ✓ should return 400 when invalid buildType is provided ✓ should return 400 when invalid progressWeighting is provided ✓ should call next when valid buildType and progressWeighting are provided ✓ should return 400 when invalid isPortfolioEnabled is provided ✓ should call next when valid buildType, progressWeighting and isPortfolioEnabled are provided ✓ should return 400 when invalid currencyId is provided ✓ should call next when valid currencyId (UUID) is provided ✓ should call next when enableAI=true is provided ✓ should call next when enableAI=false is provided ✓ should return 400 when invalid enableAI string is provided validateV2CreateProjectRequest ✓ should return 400 when name is missing ✓ should return 400 when country is missing ✓ should return 400 when timezone is missing ✓ should return 400 when companyType is missing ✓ should return 400 when invalid companyType is provided ✓ should return 400 when invalid autodeskCloudHubId is provided ✓ should return 400 when invalid buildType is provided ✓ should return 400 when invalid progressWeighting is provided ✓ should call next when all required fields are present ✓ should call next when valid autodeskCloudHubId is provided ✓ should call next when valid buildType and progressWeighting are provided ✓ should call next when companyType is OWNER ✓ should call next when companyType is MAIN_CONTRACTOR ✓ should call next when companyType is SUBCONTRACTOR ✓ should return 400 when invalid currencyId is provided ✓ should call next when valid currencyId (UUID) is provided ✓ should return 400 when contractorId is not a string ✓ should call next when enableAI=true is provided ✓ should call next when enableAI=false is provided ✓ should return 400 when invalid enableAI string is provided validateUpdateProjectRequest ✓ should call next when valid projectId and optional progressWeighting are provided ✓ should return 400 when contractorId is not a string ✓ should call next when valid projectId and isPortfolioEnabled true are provided ✓ should call next when valid projectId and isPortfolioEnabled false are provided ✓ should return 400 when projectId is invalid ✓ should return 400 when invalid progressWeighting is provided ✓ should return 400 when invalid isPortfolioEnabled is provided ✓ should call next when enableAI=true is provided ✓ should call next when enableAI=false is provided ✓ should return 400 when invalid enableAI string is provided validateUpdateProjectBasePointRequest ✓ should call next when all required fields are present and numeric ✓ should return 400 when projectId is invalid ✓ should return 400 when northing is missing ✓ should return 400 when easting is missing ✓ should return 400 when elevation is missing ✓ should return 400 when trueNorthAngle is missing ✓ should return 400 when any value is not a number validateGetProjectsByMongoIdsRequest {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call next when mongoProjectIds is a valid array with one item {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call next when mongoProjectIds is a valid array with multiple items {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call next when mongoProjectIds has exactly 1000 items {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds is missing {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds is undefined {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds is null {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds is not an array {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds is an object {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds is an empty array {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds exceeds 1000 items {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Validating mongoProjectIds array","source":"ProjectsValidator","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 400 when mongoProjectIds has 5000 items Rooms Capture Points Controller tests Create Capture Points ✓ Should return 201 when capture points are created successfully {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error creating Capture Points: Internal Server Error","stack":"Error: Internal Server Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:81:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:63:84)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when service throws an unexpected error Get Capture Points ✓ Should return the list of capture points and status 200 when capture points are found {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching Capture Points: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:159:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:148:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Update Capture Points ✓ Should return 201 when capture point is updated successfully {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error updating Capture Point: Internal Server Error","stack":"Error: Internal Server Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:228:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:212:84)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when service throws an unexpected error {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error updating Capture Point: ModelRoomId does not exist in the project.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: ModelRoomId does not exist in the project.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:260:24\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:243:87)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when update service throws BadRequestError Patch Capture Point ✓ Should return 200 when capture point is patched successfully {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error patching Capture Point: Internal Server Error","stack":"Error: Internal Server Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:307:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:298:84)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when service throws an unexpected error {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error patching Capture Point: ModelLevelId does not exist in the project.","name":"BadRequestError","statusCode":400,"stack":"BadRequestError: ModelLevelId does not exist in the project.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:327:24\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:317:86)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 400 when patch service throws BadRequestError Delete Capture Points ✓ Should return 204 when capture points are successfully deleted {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error deleting Capture Points: Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:375:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/capturepoints/rooms.capturepoints.controller.spec.ts:364:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Rooms Capture Points Validator tests validateCreateCapturePointsRequest ✓ should call next when request is valid ✓ should call next when modelRoomId and modelLevelId are null ✓ should return 400 when projectId is invalid ✓ should return 400 when request body is not an array ✓ should return 400 when request body is an empty array ✓ should return 400 when a capture point has missing fields ✓ should return 400 when a capture point has an invalid UUID validateGetCapturePointsRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when lastFetchedIndexId is invalid ✓ should return 400 when size is not a number ✓ should call next when query parameters are missing validateUpdateCapturePointsRequest ✓ should call next when request is valid with modelRoomId and modelLevelId present ✓ should call next when request has valid UUIDs for modelRoomId and modelLevelId ✓ should return 400 when modelRoomId is missing from body ✓ should return 400 when modelLevelId is missing from body ✓ should return 400 when roomCapturePointId is missing ✓ should return 400 when projectId is invalid ✓ should return 400 when request body is empty validatePatchCapturePointsRequest ✓ should call next when only xMeters is provided ✓ should call next when modelRoomId and modelLevelId are null ✓ should return 400 when body is empty object ✓ should return 400 when body has no patchable keys ✓ should return 400 when body is an array ✓ should return 400 when userCapturePointId is whitespace-only validateDeleteCapturePointsRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when request body is not an array ✓ should return 400 when request body is an empty array ✓ should return 400 when roomCapturePointIds contains an invalid UUID Rooms Controller tests Get Rooms List ✓ Should return the list of rooms and status 200 when coordinates are found {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error fetching room list. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:88:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:77:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Get Room {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching rooms details for RoomId: room-1","source":"RoomsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return room and status 200 {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Fetching rooms details for RoomId: room-1","source":"RoomsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error while fetching room details Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:140:33\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/rooms/rooms.controller.spec.ts:132:65)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an error occurs Rooms Validator tests validateGetRoomListRequest ✓ should call next when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when paging parameters are invalid Schedules Controller test Get Schedule Revision When schedule revision exists ✓ Then it should return 200 with the schedule revision ✓ Then it should return 200 with validForProgressCalculations property ✓ Then it should return 200 with plannedProgress and plannedLaborUnits properties ✓ Then it should return 200 with null plannedProgress and plannedLaborUnits when parquet data is not available ✓ Then it should return 200 with isUserProgress property set to false when APScheduleRevisionId is present ✓ Then it should return 200 with isUserProgress property set to true when APScheduleRevisionId is not present When schedule revision does not exist {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting schedule revision with ScheduleRevisionId scheduleRevisionId1 for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error getting schedule revision with ScheduleRevisionId scheduleRevisionId1 for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Error getting schedule revision with ScheduleRevisionId scheduleRevisionId1 for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:213:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:205:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting schedule revision with ScheduleRevisionId scheduleRevisionId1 for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error getting schedule revision by ID for project with projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error getting schedule revision by ID for project with projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:236:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:228:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting schedule revision with ScheduleRevisionId 443b4964-09df-4f86-9e98-7bec5a9fcdad for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:264:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:256:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Update Schedule Revision When update is successful ✓ Then it should return 200 with a success message When setting only current version to non-current, validation error occurs {"level":"info","timestamp":"2026-07-09 13:05:52.5252","message":"Attempting to set revision isCurrent field to 'false', validating this is not currently active schedule.","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 400 with an error message When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error updating schedule revision with ScheduleRevisionId 1 for ProjectId 1. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:336:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:330:78)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 with an error message Get Schedules When schedules exist for Project ✓ Then it should return 200 with the schedules When schedules do not exist {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Schedules for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Schedules for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab not found.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:390:43\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:383:60)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:52.5252","message":"Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Database error!","stack":"Error: Database error!\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:412:43\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:405:60)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 When no projectId found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting schedules for ProjectId 76d1b936-b219-4eb9-902a-95a8ed3cc83b. No projectId found for ProjectId.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No projectId found for ProjectId.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:439:43\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:432:60)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When an unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:466:45\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:459:60)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Get Schedule Revision When schedule revision exists ✓ Then it should return 200 with the schedule revision When project id does not exist {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:513:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:506:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting schedules for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:535:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:528:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Get Schedule Dependencies When dependencies exist ✓ Then it should return 200 with the dependencies array When schedule has no dependencies ✓ Then it should return 200 with an empty array When scheduleRevisionId does not exist {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting schedule dependencies for scheduleRevisionId scheduleRevisionId1 and projectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. No schedule revision found for ScheduleRevisionId scheduleRevisionId1.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: No schedule revision found for ScheduleRevisionId scheduleRevisionId1.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:617:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:609:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting schedule dependencies for scheduleRevisionId scheduleRevisionId1 and projectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error getting schedule dependencies for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error getting schedule dependencies for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:640:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:632:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Delete Schedule Revision When schedule revision exists ✓ Then it should return 200 with the schedule revision When project id does not exist {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error deleting schedule with id: scheduleRevisionId1 and for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error deleting schedule with id: scheduleRevisionId1 and for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Error deleting schedule with id: scheduleRevisionId1 and for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:680:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:673:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 404 When a database error occurs {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error deleting schedule with id: scheduleRevisionId1 and for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab. Error deleting schedule with id: scheduleRevisionId1 and for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.","name":"DatabaseError","statusCode":500,"stack":"DatabaseError: Error deleting schedule with id: scheduleRevisionId1 and for ProjectId 443b4964-09df-4f86-9e98-7bec5a9fcdab.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:702:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/schedules/schedules.controller.spec.ts:695:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 500 Schedules Validator tests validateGetScheduleRevision ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when scheduleRevisionId is invalid validateGetSchedules ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid validateDeleteScheduleRevision ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when scheduleRevisionId is invalid validateGetScheduleDependencies ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when scheduleRevisionId is invalid validateUpdateScheduleRevisionRequest ✓ should call next() when request is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when scheduleRevisionId is invalid ✓ should return 400 when isCurrent is not a boolean ✓ should return 400 when body is empty ✓ should return 400 when isBaseline is not a boolean ✓ should return 400 when scheduleName is not a string Userfiles Controller test Get userfiles When DB throws unexpected error {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error fetching userfiles for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab Forced Error","stack":"Error: Forced Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:40:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:34:83)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Then it should return 200 with the schedule revision Get ingest status ✓ should return 404 if user file is not found ✓ should return 200 with ingest status if user file is found ✓ should return 200 with error code if ingest status is Failed ✓ should return 200 without error code if ingest status is Failed and error code is not found ✓ should return 500 if there is a server error Cancel upload ✓ should return 200 with cancel result when RowsImpactedByQuery is 1 ✓ should return 404 when user file is not found (null result) {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"IngestStatus: Cancelling, CancelRequested: true, IsCancellable: false","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error requesting cancellation for userFileId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Upload cancellation has already been requested for this file.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Upload cancellation has already been requested for this file.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:9:456\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:2:808)","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when cancellation already requested (Cancelling, CancelRequested, !IsCancellable) {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"IngestStatus: In progress, CancelRequested: false, IsCancellable: false","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error requesting cancellation for userFileId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Upload can no longer be cancelled; processing is too far along.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Upload can no longer be cancelled; processing is too far along.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:9:829\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:2:808)","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when processing too far along (In progress, !IsCancellable) {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"IngestStatus: Failed, CancelRequested: false, IsCancellable: false","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error requesting cancellation for userFileId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Upload has already failed and cannot be cancelled.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Upload has already failed and cannot be cancelled.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:9:1078\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:2:808)","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when upload has already failed {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"IngestStatus: Succeeded, CancelRequested: false, IsCancellable: false","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error requesting cancellation for userFileId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Upload cannot be cancelled in its current state.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: Upload cannot be cancelled in its current state.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:9:1235\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/api/v2/projects/userfiles/userfiles.controller.ts:2:808)","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 for other non-cancellable state (generic message) {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error requesting cancellation for userFileId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:263:72\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/userfiles/userfiles.controller.spec.ts:259:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"UserfilesV2Controller","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 when service throws Userfiles Validator tests validateUploadFileRequest ✓ should return 400 if projectId is not provided ✓ should return 400 if userFileId is not provided validateCancelUpload ✓ should call next() when projectId and userFileId are valid UUIDs ✓ should return 400 if projectId is not provided ✓ should return 400 if projectId is not a valid UUID ✓ should return 400 if userFileId is not provided ✓ should return 400 if userFileId is not a valid UUID Videos Controller tests getAllVideos {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Fetching videos list for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Found 1 videos in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getAllVideos with lastSyncDateTime when provided {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Found 0 videos in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call getAllVideos without lastSyncDateTime when not provided {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Fetching videos list for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab since lastSyncDateTime: '2025-01-06T10:55:29.512Z'.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Found 2 videos in project 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return list with isDeleted when lastSyncDateTime is provided and service returns rows with isDeleted Get Device code List {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving unique Video device codes from project '123'.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Found '2' unique device codes on videos in project '123'.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return a list of device code {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving unique Video device codes from project '123'.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error while fetching device codes. Error fetching device codes","stack":"Error: Error fetching device codes\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:117:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:115:55)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle service errors uploadVideo (thumbnail behaviour) {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Uploading chunk 1 of 1 for video file with videoFileId: 9f9f502d-1614-4fb2-aa85-2882ceb7e3b9 and projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Completed upload of 1000 byte video file.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ passes fully qualified thumbnail path to createVideoFile when AI returns output {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Uploading chunk 1 of 1 for video file with videoFileId: 286fa82a-c556-4e7f-8932-5a878261efa4 and projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Video thumbnail service reported failure for projectId=443b4964-09df-4f86-9e98-7bec5a9fcdab videoFileId=286fa82a-c556-4e7f-8932-5a878261efa4: failed — Could not download input video","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Completed upload of 1000 byte video file.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ logs warning and stores null thumbnail when AI returns error and desc without output {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Uploading chunk 1 of 1 for video file with videoFileId: ee916525-89a6-426d-803c-7880d1649b04 and projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Video thumbnail service reported failure for projectId=443b4964-09df-4f86-9e98-7bec5a9fcdab videoFileId=ee916525-89a6-426d-803c-7880d1649b04: transient failure","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Completed upload of 1000 byte video file.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ logs warning when AI returns only desc (no error field) but still no output {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Uploading chunk 1 of 1 for video file with videoFileId: 4c5aedb7-6320-42ff-ad8b-49da47dea379 and projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Video thumbnail generation failed for projectId=443b4964-09df-4f86-9e98-7bec5a9fcdab videoFileId=4c5aedb7-6320-42ff-ad8b-49da47dea379; continuing upload without thumbnail. AI unavailable","stack":"Error: AI unavailable\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:216:25\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/projects/videos/videos.controller.spec.ts:215:98)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Completed upload of 1000 byte video file.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ logs warning and stores null thumbnail when createVideoThumbnail throws {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Uploading chunk 1 of 1 for video file with videoFileId: 3299122e-7f0a-4df8-a1c3-91f3d1a75fee and projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Video thumbnail service returned no body for projectId=443b4964-09df-4f86-9e98-7bec5a9fcdab videoFileId=3299122e-7f0a-4df8-a1c3-91f3d1a75fee; continuing upload without thumbnail.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Completed upload of 1000 byte video file.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ logs warning when thumbnail service returns no body {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Uploading chunk 2 of 2 for video file with videoFileId: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee and projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Completed upload of 0 byte video file.","source":"VideosController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ does not call createVideoThumbnail on later chunks Videos Validator tests validateVideoUploadRequest tests ✓ should not return 400 when request is valid ✓ should return 400 when no file is provided ✓ should return 400 when chunkIndex is not provided ✓ should return 400 when fileName is not provided validateVideoListRequest tests ✓ should call next() when request is valid with projectId only ✓ should call next() when request is valid with projectId and lastSyncDateTime ✓ should return 400 when lastSyncDateTime is invalid ✓ should return 400 when projectId is invalid validateSimleVideoRequest tests ✓ should not return 400 when request is valid ✓ should return 400 when projectId is not provided ✓ should return 400 when videoFileId is not provided ✓ should return 400 when projectId is invalid ✓ should return 400 when videoFileId is invalid validateUpdateVideoRequest ✓ should not return 400 when request is valid ✓ should not return 400 when just description is valid ✓ should not return 400 when just xyzDisplayName is valid ✓ should return 400 when projectId is invalid ✓ should return 400 when videoFileId is invalid ✓ should return 400 when xyzDisplayName and description are invalid SystemTypes Controller listSystemTypes ✓ should return 200 with list of system types {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error listing system types DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:64:59\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:62:64)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 on unexpected error getSystemType ✓ should return 200 with the system type {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting system type Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:85:61\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:83:71)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when system type not found createSystemType ✓ should return 201 with the created system type ✓ should return 201 without commissioningWorkflowId {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error creating system type Workflow not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Workflow not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:116:60\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:114:82)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when commissioning workflow not found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error creating system type A system type named 'HVAC System' already exists in this project.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: A system type named 'HVAC System' already exists in this project.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:125:60\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:123:96)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when system type name already exists in the project updateSystemType ✓ should return 200 with the updated system type ✓ should return 200 without commissioningWorkflowId {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error updating system type Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:159:60\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:157:71)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when system type not found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error updating system type A system type named 'HVAC System' already exists in this project.","name":"ResourceConflictError","statusCode":409,"stack":"ResourceConflictError: A system type named 'HVAC System' already exists in this project.\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:168:60\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:166:96)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 409 when system type name already exists in the project deleteSystemType ✓ should return 204 on successful deletion {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error deleting system type Not found","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Not found\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:189:60\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/systemTypes/system.types.controller.spec.ts:187:71)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SystemTypesController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when system type not found Tenant Controller tests Get tenant device list ✓ Should return list and status 200 when devices are found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error getting devices by tenant id. Unexpected error","stack":"Error: Unexpected error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/tenants/tenant.controller.spec.ts:85:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/tenants/tenant.controller.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/tenants/tenant.controller.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/api/v2/tenants/tenant.controller.spec.ts:77:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"TenantController","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return 500 when an unexpected error occurs Tenant Validator tests validateGetTenantDeviceListRequest ✓ should return 400 when tenantId is invalid ✓ should call next when tenantId is valid AI Service Client tests blurFaces {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"AI base url: http://faceblurapi.ai.svc.cluster.local/","source":"AiServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should POST to blur-faces and return response {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Network error","stack":"Error: Network error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:72:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:71:56)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"AiServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw and log on error {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Converting circular structure to JSON\n --> starting at object with constructor 'Object'\n --- property 'self' closes the circle","stack":"TypeError: Converting circular structure to JSON\n --> starting at object with constructor 'Object'\n --- property 'self' closes the circle\n at JSON.stringify ()\n at AiServiceClient.handleAxiosResponse (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/ai.service.client.ts:8:350)\n at AiServiceClient. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/ai.service.client.ts:10:684)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/ai.service.client.ts:2:828)","name":"TypeError","source":"AiServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should handle case where unserialisable json data is returned generateVideoThumbnails ✓ should POST to video/thumbnail and return response {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Video thumbnail failed for input=mycontainer/videos/input1.mp4 output=mycontainer/images/thumbnail1.jpg error=failed desc=Could not download input video","source":"AiServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log error and desc when an item has error in the response {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Network error","stack":"Error: Network error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:161:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/ai.service.client.spec.ts:160:66)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"AiServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw and log on transport error IAM Client Helper getFromCacheOrIam ✓ should return undefined when tenant is missing ✓ should return undefined when email is missing ✓ should return cached contact info when available {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 0 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"1970-01-01 00:00:00.000","message":"User list can't be fetched for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should fetch from IAM when cache is empty and cache the result {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 0 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"1970-01-01 00:00:00.000","message":"User list can't be fetched for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should set IAM calling cache when fetching from IAM {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 0 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"1970-01-01 00:00:00.000","message":"User list can't be fetched for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should not fetch all users if IAM calling cache exists {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 2 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should fetch all users and cache them when IAM calling cache is empty {"level":"error","timestamp":"1970-01-01 00:00:00.000","message":"Token error","stack":"Error: Token error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:247:64)\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:242:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle IAM service token error gracefully {"level":"error","timestamp":"1970-01-01 00:00:00.000","message":"Contact fetch error","stack":"Error: Contact fetch error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:266:56)\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:260:75)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle IAM contact fetch error gracefully {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"1970-01-01 00:00:00.000","message":"User list error","stack":"Error: User list error\n at Suite. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:286:57)\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.helper.spec.ts:279:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle user list fetch error gracefully {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 0 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"1970-01-01 00:00:00.000","message":"User list can't be fetched for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log appropriate messages for cache operations fetchAllUsersAndCache (indirect testing) {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 1 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should be called when IAM calling cache is empty {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 0 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle empty user list gracefully Cache TTL Configuration {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 0 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"1970-01-01 00:00:00.000","message":"User list can't be fetched for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should use correct TTL for IAM calling cache (30 seconds) {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Fetching List of users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"1970-01-01 00:00:00.000","message":"Getting list of 1 users for caching","source":"IamClientHelper","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should use correct TTL for user cache (86400 seconds = 1 day) IAM Client tests hasAccessProjectAuthority When IAM service responds successfully ✓ should return true when user has permission ✓ should call portfolio-authorities with portfolioId when isProjectAuth is false ✓ should return false when user lacks permission When projectId is undefined {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"hasAccessProjectAuthority called with undefined projectId","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return false and log warning When IAM service returns error status codes {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"IAM service error response","endpoint":"services/iam/api/account/project-authorities","projectId":"test-mongo-project-id","statusCode":400,"statusText":"Bad Request","responseData":"Error response","responseTime":"0ms","currentTimeout":5000,"source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw IamServiceError for 400 Bad Request ✓ should throw ForbiddenError When IAM service times out {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"IAM request timeout - consider increasing timeout value","projectId":"test-mongo-project-id","authorities":"READ_PROJECT,WRITE_PROJECT","endpoint":"services/iam/api/account/project-authorities","currentTimeout":5000,"responseTime":"0ms","errorCode":"ECONNABORTED","errorMessage":"timeout of 1000ms exceeded","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw IamServiceError with timeout message When network error occurs {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"IAM request failed - no response received","projectId":"test-mongo-project-id","authorities":"READ_PROJECT,WRITE_PROJECT","endpoint":"services/iam/api/account/project-authorities","responseTime":"0ms","errorMessage":"Network Error","currentTimeout":5000,"source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw IamServiceError for network unreachable When unexpected error occurs {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Unexpected error during IAM authority check","projectId":"test-mongo-project-id","authorities":"READ_PROJECT,WRITE_PROJECT","endpoint":"services/iam/api/account/project-authorities","responseTime":"1ms","errorMessage":"Something went wrong","errorStack":"Error: Something went wrong\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:224:41\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:223:81)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","currentTimeout":5000,"source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw IamServiceError for unexpected errors When IamServiceError is re-thrown ✓ should not wrap already thrown IamServiceError getAccountProjects ✓ should return account projects on success {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Network error","stack":"Error: Network error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:280:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:279:72)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw error and log when request fails getPeopleByProject ✓ should return people by project on success {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Service error","stack":"Error: Service error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:331:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:330:72)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw error and log when request fails getUsersByProject {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Fetching users by project: test-project-id from IAM","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return users by project on success {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Fetching users by project: test-project-id from IAM","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Service error","stack":"Error: Service error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:382:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:381:72)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw error and log when request fails getUserDetail ✓ should return user details on success {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Authentication error","stack":"Error: Authentication error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:431:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/iam.client.spec.ts:430:72)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"IamClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw error and log when request fails Mapbox Client - forwardGeocode when the token is missing {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"MAPBOX_API_KEY is not set — skipping geocoding","source":"MapboxClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ returns null without calling fetch when the API returns a valid result ✓ returns latitude and longitude from the first feature ✓ builds a URL containing the access token ✓ includes provided structured address fields in the URL when the API returns an empty features array {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Mapbox geocoding returned no usable coordinates","fields":{"place":"Atlantis","country":"Unknown"},"source":"MapboxClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ returns null when the API returns coordinates without latitude/longitude {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Mapbox geocoding returned no usable coordinates","fields":{"place":"Somewhere"},"source":"MapboxClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ returns null when the API returns a non-OK HTTP status {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Mapbox geocoding request failed with status 401","source":"MapboxClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ returns null when fetch throws a network error {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Error calling Mapbox geocoding API Network failure","stack":"Error: Network failure\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/mapbox.client.spec.ts:147:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/mapbox.client.spec.ts:8:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/mapbox.client.spec.ts:4:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/mapbox.client.spec.ts:146:69)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"MapboxClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ returns null without propagating the error when only some fields are provided ✓ omits missing fields from the URL AuthorisedNotificationClient tests sendNotification {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending notification to email: user@example.com for purpose: REGISTER with locale: ENGLISH and serviceName: PAPI. Payload had 1 fields.","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending fields: {\"code\":\"123456\"}","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Status code: 200. Successfully sent notification to email: user@example.com for purpose: REGISTER with locale: ENGLISH and serviceName: PAPI","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should send notification successfully with provided fields {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending notification to email: user@example.com for purpose: REGISTER with locale: ENGLISH and serviceName: PAPI. Payload had 0 fields.","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending fields: {}","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Status code: 204. Successfully sent notification to email: user@example.com for purpose: REGISTER with locale: ENGLISH and serviceName: PAPI","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should default channelType to [EMAIL] when omitted {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending notification to email: user@example.com for purpose: REGISTER with locale: ENGLISH and serviceName: PAPI. Payload had 0 fields.","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending fields: {}","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error while sending notification. Status: 500, Endpoint: services/notification/api/notifications","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error while sending notification. Status: 500, Endpoint: services/notification/api/notifications, Response: Error response","stack":"NotificationServiceError: Error while sending notification. Status: 500, Endpoint: services/notification/api/notifications, Response: Error response\n at AuthorisedNotificationClient. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/authorised.notification.client.ts:3:2073)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/authorised.notification.client.ts:2:828)","name":"NotificationServiceError","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw NotificationServiceError and log when service responds non-2xx {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending notification to email: user@example.com for purpose: REGISTER with locale: ENGLISH and serviceName: PAPI. Payload had 0 fields.","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Sending fields: {}","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Network Error","stack":"Error: Network Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/notification.client.spec.ts:187:34\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/notification.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/notification.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/notification.client.spec.ts:186:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"AuthorisedNotificationClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should rethrow unexpected error and log safely ServiceClient tests getIamInternalToken ✓ should successfully fetch IAM internal token {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Authentication failed.","stack":"AuthenticationError: Authentication failed.\n at ServiceClient.handleIamAxiosStatus (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/clients.ts:2:38)\n at ServiceClient. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/service.clients.ts:2:2682)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/service.clients.ts:2:828)","name":"AuthenticationError","source":"ServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw AuthenticationError when IAM service responds with 401 {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"IAM service error response","endpoint":"services/iam/oauth/token","statusCode":500,"statusText":"Internal Server Error","responseData":{"error":"server_error"},"source":"ServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"IAM service error: 500 - Internal Server Error","stack":"IamServiceError: IAM service error: 500 - Internal Server Error\n at ServiceClient.handleIamAxiosStatus (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/clients.ts:2:38)\n at ServiceClient. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/service.clients.ts:2:2682)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/clients/service.clients.ts:2:828)","name":"IamServiceError","source":"ServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw IamServiceError when IAM service responds with non-2xx status {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Network Error","stack":"Error: Network Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/service.client.spec.ts:147:34\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/service.client.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/service.client.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/clients/service.client.spec.ts:146:73)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"ServiceClient","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should rethrow unexpected error and log safely ✓ should encode basic auth correctly addApiVersionToLoggingContext API version header handling ✓ should store apiVersion from xyz-api-version header when present ✓ should not set apiVersion when xyz-api-version header is missing ✓ should not set apiVersion when xyz-api-version header is empty string ✓ should call next function ✓ should handle various API version formats ✓ should call next even when there is no async store ✓ should not throw error when store is undefined Error handling {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Failed to set apiVersion in logging context: Header error","stack":"Error: Header error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/api-version.middleware.spec.ts:152:54\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/api-version.middleware.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/api-version.middleware.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/api-version.middleware.spec.ts:151:85)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ApiVersionMiddleware","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call next even when header function throws an error ✓ should not expose apiVersion outside the async context parsePagingQueryParam ✓ should return default size when size is not provided ✓ should return size when size is provided ✓ should return lastFetchedIndexId when lastFetchedIndexId is provided ✓ should return 0 when lastFetchedIndexId is empty Authorization Middleware hasAnyAuthority Single Authority Validation ✓ should grant access when user has the required authority {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: lacks required authorities. Required: [ROLE_ADMIN], actual: [ROLE_USER]","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when user lacks the required authority Multiple Authorities Validation ✓ should grant access when user has any of the required authorities {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: lacks required authorities. Required: [ROLE_ADMIN,ROLE_EDITOR], actual: [ROLE_USER]","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when user has none of the required authorities Edge Cases {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: lacks required authorities. Required: [ROLE_ADMIN], actual: []","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when token has empty authorities array {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: lacks required authorities. Required: [ROLE_ADMIN], actual: []","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when token has no authorities field hasRolesOrProjectAccess Role-based Access ✓ should grant access when user has any of the required roles ✓ should check project access when user has none of the required roles Project-based Access ✓ should grant access when user has project authority {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Didn't set Cache key, as user doesn't have permission key: mongo-id:PROJECT_READ:Unknown","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: denied access to project 'test-project'. Required authorities: [ROLE_ADMIN], required project roles: [PROJECT_READ], actual authorities: [ROLE_USER]","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when user has neither roles nor project authority Project Not Found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Project with ProjectId: 'test-project' not found.","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when project is not found Edge Cases {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Didn't set Cache key, as user doesn't have permission key: mongo-id:PROJECT_READ:Unknown","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: denied access to project 'test-project'. Required authorities: [ROLE_ADMIN], required project roles: [PROJECT_READ], actual authorities: []","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when token has empty authorities array {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"Didn't set Cache key, as user doesn't have permission key: mongo-id:PROJECT_READ:Unknown","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:53.5353","message":"403 Forbidden: denied access to project 'test-project'. Required authorities: [ROLE_ADMIN], required project roles: [PROJECT_READ], actual authorities: []","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should deny access when token has no authorities field Error Handling {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Project with ProjectId: 'test-project' not found.","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 404 when project is not found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error checking project access for project test-project: IAM Service Error","stack":"Error: IAM Service Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:332:55\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:328:81)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 when IAM service throws an error {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error checking project access for project test-project: Project Service Error","stack":"Error: Project Service Error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:348:58\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/middleware/middleware.spec.ts:345:85)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return 500 when project service throws an error {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Project with ProjectId: 'test-project' not found.","source":"AuthorisationMiddleware","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should not send multiple responses when errors occur createLoggingContext correlation_id handling ✓ should store correlation_id from x-correlation-id header when present ✓ should store empty string for correlation_id when x-correlation-id header is missing ✓ should store empty string for correlation_id when x-correlation-id header is undefined ✓ should call next function ✓ should store both sessionId and correlation_id in the context ✓ should not expose correlation_id outside the async context 360Capture Service unit tests get360Captures ✓ should return non-deleted rows as-is when lastSyncDateTime is not provided ✓ should return all rows with isDeleted when lastSyncDateTime is provided create360CaptureFile {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Creating 360 Capture file for projectId:443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"360CaptureService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should pass null modelRoomId and roomCapturePointId to the database Activities Service - fetchActivitiesMappingsWithPagination When valid parameters are provided ✓ should return mapped activity mappings when rows are returned ✓ should return empty array when no rows are returned ✓ should work without lastSyncDateTime parameter When database errors occur ✓ should throw NotFoundError when project is not found ✓ should throw NotFoundError when NotFoundError is already thrown {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error fetching ActivityCategoryMapping for ProjectId: 123e4567-e89b-12d3-a456-426614174000. Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/activities.service.spec.ts:135:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/activities.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/activities.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/activities.service.spec.ts:134:79)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ActivitiesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw DatabaseError for other database errors Devices Service unit tests resetAndUpdateDevice Happy path – without projectId {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: starting transaction for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: cleared project mapping for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: device updated for deviceId e813cc57-7307-4673-831e-b5c2c7079051 and for tenantId mongo-tenant-abc","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: transaction committed for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should clear the project mapping, update the device, skip the link step, and return the mapped device Happy path – with projectId {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: starting transaction for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: cleared project mapping for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: device updated for deviceId e813cc57-7307-4673-831e-b5c2c7079051 and for tenantId mongo-tenant-abc","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: linked deviceId e813cc57-7307-4673-831e-b5c2c7079051 to projectId 443b4964-09df-4f86-9e98-7bec5a9fcdab","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: transaction committed for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should clear the project mapping, update the device, link to project, and return the mapped device Failure in step 1 – CLEAR_DEVICE_PROJECT_MAPPING throws {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: starting transaction for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: transaction failed for deviceId e813cc57-7307-4673-831e-b5c2c7079051 clear mapping failed","stack":"Error: clear mapping failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:153:33\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:152:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log the error with deviceId and rethrow Failure in step 2 – UPDATE_DEVICE throws {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: starting transaction for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: cleared project mapping for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: transaction failed for deviceId e813cc57-7307-4673-831e-b5c2c7079051 update device failed","stack":"Error: update device failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:172:33\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:171:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log the error with deviceId and rethrow Failure in step 3 – SET_PROJECT_DEVICES throws (projectId provided) {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: starting transaction for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: cleared project mapping for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: device updated for deviceId e813cc57-7307-4673-831e-b5c2c7079051 and for tenantId mongo-tenant-abc","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: transaction failed for deviceId e813cc57-7307-4673-831e-b5c2c7079051 set project devices failed","stack":"Error: set project devices failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:193:33\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/devices.service.spec.ts:192:77)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log the error with deviceId and rethrow mongoTenantId coercion {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: starting transaction for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: cleared project mapping for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: device updated for deviceId e813cc57-7307-4673-831e-b5c2c7079051 and for tenantId undefined","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"resetAndUpdateDevice: transaction committed for deviceId e813cc57-7307-4673-831e-b5c2c7079051","source":"DevicesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should pass null to queryClient when mongoTenantId is undefined Folders Service unit tests getFolderContents When folder contains models from all versions (using fn_GetModelListAllVersions) {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving contents of folderId '8b141d85-3305-4bdd-b802-e83639c260e8' in projectId '443b4964-09df-4f86-9e98-7bec5a9fcdab'.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all folders in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 1 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all models in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 2 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Successfully processed folder contents. Returning 3 items.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return models from all versions including non-current versions {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving contents of folderId '8b141d85-3305-4bdd-b802-e83639c260e8' in projectId '443b4964-09df-4f86-9e98-7bec5a9fcdab'.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all folders in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 2 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all models in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 1 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Successfully processed folder contents. Returning 3 items.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should include model with parentFolderId referencing deleted folder even if from non-current version When verifying the query uses fn_GetModelListAllVersions {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving contents of folderId '8b141d85-3305-4bdd-b802-e83639c260e8' in projectId '443b4964-09df-4f86-9e98-7bec5a9fcdab'.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all folders in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 1 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all models in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 0 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Successfully processed folder contents. Returning 1 items.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should call fn_GetModelListAllVersions to get models across all versions When folder does not exist {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving contents of folderId 'non-existent-folder-id' in projectId '443b4964-09df-4f86-9e98-7bec5a9fcdab'.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Queried for all folders in project 443b4964-09df-4f86-9e98-7bec5a9fcdab. Found 1 rows.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw NotFoundError When database query fails {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Retrieving contents of folderId '8b141d85-3305-4bdd-b802-e83639c260e8' in projectId '443b4964-09df-4f86-9e98-7bec5a9fcdab'.","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error finding model folders with ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, FolderId: 8b141d85-3305-4bdd-b802-e83639c260e8 Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/folders.service.spec.ts:211:27\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/folders.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/folders.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/folders.service.spec.ts:210:51)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"FoldersService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw DatabaseError deleteModelFolder ✓ Should call usp_DeleteModelFolders with correct parameters ✓ Should throw NotFoundError when project does not exist getAllModelFolders ✓ Should return all model folders for a project Issue Comments Service unit tests mapRowToIssueComment ✓ populates commentedByName from the name map when contact resolves ✓ returns null commentedByName when email is not in name map ✓ returns null commentedByName when IAM returned no contact (null value in map) ✓ returns null commentedByName when commentBy is 'Unknown' ✓ returns null commentedByName when no name map is provided ✓ maps all standard fields correctly and sets indexId when Id is present ✓ omits indexId when row has no Id (detailed-issue inline embed path) getIssueComments ✓ returns comments with commentedByName populated from IAM ✓ returns null commentedByName when IAM returns no contact ✓ returns null commentedByName when commentBy is 'Unknown' ✓ deduplicates emails before calling IAM — 3 comments by 2 authors causes 2 IAM lookups ✓ handles a mix of Unknown and real emails — only real emails are looked up ✓ returns commentedByName as null when contact has both firstName and lastName empty ✓ projects the row Id onto indexId for cursor-based pagination ✓ passes lastFetchedIndexId and size through to the DB function ✓ passes nulls for missing paging params so the DB defaults apply insertIssueComment ✓ returns the inserted comment with commentedByName populated and indexId stripped ✓ returns null commentedByName on POST when commentBy is 'Unknown' ✓ returns null commentedByName on POST when IAM returns no contact Issue History Service unit tests getIssueHistory validFrom mapping ✓ serialises validFrom as the true UTC instant (no timezone shift) ✓ is independent of the Node process timezone ✓ serialises validTo when present Issues Service unit tests getNameFromCacheOrIam - system@xyzreality.com check ✓ Should return 'System' when reporterEmail is 'system@xyzreality.com' (lowercase) ✓ Should return 'System' when reporterEmail is 'SYSTEM@XYZREALITY.COM' (uppercase) ✓ Should return 'System' when reporterEmail is 'System@XyzReality.com' (mixed case) ✓ Should return 'System' when assigneeEmail is 'system@xyzreality.com' ✓ Should call getFromCacheOrIam for non-system emails getIssueList - batched name resolution ✓ resolves each distinct reporter/assignee email once per page and maps names onto the right rows ✓ falls back to an empty name for unresolvable emails and skips lookups for null emails updateIssue {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error while updating Issue Issue with IssueId: non-existent-id and ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab not found.","name":"NotFoundError","statusCode":404,"stack":"NotFoundError: Issue with IssueId: non-existent-id and ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab not found.\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/issues.service.ts:236:2)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/issues.service.ts:2:828)","source":"IssuesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw NotFoundError when fn_UpdateIssue returns no rows Photos Service unit tests getPhotos ✓ should return non-deleted rows as-is when lastSyncDateTime is not provided ✓ should return all rows with isDeleted when lastSyncDateTime is provided Portfolio Service unit tests getPortfolioById ✓ Should return portfolio when found ✓ Should throw NotFoundError when not found listPortfoliosByTenantId ✓ Should return array of portfolios createPortfolio ✓ Should create and return portfolio updatePortfolio ✓ Should update and return portfolio deletePortfolio ✓ Should throw ResourceConflictError when portfolio is default for tenant (default portfolio must not be deleted) ✓ Should reassign projects and delete when not default getProjectsByPortfolioId ✓ Should return all portfolio projects when no tenantId provided (non-admin) ✓ Should filter projects by tenantId when ADMIN_FOR_ALL_PROJECT (same-tenant isolation) ✓ Should return empty array when no projects in portfolio addProjectToPortfolio ✓ Should update project portfolio ✓ Should throw NotFoundError when portfolio does not exist ✓ Should throw NotFoundError when project does not exist removeProjectFromPortfolio ✓ Should move project to default portfolio ✓ Should throw NotFoundError when project not in portfolio getProjectInPortfolio ✓ Should return project when in portfolio ✓ Should throw NotFoundError when project not in portfolio isProjectInPortfolio ✓ Should return true when project in portfolio ✓ Should return false when project not in portfolio getPortfolioProjectReport - decimal coercion ✓ Should coerce string DECIMAL values from pg into numbers ✓ Should coerce string '0.00' DECIMAL into number 0 (not-started project) ✓ Should leave undefined values undefined getPortfolioMilestones ✓ Should pass portfolioId as query parameter ✓ Should return mapped milestones with correct field names ✓ Should pass through MISSED status unchanged ✓ Should return null for null date fields ✓ Should return null slippageDays when DB value is null ✓ Should return empty array when no milestones exist ✓ Should throw NotFoundError when portfolio not found getPortfolioPerformanceRatings ✓ Should return mapped performance ratings when portfolio exists ✓ Should call correct SQL query ✓ Should throw NotFoundError when portfolio not found ✓ Should return empty ratings array when no ratings exist ProjectFiles Service unit tests getProjectFile {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Getting project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return file details when found {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Getting project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw NotFoundError when file does not exist {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Getting project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error fetching project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab Connection timeout","stack":"Error: Connection timeout\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:68:25\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:67:74)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw DatabaseError on unexpected DB failure createProjectFile {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Creating project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call usp_InsertProjectFile with correct parameters {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Creating project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw NotFoundError when project does not exist {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Creating project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error creating project file for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab DB error","stack":"Error: DB error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:123:25\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:122:74)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw DatabaseError on unexpected DB failure updateProjectFileStatus {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Updating filesize for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should call usp_UpdateProjectFileStatus with correct parameters {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Updating filesize for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw NotFoundError when project does not exist {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Updating filesize for fileReferenceId: 8b141d85-3305-4bdd-b802-e83639c260e8","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error updating project file size for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab Network error","stack":"Error: Network error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:171:25\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projectfiles.service.spec.ts:170:74)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectFilesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw DatabaseError on unexpected DB failure accumulateFileHash ✓ should store chunkHash directly for the first chunk ✓ should combine existing hash with chunkHash for subsequent chunks ✓ should store HASH_SKIPPED sentinel when subsequent chunk finds no prior hash ✓ should keep HASH_SKIPPED sentinel when a later chunk finds it already set popFileHash ✓ should return hash and delete cache key when Redis is available ✓ should return null when HASH_SKIPPED sentinel is stored ✓ should return null when no hash is stored Project Service unit tests getProjectsByMongoProjectId - basePoint mapping {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectsByMongoProjectIds - querying database for 1 mongoProjectIds, minimal: false","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should include basePoint when PBPNorthing/Easting/Elevation/TrueNorthAngle are present {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectsByMongoProjectIds - querying database for 1 mongoProjectIds, minimal: false","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should include empty basePoint when values are absent {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectsByMongoProjectIds - querying database for 1 mongoProjectIds, minimal: true","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectsByMongoProjectIds - returning minimal data for 1 projects","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should not include any extra fields when minimal is true getMappedProjectByMongoProjectId {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Querying project by MongoProjectId='mongo-123'","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - querying database for mongoProjectId: mongo-123","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - received data.","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should return the mapped project when a single valid record is found {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Querying project by MongoProjectId='mongo-123'","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - querying database for mongoProjectId: mongo-123","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - received data.","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw NotFoundError if no project is found {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Querying project by MongoProjectId='mongo-123'","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - querying database for mongoProjectId: mongo-123","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - received data.","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw ResourceConflictError if multiple projects are found {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"Querying project by MongoProjectId='mongo-123'","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - querying database for mongoProjectId: mongo-123","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:53.5353","message":"getProjectByMongoId - received data.","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"mapRowToProject called with null or undefined project","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error while finding project by mongoId for Project: mongo-123. Invalid input: project is null or undefined","stack":"Error: Invalid input: project is null or undefined\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:76:10\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:2:572)\n at mapRowToProject (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:76:10)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:492:2)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:2:808)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw Error when trying to map incorrect data getMappedProjectByProjectId ✓ Should return the mapped project when a single valid record is found ✓ Should throw NotFoundError if no project is found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"mapRowToProject called with null or undefined project","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error finding Project with ProjectId: mongo-123. Invalid input: project is null or undefined","stack":"Error: Invalid input: project is null or undefined\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:76:10\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:2:1383\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:2:572)\n at mapRowToProject (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:76:10)\n at Object. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:152:2)\n at Generator.next ()\n at fulfilled (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/src/services/projects.service.ts:2:808)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw Error when trying to map incorrect data updateProjectById ✓ Should successfully update project when valid data is provided ✓ Should throw NotFoundError when project is not found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error updating Project with ProjectId:test-project-123 Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:348:35\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:347:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw DatabaseError when database error occurs ✓ Should handle empty string values correctly ✓ Should handle null/undefined values correctly ✓ Should successfully update project when isPortfolioEnabled is provided ✓ Should pass contractorId as _mongoCompanyId when provided ✓ Should pass enableAI=true to the query when provided getMappedProjectByProjectId - enableAI mapping ✓ Should map EnableAI=true from DB row to enableAI=true in project output ✓ Should default enableAI to false when EnableAI is null in DB row ✓ Should default enableAI to false when EnableAI is absent from DB row getProjectProgressOutputs ✓ Should successfully return mapped project progress outputs when data exists ✓ Should return object with undefined properties when no outputs are found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error finding ProjectProgressReport with ProjectId: test-project-123. Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:760:29\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:759:79)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw DatabaseError when database query fails ✓ Should throw NotFoundError when NotFoundError is thrown from query getProjectProgressWeighting ✓ Should successfully return project progress weighting when data exists ✓ Should throw NotFoundError when no weighting is found {"level":"error","timestamp":"2026-07-09 13:05:53.5353","message":"Error finding ProjectProgressWeighting with ProjectId: test-project-123 Database connection failed","stack":"Error: Database connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:835:29\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/projects.service.spec.ts:834:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"ProjectsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ Should throw DatabaseError when database error occurs ✓ Should propagate NotFoundError thrown from query getMongoProjectIdByProjectId ✓ returns cached mapping without calling the database ✓ queries the database on cache miss and stores the result with 24-hour TTL ✓ treats empty cached mongoProjectId as a miss and loads from the database ✓ does not cache when the project is not found Rooms capture points service unit tests patchRoomCapturePoint {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should merge partial body and call patch proc with nulls for omitted fields and expected LastModifiedOn {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should validate level only when merged state has null room and new level {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should reject when level does not exist in project {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should reject when room does not exist in project (room only) {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should reject when mapping parquet exists but has no row for room and level {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should allow room and level when project-room-level-mapping parquet contains the pair {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Found 0 artefacts for ProjectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab with includeModels: false.","source":"ModelsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should allow room and level when no project-room-level-mapping parquet artefact exists {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should reject when only modelRoomId is patched but DB had level and parquet has no pair for merged state {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should reject when only modelLevelId is patched but DB had room and parquet has no pair for merged state {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should allow both spatial ids null {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Fetching Room Capture Point for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Room Capture Point fetched successfully for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Concurrent patch on room capture point projectId=443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId=e813cc57-7307-4673-831e-b5c2c7079051","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw ResourceConflictError when the database reports a concurrent modification updateRoomCapturePoint {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Updating Room Capture Points for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw BadRequestError when update fails with ModelRoom FK {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Updating Room Capture Points for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw BadRequestError when update fails with ModelLevel FK {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Updating Room Capture Points for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Room capture point not found for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab, roomCapturePointId: e813cc57-7307-4673-831e-b5c2c7079051","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw NotFoundError when update reports capture point not found createCapturePoints {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Creating Room Capture Points for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Error while inserting Room Capture Points. UserCapturePointId already exists in project.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw BadRequestError on duplicate UserCapturePointId constraint {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Creating Room Capture Points for projectId: 443b4964-09df-4f86-9e98-7bec5a9fcdab.","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Error while inserting Room Capture Points. some other db failure","stack":"Error: some other db failure\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/rooms.capturepoints.service.spec.ts:388:31\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/rooms.capturepoints.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/rooms.capturepoints.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/rooms.capturepoints.service.spec.ts:387:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"RoomsCapturePointsService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw DatabaseError on unexpected insert error Schedules Service - queryParquetFile when max calendar date is today or in the future {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure://container/path/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 2 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 2 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return plannedProgress and plannedLaborUnits from parquet for today {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: https://example.com/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 1 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 1 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should use MAX(CalendarDate) and LEAST with today to pick target date in query when max calendar date is before today {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure://container/path/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Max calendar date 2020-01-15 is before today 2026-07-09; activities with ValidForProgressCalculations will show 100% planned","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 2 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 2 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return raw parquet data and set isPastMaxDate true so caller can use 100% {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure:///container/path/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Max calendar date 2024-06-01 is before today 2026-07-09; activities with ValidForProgressCalculations will show 100% planned","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 1 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 1 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should query parquet using max calendar date and return raw values with isPastMaxDate true when parquet has no rows or max date is null {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure://container/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 0 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 0 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return empty map when no rows {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure://container/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 1 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 1 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should use plannedProgress as-is when CalendarDate is present (today comparison in Node) when query throws {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure://container/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Error querying parquet file from azure://container/file.parquet: Azure connection failed","stack":"Error: Azure connection failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/schedules.service.spec.ts:123:43\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/schedules.service.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/schedules.service.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/services/schedules.service.spec.ts:122:59)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return empty map on error row mapping {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Querying parquet file from URL: azure://container/file.parquet","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Parquet query returned 3 rows for dates up to: 2026-07-09","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Retrieved 1 records from parquet file","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should skip rows with missing activityId Schedules Service - getScheduleRevisionById row mapping {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Attempting to get scheduleRevision for projectId project-1, scheduleRevisionId revision-1.","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"getScheduleRevisionById - received data.","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"No parquet URL found for scheduleRevisionId revision-1.","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"No parquet data available for scheduleRevisionId revision-1, returning data without parquet enrichment.","source":"SchedulesService","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ maps OnCriticalPath to onCriticalPath for each activity (regression: PAPI-3520 typo) Videos Service unit tests getAllVideos ✓ should return non-deleted rows as-is when lastSyncDateTime is not provided ✓ should return all rows with isDeleted when lastSyncDateTime is provided azure.util getBlobSasToken {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return a SAS token when successful {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: customContainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should return a SAS token when successful with a parameterised container name {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Error while generating generating sas token for blob file download. Mock error","stack":"Error: Mock error\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:129:40\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:128:80)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should throw an error when SAS token generation fails getFullyQualifiedDownloadUrl ✓ should construct URL with container name and blob URL ✓ should remove trailing slash from blob URL generateTokenisedBlobDownloadUrl {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should construct signed URL with destination and SAS token {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should remove trailing slash from blobServiceClientUrl {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle blobServiceClientUrl without trailing slash {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle blobServiceClientUrl with multiple trailing slashes (removes only the last one) {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should properly encode destination with special characters when blobServiceClientUrl ends with slash {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: testcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle empty destination path when blobServiceClientUrl ends with slash {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"info","timestamp":"2026-07-09 13:05:54.5454","message":"Successfully created blob sas token for account name: testaccount, container name: customcontainer.","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle different container names from blob path {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Error while generating generating sas token for blob file download. SAS generation failed","stack":"Error: SAS generation failed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:291:40\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/azure.util.spec.ts:289:76)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"AzureUtils","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should propagate errors from SAS token generation getBlobServiceClient ✓ should create BlobServiceClient with connection string ✓ should throw error when connection string is not found getAzureTableClient ✓ should create TableClient with connection string and default settings ✓ should create TableClient with allowInsecureConnection set to true when configured ✓ should throw error when connection string is not found blob-download-url.cache ✓ blobContainerSasCacheKey is stable for the same container and TTL ✓ uses same Redis key for two blob paths in the same container with the same TTL ✓ produces different Redis keys for the same container but different TTLs (logs vs photos) {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis is unavailable; falling back to uncached URL.","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ uses short-lived SAS when Redis client is unavailable {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Failed to resolve cached container SAS for mycontainer; falling back to short-lived uncached URL. connection lost","stack":"Error: connection lost\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:59:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:56:65)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ uses short-lived SAS when Redis GET throws ✓ on cache miss mints longer-lived Azure SAS than Redis PX and returns composed URL {"level":"warn","timestamp":"2026-07-09 13:05:54.5454","message":"Redis SET failed; SAS token will not be cached. OOM command not allowed","stack":"Error: OOM command not allowed\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:100:39\n at Generator.next ()\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:41:71\n at new Promise ()\n at __awaiter (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:37:12)\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/blob-download-url.cache.spec.ts:96:101)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at Immediate. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","source":"BlobDownloadUrlCache","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ still returns the composed URL when Redis SET fails (does not re-generate SAS) ✓ returns composed URL from cached SAS when more than 1 hour remains ✓ on cache miss with custom options mints Azure SAS for redisTtl+buffer and stores entry with custom PX ✓ serves cached SAS without refresh when remaining time exceeds custom minRemainingMs ✓ refreshes with new Azure SAS when at most one hour of cache-entry validity remains createBlobDownloadUrlResolver ✓ resolves the container SAS once for many paths in the same container, composing each locally ✓ resolves a separate SAS per distinct container ✓ falls back to a short-lived uncached URL when Redis is unavailable business-region utility getBusinessRegion North America ✓ returns NA for 'United States' ✓ returns NA for 'united states' (case insensitive) ✓ returns NA for 'USA' ✓ returns NA for 'Canada' ✓ returns NA for 'Mexico' EMEA — Europe ✓ returns EMEA for 'United Kingdom' ✓ returns EMEA for 'Germany' ✓ returns EMEA for 'France' ✓ returns EMEA for 'Turkey' EMEA — Middle East ✓ returns EMEA for 'United Arab Emirates' ✓ returns EMEA for 'Saudi Arabia' ✓ returns EMEA for 'Qatar' EMEA — Africa ✓ returns EMEA for 'South Africa' ✓ returns EMEA for 'Nigeria' APAC ✓ returns APAC for 'Australia' ✓ returns APAC for 'Japan' ✓ returns APAC for 'China' ✓ returns APAC for 'India' ✓ returns APAC for 'Singapore' ✓ returns APAC for 'New Zealand' LATAM ✓ returns LATAM for 'Brazil' ✓ returns LATAM for 'Argentina' ✓ returns LATAM for 'Colombia' case-insensitive and whitespace handling ✓ returns EMEA for ' United Kingdom ' (leading/trailing whitespace) ✓ returns NA for 'UNITED STATES' (all caps) ✓ returns APAC for 'AUSTRALIA' unknown / missing countries ✓ returns null for an unknown country ✓ returns null for undefined ✓ returns null for null ✓ returns null for empty string encrypt and decrypt Token ✓ should hash the token correctly Error Logger Utility getSafeErrorInfo ✓ should extract safe error info from Error object ✓ should extract axios error properties ✓ should handle error with circular references safely ✓ should handle non-Error objects ✓ should handle null/undefined ✓ should handle error with only message ✓ should handle axios error without response logErrorSafely {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Test error","stack":"Error: Test error\n at test.js:1:1","name":"Error","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log error safely without circular references {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Test error","stack":"Error: Test error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/error.logger.util.spec.ts:132:27)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","endpoint":"/api/test","projectId":"123","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should log error with additional context {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Axios error","stack":"Error: Axios error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/error.logger.util.spec.ts:149:32)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","response":{"status":500,"statusText":"Internal Server Error","data":{"error":"Server error"}},"source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle axios error with response {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"String error message","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle non-Error objects {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Circular error","stack":"Error: Circular error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/error.logger.util.spec.ts:181:32)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should not throw when error has circular references {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"null","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle null error {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"undefined","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle undefined error {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Test error","stack":"Error: Test error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/error.logger.util.spec.ts:213:27)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","userId":"user-123","action":"fetchProjects","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should merge additional context with error info {"level":"error","timestamp":"2026-07-09 13:05:54.5454","message":"Complete axios error","stack":"Error: Complete axios error\n at Context. (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/test/unit/util/error.logger.util.spec.ts:229:32)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:366:21)\n at Test.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at Runner.runTest (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:677:10)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:801:12\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:594:14)\n at /home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:604:7\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:486:14)\n at cbHookRun (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:551:7)\n at done (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:310:5)\n at callFn (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:389:7)\n at Hook.Runnable.run (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runnable.js:354:5)\n at next (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:510:10)\n at Immediate._onImmediate (/home/azureuser/BackendDevelopmentAgentPipeline/storage/clones/aee7a1524d94/api2/node_modules/mocha/lib/runner.js:572:5)\n at processImmediate (node:internal/timers:504:21)","name":"Error","code":"ETIMEDOUT","response":{"status":408,"statusText":"Request Timeout","data":{"timeout":true}},"status":408,"statusText":"Request Timeout","source":"ErrorLoggerUtilTest","userName":"Unknown","sessionId":"unknown","correlation_id":"unknown","url":"","appVersion":"1.19.0"} ✓ should handle error with all axios properties metrics initMetrics ✓ should initialize the registry getRegistry ✓ should return the initialized registry ✓ should throw error if metrics not initialized createTimer ✓ should create a timer with default buckets ✓ should create a timer with custom buckets ✓ should measure duration when start() and end() are called ✓ should allow updating labels when ending timer ✓ should observe duration directly ✓ should work with no labels createCounter ✓ should create a counter with labels ✓ should increment counter with default value ✓ should increment counter with custom value ✓ should work with no labels ✓ should work with empty label values createGauge ✓ should create a gauge with labels ✓ should set gauge value ✓ should increment gauge with default value ✓ should increment gauge with custom value ✓ should decrement gauge with default value ✓ should decrement gauge with custom value ✓ should work with no labels createHistogram ✓ should create a histogram with default buckets ✓ should create a histogram with custom buckets ✓ should observe values ✓ should work with no labels createSummary ✓ should create a summary with default percentiles ✓ should create a summary with custom percentiles ✓ should observe values ✓ should work with no labels normalizeEndpoint ✓ should remove query parameters ✓ should replace UUIDs with {id} ✓ should replace MongoDB ObjectIds with {id} ✓ should replace numeric IDs with {id} ✓ should replace email addresses with {email} ✓ should handle multiple replacements ✓ should handle endpoints with no IDs ✓ should handle empty string ✓ should handle complex paths with query params ✓ should be case-insensitive for UUIDs integration tests ✓ should create multiple different metric types ✓ should allow using timer with async operations ✓ should handle numeric label values withTimer ✓ should successfully execute async function and record success status ✓ should record error status when function throws ✓ should preserve error type and message ✓ should pass through return values correctly ✓ should handle errorLabels function to extract additional labels ✓ should handle errorLabels function that returns empty object ✓ should work with numeric label values ✓ should measure duration correctly (51ms) ✓ should handle multiple sequential calls ✓ should handle concurrent calls ✓ should handle errors in concurrent calls ✓ should handle undefined errorLabels parameter ✓ should handle errorLabels function that throws and still throw original error token.util encryptToken ✓ should hash the token correctly (609ms) getNewToken ✓ should generate a new token validateAndCompareHashedToken ✓ should return true for a valid token (601ms) ✓ should return false for an invalid token (706ms) ✓ should return false if hash is not provided 1707 passing (9s) 5 pending ---------------------------------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ---------------------------------------|---------|----------|---------|---------|------------------- All files | 65.36 | 53.99 | 59.17 | 64.14 | config | 54.54 | 43.47 | 52.83 | 54.54 | environment.config.ts | 54.54 | 43.47 | 52.83 | 54.54 | ...66,69-70,74-75 src/api/ai | 55.55 | 100 | 0 | 55.55 | ai.service.ts | 55.55 | 100 | 0 | 55.55 | 8-9,13-14 src/api/auth | 100 | 100 | 100 | 100 | authorities.types.ts | 100 | 100 | 100 | 100 | src/api/banners | 89.7 | 90.83 | 100 | 89.68 | outage.messages.controller.ts | 100 | 85.29 | 100 | 100 | 50-60,67 outage.messages.validator.ts | 83.9 | 93.02 | 100 | 83.11 | ...80-82,86,91-93 src/api/cache | 33.33 | 0 | 33.33 | 37.93 | cache.utils.ts | 33.33 | 0 | 33.33 | 37.93 | ...30,43-44,48-50 src/api/v2 | 91.3 | 89.02 | 90.9 | 90 | common.validator.ts | 91.3 | 89.02 | 90.9 | 90 | 14-21,72-76 src/api/v2/cde | 33.14 | 12.67 | 31.81 | 33.52 | cde.helper.ts | 33.14 | 12.67 | 31.81 | 33.52 | ...96-302,306-329 src/api/v2/devices | 65.66 | 26.16 | 69.23 | 66.81 | devices.controller.ts | 78.88 | 34.14 | 87.5 | 78 | ...49-252,270-271 devices.validator.ts | 45.19 | 21.21 | 40 | 43.83 | ...99-104,108-138 src/api/v2/disciplines | 41.93 | 100 | 20 | 41.37 | default.disciplines.controller.ts | 41.93 | 100 | 20 | 41.37 | 23-30,35-42,47-53 src/api/v2/issues | 100 | 100 | 100 | 100 | issue.severity.controller.ts | 100 | 100 | 100 | 100 | src/api/v2/logs | 76.92 | 65.3 | 70 | 75.71 | logs.controller.ts | 78.72 | 75 | 75 | 78.57 | 73-84 logs.validator.ts | 74.19 | 58.62 | 50 | 71.42 | 35-46 src/api/v2/portfolios | 76.61 | 70.93 | 85 | 79.21 | portfolios.controller.ts | 80.35 | 85.71 | 91.66 | 80.35 | ...24-228,255-259 portfolios.validator.ts | 71.91 | 68.05 | 75 | 77.27 | ...,89-94,103,106 src/api/v2/projects | 83.33 | 83.33 | 76.74 | 83.14 | projects.controller.ts | 81.92 | 75.86 | 75 | 81.7 | ...71,720-722,739 projects.validator.ts | 86.57 | 88.75 | 85.71 | 86.99 | ...81,184,187,214 src/api/v2/projects/activities | 84.61 | 79.81 | 78.84 | 84.14 | activities.categories.controller.ts | 65.27 | 40.74 | 62.5 | 63.41 | ...46-156,173-191 activities.categories.helpers.ts | 98.71 | 90.19 | 100 | 98.61 | 89 activities.controller.ts | 68.08 | 100 | 66.66 | 66.66 | 34-42,50-61 activities.mapping.controller.ts | 98.14 | 88.88 | 100 | 98.07 | 58 activities.validators.ts | 99.01 | 98.66 | 100 | 100 | 50 package.prediction.controller.ts | 100 | 66.66 | 100 | 100 | 18-19 src/api/v2/projects/assets | 100 | 100 | 100 | 100 | assets.controller.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/assettypes | 100 | 100 | 100 | 100 | asset.types.controller.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/batchfiles | 78.78 | 25 | 100 | 78.78 | batchfiles.controller.ts | 78.78 | 25 | 100 | 78.78 | 19-29,46,59 src/api/v2/projects/categoryTypes | 91.57 | 100 | 88.23 | 91.02 | category.types.controller.ts | 91.57 | 100 | 88.23 | 91.02 | 110-117 src/api/v2/projects/cde | 50.56 | 47.82 | 46.66 | 48.82 | cde.controller.ts | 32.17 | 0 | 30 | 32.17 | ...81-198,203-270 cde.criteria.validator.ts | 78.37 | 60 | 66.66 | 78.78 | 17-21,28-31,56-57 cde.link.validator.ts | 92.3 | 88.88 | 100 | 90.9 | 43,62 ...projects/commissioning/systemTypes | 100 | 100 | 100 | 100 | system.types.controller.ts | 100 | 100 | 100 | 100 | ...2/projects/commissioning/workflows | 100 | 100 | 100 | 100 | ...issioning.workflows.controller.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/coordinates | 90.98 | 84.11 | 91.93 | 90.5 | conflict.controller.ts | 100 | 100 | 100 | 100 | conflict.validator.ts | 94.73 | 91.66 | 100 | 93.75 | 43-44 coordinates.controller.ts | 82.55 | 77.41 | 78.26 | 81.81 | ...73,249,254-255 coordinates.helper.ts | 94.54 | 65 | 100 | 96.07 | 70,78 coordinates.validator.ts | 97.4 | 95 | 100 | 96.77 | 34,56 src/api/v2/projects/devices | 100 | 100 | 100 | 100 | project.devices.controller.ts | 100 | 100 | 100 | 100 | project.devices.delegation.ts | 100 | 100 | 100 | 100 | project.devices.validator.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/devices/handlers | 100 | 92.85 | 100 | 100 | project.devices.v1.handler.ts | 100 | 92.85 | 100 | 100 | 38 src/api/v2/projects/disciplines | 92.85 | 75 | 100 | 91.66 | disciplines.controller.ts | 92.85 | 75 | 100 | 91.66 | 18,36 src/api/v2/projects/elements | 93.77 | 84.11 | 95.65 | 93.29 | element-helpers.ts | 50 | 100 | 0 | 50 | 14 elements.activities.controller.ts | 95.31 | 78.37 | 100 | 94.82 | 23,42-43 elements.activities.validator.ts | 100 | 100 | 100 | 100 | elements.status.controller.ts | 90.69 | 80.76 | 100 | 89.74 | 82-89,131-137 elements.status.validator.ts | 96.55 | 87.5 | 100 | 97.77 | 47 src/api/v2/projects/folders | 91.66 | 82.81 | 96 | 91.01 | folders.controller.ts | 89.4 | 70.27 | 95.23 | 88.88 | ...93-197,237,243 folders.validator.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/images | 75.28 | 50 | 100 | 75.28 | image.uploader.ts | 75.28 | 50 | 100 | 75.28 | ...97-214,233-282 ...api/v2/projects/images/360captures | 94.03 | 83.63 | 100 | 94.4 | 360captures.controller.ts | 95.74 | 72.72 | 100 | 95.18 | 70,83,104-105 360captures.validator.ts | 91.22 | 86.36 | 100 | 92.85 | 44-47 src/api/v2/projects/images/photos | 83.69 | 71.42 | 88 | 83 | photos.controller.ts | 88.07 | 75 | 90 | 86.95 | 79,111,124-140 photos.validator.ts | 77.33 | 70.83 | 80 | 77.04 | ...59,62,69,89-94 src/api/v2/projects/issues | 72.07 | 49.42 | 67.5 | 70.94 | issue.comments.controller.ts | 100 | 100 | 100 | 100 | issue.comments.validator.ts | 88.46 | 75 | 100 | 100 | 17-28 issue.notification.service.ts | 25 | 0 | 0 | 25 | 25-49,54-71 issues.controller.ts | 69.48 | 29.41 | 61.9 | 68.38 | ...25-233,238-244 issues.validator.ts | 78.18 | 67.85 | 72.72 | 77.38 | ...99,154-167,181 src/api/v2/projects/issues/categories | 97.72 | 92 | 100 | 97.36 | issues.categories.controller.ts | 100 | 100 | 100 | 100 | issues.categories.validator.ts | 95.74 | 91.3 | 100 | 95.12 | 69,73 .../v2/projects/issues/fileReferences | 97.22 | 78.94 | 100 | 96.87 | issues.fileReferences.controller.ts | 96.15 | 70.83 | 100 | 95.83 | 67,72 issues.fileReferences.validator.ts | 100 | 92.85 | 100 | 100 | 11 src/api/v2/projects/issues/history | 99.29 | 83.15 | 100 | 99.23 | issue.history.controller.ts | 99.23 | 82.41 | 100 | 99.18 | 86 issue.history.validator.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/issues/models | 100 | 83.33 | 100 | 100 | issues.models.controller.ts | 100 | 50 | 100 | 100 | 15-34 issues.models.validator.ts | 100 | 92.85 | 100 | 100 | 11 src/api/v2/projects/markers | 81.73 | 84.44 | 80 | 83.87 | marker.validator.ts | 81.81 | 81.08 | 83.33 | 86.36 | 30-34,77-81 markers.controller.ts | 81.63 | 100 | 75 | 81.63 | 55-57,68-75 src/api/v2/projects/models | 94.4 | 92.5 | 94.73 | 93.7 | models.controller.ts | 89.1 | 83.33 | 87.5 | 88.5 | 26,84-92,136-137 models.validator.ts | 95.16 | 91.48 | 100 | 94.17 | 36-39,93-96 models.version.controller.ts | 100 | 100 | 100 | 100 | request.validator.ts | 100 | 100 | 100 | 100 | src/api/v2/projects/projectfiles | 86.2 | 84.61 | 57.14 | 86.53 | projectfiles.controller.ts | 86.2 | 84.61 | 57.14 | 86.53 | 18-38 src/api/v2/projects/rooms | 88.63 | 50 | 71.42 | 89.18 | rooms.controller.ts | 100 | 100 | 100 | 100 | rooms.validator.ts | 72.22 | 50 | 33.33 | 71.42 | 31-35,39 ...pi/v2/projects/rooms/capturepoints | 86.13 | 73.64 | 100 | 93.75 | rooms.capturepoints.controller.ts | 100 | 50 | 100 | 100 | 46-47 rooms.capturepoints.validator.ts | 80.55 | 75 | 100 | 90.9 | ...67,170,178,181 src/api/v2/projects/schedules | 97.36 | 93.33 | 100 | 97.77 | schedules.controller.ts | 96.92 | 75 | 100 | 96.22 | 32-33 schedules.validator.ts | 97.95 | 97.29 | 100 | 100 | 32 src/api/v2/projects/userfiles | 86.84 | 90.62 | 80 | 86.36 | userfiles.controller.ts | 85.24 | 91.66 | 75 | 84.9 | 23,32-45 userfiles.validator.ts | 93.33 | 87.5 | 100 | 92.3 | 14 src/api/v2/projects/videos | 69.79 | 74.73 | 62.5 | 68.51 | videos.controller.ts | 67.64 | 80 | 57.89 | 66.94 | ...69-197,201-213 videos.validator.ts | 75 | 68.88 | 80 | 72.72 | 41-62,86,94 src/api/v2/tenants | 69.76 | 50 | 60 | 69.44 | tenant.controller.ts | 61.29 | 0 | 50 | 59.25 | 27-40 tenant.validator.ts | 91.66 | 75 | 100 | 100 | 17 src/clients | 50.13 | 45.35 | 37.5 | 49.65 | ai.service.client.ts | 68.05 | 44.23 | 58.33 | 67.6 | ...-69,82,146,163 authorised.iam.client.ts | 11.34 | 0 | 0 | 10.41 | ...25-188,193-201 authorised.notification.client.ts | 78.57 | 52 | 50 | 78.04 | 77-80,110-122 autodesk.client.ts | 10.61 | 100 | 10.52 | 9.82 | ...74,285-287,293 autodesk.profile.client.ts | 63.15 | 75 | 50 | 61.11 | 16-28,42 billy.search.client.ts | 55.55 | 66.66 | 50 | 52.94 | 22-42,55 clients.ts | 52 | 31.94 | 35.71 | 53.06 | ...32,46-55,66-96 iam.client.helper.ts | 100 | 90.9 | 100 | 100 | 29,70 iam.client.ts | 69.29 | 49.09 | 58.82 | 68.75 | ...18,290,296,301 mapbox.client.ts | 100 | 91.66 | 100 | 100 | 33,48-49 redis.client.ts | 33.33 | 22.44 | 31.25 | 34.54 | ...06-141,150-220 service.clients.ts | 100 | 100 | 100 | 100 | src/db | 28.07 | 0 | 0 | 26 | db.ts | 28.07 | 0 | 0 | 26 | ...93-100,112-126 src/middleware | 44.53 | 28.88 | 46.15 | 43.11 | api-version.middleware.ts | 100 | 100 | 100 | 100 | authorisation.ts | 56.03 | 34.28 | 47.61 | 54.9 | ...96,128-156,184 middleware.ts | 26.36 | 16.32 | 41.17 | 25 | ...75-192,201-208 src/models | 100 | 100 | 100 | 100 | egress.ts | 100 | 100 | 100 | 100 | ingress.ts | 100 | 100 | 100 | 100 | src/services | 37.19 | 27.91 | 27.08 | 36.9 | 360capture.service.ts | 60.46 | 45 | 50 | 59.52 | ...8,42-44,90-100 activities.categories.service.ts | 17.92 | 0 | 0 | 18.26 | ...50-179,185-201 activities.service.ts | 21.52 | 11.11 | 11.11 | 21.67 | ...25-168,189-327 asset.types.service.ts | 29.03 | 0 | 0 | 30 | ...51,56-64,69-74 assets.service.ts | 29.03 | 0 | 0 | 30 | ...51,56-64,69-74 azure.blob.service.ts | 18.79 | 0 | 0 | 16.8 | ...08-211,233-266 azure.table.service.ts | 14.92 | 0 | 0 | 16.39 | ...67-106,112-145 batchfiles.service.ts | 25.8 | 0 | 0 | 25.8 | ...,81-94,112-113 category.types.service.ts | 27.08 | 0 | 0 | 27.08 | ...6-75,80-85,111 cde.service.ts | 17.72 | 0 | 0 | 17.72 | ...13-223,227-347 cde.user.service.ts | 30.76 | 0 | 0 | 30.76 | 9-25 commissioning.workflows.service.ts | 24.44 | 0 | 0 | 24.44 | ...57,62-73,78-88 coordinates.conflict.service.ts | 16.25 | 0 | 0 | 16.25 | ...,88-98,105-184 coordinates.service.ts | 15.38 | 0 | 0 | 15.5 | ...69-179,185-245 default.disciplines.service.ts | 24.24 | 0 | 0 | 25 | ...36,41-48,53-59 devices.service.ts | 37.16 | 18.03 | 25 | 37.24 | ...48,254,262-291 disciplines.service.ts | 31.57 | 100 | 0 | 33.33 | 9-22,26-36 fileReference.service.ts | 42.85 | 100 | 0 | 42.85 | 6-13 folders.service.ts | 71.79 | 50 | 88.46 | 68.57 | ...16-233,253-257 issue.comments.service.ts | 75.92 | 67.5 | 100 | 74.5 | 24-32,55-64 issue.history.service.ts | 41.86 | 68 | 42.85 | 41.46 | ...,80,99-105,156 issue.location.ts | 33.33 | 0 | 0 | 31.57 | 11-22,28-34 issue.severity.service.ts | 38.46 | 0 | 0 | 38.46 | 9-23 issue.types.service.ts | 27.58 | 0 | 0 | 24 | 9-20,26-51 issues.categories.service.ts | 42.85 | 0 | 0 | 45 | 23-48,60 issues.fileReference.service.ts | 42.85 | 0 | 0 | 45 | 12-30,36 issues.models.service.ts | 50 | 0 | 0 | 50 | 11-21,27 issues.service.ts | 37.93 | 27.88 | 31.42 | 36.41 | ...62-401,469-502 markers.services.ts | 15.15 | 0 | 0 | 15.38 | ...7,74-86,93-111 model.elements.status.service.ts | 15.03 | 0 | 0 | 15.03 | ...60-285,291-292 models.service.ts | 19.78 | 1.52 | 10 | 20 | ...95-283,295-414 models.version.service.ts | 21.73 | 0 | 0 | 22.05 | ...44-155,167-176 package.predictions.service.ts | 23.8 | 0 | 0 | 23.8 | 12-40 photos.service.ts | 50 | 42.85 | 22.22 | 49.12 | ...7,72-74,99-133 portfolio.service.ts | 70.05 | 49.25 | 91.66 | 72.82 | ...78,610-613,621 projectfiles.service.ts | 88.88 | 90 | 85.71 | 89.7 | 63-70 projects.service.ts | 50 | 49.52 | 39.47 | 49.82 | ...06,909,912,915 rooms.capturepoints.service.ts | 75.62 | 71.79 | 85.71 | 75.47 | ...99,310,314-319 rooms.service.ts | 20.68 | 0 | 0 | 20.68 | 9-22,28-50 schedules.service.ts | 47.05 | 26.43 | 46.66 | 46.66 | ...42,333-365,391 system.types.service.ts | 23.91 | 0 | 0 | 23.91 | ...7,82-90,95-100 userfiles.service.ts | 19.23 | 0 | 0 | 19.23 | ...02-304,323-372 videos.service.ts | 44.82 | 18.75 | 25 | 43.85 | ...94-105,117-137 src/types | 90.1 | 92.85 | 73.58 | 89.88 | DbColumnsMappings.ts | 100 | 100 | 100 | 100 | categoryTypeHierarchyMapping.ts | 100 | 100 | 100 | 100 | cde.types.ts | 100 | 100 | 100 | 100 | devices.types.ts | 100 | 100 | 100 | 100 | errortypes.ts | 77.19 | 100 | 50 | 77.19 | ...04,110,122,134 http.types.ts | 100 | 100 | 100 | 100 | iam.types.ts | 100 | 100 | 100 | 100 | logger.properties.ts | 100 | 100 | 100 | 100 | marker.types.ts | 100 | 100 | 100 | 100 | model.elements.ts | 100 | 100 | 100 | 100 | notification.types.ts | 87.17 | 71.42 | 83.33 | 87.17 | 24-32 portfolio.types.ts | 100 | 100 | 100 | 100 | project.attachment.types.ts | 100 | 100 | 100 | 100 | src/util | 83.61 | 72.18 | 81.37 | 83.52 | array.util.ts | 100 | 100 | 100 | 100 | azure.util.ts | 95.78 | 85 | 95 | 95.74 | 66,207-228 blob-download-url.cache.ts | 94.2 | 96.36 | 100 | 94.11 | 108,155-157 business-region.ts | 100 | 100 | 100 | 100 | cde.token.util.ts | 100 | 100 | 100 | 100 | error.logger.util.ts | 100 | 100 | 100 | 100 | errorFormatter.ts | 96 | 100 | 85.71 | 95.23 | 50 fileDeletion.handler.ts | 96.66 | 72.72 | 100 | 96.66 | 80 fileReference.deletion.util.ts | 35.71 | 0 | 0 | 35.71 | 24-34 image.util.ts | 69.23 | 43.75 | 100 | 67.56 | ...37,44,56,74-80 logger.ts | 100 | 96.42 | 100 | 100 | 58 metrics.ts | 82.02 | 63.63 | 71.42 | 82.02 | ...87-291,328-332 pagination.util.ts | 88.88 | 91.66 | 100 | 85.71 | 14 query.util.ts | 26.19 | 2.56 | 42.85 | 26.19 | 11-23,39-47,54-76 store.ts | 100 | 100 | 100 | 100 | token.util.ts | 81.48 | 66.66 | 71.42 | 81.48 | 19,42-46 url.util.ts | 100 | 100 | 100 | 100 | username.ts | 83.33 | 77.77 | 100 | 100 | 8-11 utilities.ts | 100 | 100 | 100 | 100 | ---------------------------------------|---------|----------|---------|---------|-------------------