\ > flyer-crawler@0.11.11 test > node scripts/check-linux.js && cross-env NODE_ENV=test tsx ./node_modules/vitest/vitest.mjs run \[?25l  RUN  v4.0.16 /app --- [EXECUTION PROOF] tailwind.config.js is being loaded. --- --- [EXECUTION PROOF] postcss.config.js is being loaded. --- [POSTCSS] Attempting to use Tailwind config at: /app/tailwind.config.js [POSTCSS] Imported tailwind.config.js object: { "content": [ "./index.html", "./src/**/*.{js,ts,jsx,tsx}" ] } [?2026h  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 983ms [?2026l[?2026h  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 2.00s [?2026l[?2026h  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 2.91s [?2026l[?2026h  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 3.91s [?2026l[?2026h  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 4.92s [?2026l[?2026h  ❯ src/services/apiClient.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 5.73s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 5.86s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts [queued]  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 8.60s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts [queued]  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 9.51s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts [queued]  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 11.18s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts [queued]  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 12.57s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts [queued]  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (0)  Start at 07:51:47  Duration 13.49s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts 0/62  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (62)  Start at 07:51:47  Duration 14.55s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts 0/62  ❯ src/services/db/user.db.test.ts [queued]  Test Files 0 passed (242)  Tests 0 passed (62)  Start at 07:51:47  Duration 14.78s [?2026l[?2026h ✓ src/services/db/expiry.db.test.ts (62 tests) 291ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts 62/62  ❯ src/services/db/user.db.test.ts [queued]  Test Files 1 passed (242)  Tests 62 passed (62)  Start at 07:51:47  Duration 15.40s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts 62/62  ❯ src/services/db/user.db.test.ts [queued]  Test Files 1 passed (242)  Tests 62 passed (62)  Start at 07:51:47  Duration 15.77s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts [queued]  ❯ src/services/db/expiry.db.test.ts 62/62  ❯ src/services/db/user.db.test.ts 1/69  Test Files 1 passed (242)  Tests 63 passed (131)  Start at 07:51:47  Duration 16.28s [?2026l[?2026h ✓ src/services/db/user.db.test.ts (69 tests) 204ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts 0/112  ❯ src/services/db/user.db.test.ts 69/69  Test Files 2 passed (242)  Tests 131 passed (243)  Start at 07:51:47  Duration 16.56s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts 1/112  ❯ src/services/db/user.db.test.ts 69/69  Test Files 2 passed (242)  Tests 132 passed (243)  Start at 07:51:47  Duration 16.86s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts 56/112  ❯ src/services/db/user.db.test.ts 69/69  Test Files 2 passed (242)  Tests 187 passed (243)  Start at 07:51:47  Duration 16.96s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts [queued]  ❯ src/services/apiClient.test.ts 75/112  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 2 passed (242)  Tests 206 passed (243)  Start at 07:51:47  Duration 17.27s [?2026l[?2026h ✓ src/services/apiClient.test.ts (112 tests) 547ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts 1/49  ❯ src/services/apiClient.test.ts 112/112  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 3 passed (242)  Tests 244 passed (292)  Start at 07:51:47  Duration 17.41s [?2026l[?2026hstdout | src/services/aiService.server.test.ts > AI Service (Server) > extractCoreDataFromFlyerImage > should throw an error if the AI response contains malformed JSON TEST START: 'should throw an error if the AI response contains malformed JSON' stdout | src/services/aiService.server.test.ts > AI Service (Server) > extractCoreDataFromFlyerImage > should throw an error if the AI API call fails TEST START: 'should throw an error if the AI API call fails' stdout | src/services/aiService.server.test.ts > AI Service (Server) > _parseJsonFromAiResponse (private method) > should handle JSON arrays correctly  --- TEST LOG: "should handle JSON arrays correctly" --- - Test Input String: "Some text preceding ```json\n\n[1, 2, 3]\n\n``` and some text after." - Actual Output from function: [1,2,3] - Expected Output: [1,2,3] --- END TEST LOG --- stdout | src/services/aiService.server.test.ts > AI Service (Server) > extractTextFromImageArea > should call sharp to crop the image and call the AI with the correct prompt TEST START: 'should call sharp to crop...'  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts 9/49  ❯ src/services/apiClient.test.ts 112/112  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 3 passed (242)  Tests 252 passed (292)  Start at 07:51:47  Duration 17.71s [?2026l[?2026hstdout | src/services/aiService.server.test.ts > AI Service (Server) > extractTextFromImageArea > should throw an error if the AI API call fails TEST START: 'should throw an error if the AI API call fails' (extractTextFromImageArea)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts 49/49  ❯ src/services/apiClient.test.ts 112/112  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 17.96s [?2026l[?2026hstderr | src/services/aiService.server.test.ts > AI Service (Server) > enqueueFlyerProcessing > should enqueue job with user address if profile exists [DEBUG] aiService.enqueueFlyerProcessing resolved baseUrl: "https://example.com" stderr | src/services/aiService.server.test.ts > AI Service (Server) > enqueueFlyerProcessing > should enqueue job without address if profile is missing [DEBUG] aiService.enqueueFlyerProcessing resolved baseUrl: "https://example.com"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts 49/49  ❯ src/services/apiClient.test.ts 112/112  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 17.96s [?2026l[?2026h ✓ src/services/aiService.server.test.ts (49 tests) 489ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/aiService.server.test.ts 49/49  ❯ src/services/apiClient.test.ts 112/112  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 17.96s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 18.59s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 19.38s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts [queued]  ❯ src/services/upcService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 19.50s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/flyer.db.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts [queued]  ❯ src/services/upcService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 20.33s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/flyer.db.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts [queued]  ❯ src/services/upcService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (292)  Start at 07:51:47  Duration 21.34s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/flyer.db.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts 0/46  ❯ src/services/upcService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 292 passed (338)  Start at 07:51:47  Duration 21.74s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/flyer.db.test.ts [queued]  ❯ src/services/db/receipt.db.test.ts 1/46  ❯ src/services/upcService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 4 passed (242)  Tests 293 passed (338)  Start at 07:51:47  Duration 21.95s [?2026l[?2026h ✓ src/services/db/receipt.db.test.ts (46 tests) 190ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/flyer.db.test.ts 1/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 0/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 5 passed (242)  Tests 339 passed (441)  Start at 07:51:47  Duration 22.23s [?2026l[?2026hstderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should execute an INSERT query and return the new flyer [DB DEBUG] FlyerRepository.insertFlyer called with: { "file_name": "test.jpg", "image_url": "https://example.com/images/test.jpg", "icon_url": "https://example.com/images/icons/test.jpg", "checksum": "checksum123", "store_id": 1, "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Test St", "status": "processed", "item_count": 10, "uploaded_by": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" } [DB DEBUG] Final URLs for insert: { imageUrl: 'https://example.com/images/test.jpg', iconUrl: 'https://example.com/images/icons/test.jpg' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw UniqueConstraintError on duplicate checksum [DB DEBUG] FlyerRepository.insertFlyer called with: { "checksum": "duplicate-checksum" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw UniqueConstraintError on duplicate checksum [DB DEBUG] insertFlyer caught error: Error: duplicate key value violates unique constraint "flyers_checksum_key" at /app/src/services/db/flyer.db.test.ts:185:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23505' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw UniqueConstraintError on duplicate checksum [DB DEBUG] FlyerRepository.insertFlyer called with: { "checksum": "duplicate-checksum" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw UniqueConstraintError on duplicate checksum [DB DEBUG] insertFlyer caught error: Error: duplicate key value violates unique constraint "flyers_checksum_key" at /app/src/services/db/flyer.db.test.ts:185:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23505' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw a generic error if the database query fails [DB DEBUG] FlyerRepository.insertFlyer called with: { "checksum": "fail-checksum" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw a generic error if the database query fails [DB DEBUG] insertFlyer caught error: Error: DB Connection Error at /app/src/services/db/flyer.db.test.ts:211:48 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid checksum format [DB DEBUG] FlyerRepository.insertFlyer called with: { "checksum": "short" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid checksum format [DB DEBUG] insertFlyer caught error: Error: violates check constraint "flyers_checksum_check" at /app/src/services/db/flyer.db.test.ts:223:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23514' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid checksum format [DB DEBUG] FlyerRepository.insertFlyer called with: { "checksum": "short" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid checksum format [DB DEBUG] insertFlyer caught error: Error: violates check constraint "flyers_checksum_check" at /app/src/services/db/flyer.db.test.ts:223:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23514' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid status [DB DEBUG] FlyerRepository.insertFlyer called with: { "status": "invalid_status" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid status [DB DEBUG] insertFlyer caught error: Error: violates check constraint "flyers_status_check" at /app/src/services/db/flyer.db.test.ts:237:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23514' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid status [DB DEBUG] FlyerRepository.insertFlyer called with: { "status": "invalid_status" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid status [DB DEBUG] insertFlyer caught error: Error: violates check constraint "flyers_status_check" at /app/src/services/db/flyer.db.test.ts:237:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23514' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid URL format [DB DEBUG] FlyerRepository.insertFlyer called with: { "image_url": "not-a-url" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'not-a-url', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/not-a-url', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid URL format [DB DEBUG] insertFlyer caught error: Error: violates check constraint "url_check" at /app/src/services/db/flyer.db.test.ts:251:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23514' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid URL format [DB DEBUG] FlyerRepository.insertFlyer called with: { "image_url": "not-a-url" } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'not-a-url', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/not-a-url', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should throw CheckConstraintError for invalid URL format [DB DEBUG] insertFlyer caught error: Error: violates check constraint "url_check" at /app/src/services/db/flyer.db.test.ts:251:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) { code: '23514' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should transform relative icon_url to absolute URL with leading slash [DB DEBUG] FlyerRepository.insertFlyer called with: { "file_name": "test.jpg", "image_url": "https://example.com/images/test.jpg", "icon_url": "/uploads/icons/test-icon.jpg", "checksum": "checksum-with-relative-icon", "store_id": 1, "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Test St", "status": "processed", "item_count": 10, "uploaded_by": null } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'https://example.com/images/test.jpg', originalIcon: '/uploads/icons/test-icon.jpg' } [DB DEBUG] Final URLs for insert: { imageUrl: 'https://example.com/images/test.jpg', iconUrl: 'http://localhost:3000/uploads/icons/test-icon.jpg' } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > insertFlyer > should transform relative icon_url to absolute URL without leading slash [DB DEBUG] FlyerRepository.insertFlyer called with: { "file_name": "test.jpg", "image_url": "https://example.com/images/test.jpg", "icon_url": "uploads/icons/test-icon.jpg", "checksum": "checksum-with-relative-icon2", "store_id": 1, "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Test St", "status": "processed", "item_count": 10, "uploaded_by": null } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'https://example.com/images/test.jpg', originalIcon: 'uploads/icons/test-icon.jpg' } [DB DEBUG] Final URLs for insert: { imageUrl: 'https://example.com/images/test.jpg', iconUrl: 'http://localhost:3000/uploads/icons/test-icon.jpg' }  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts [queued]  ❯ src/routes/user.routes.test.ts [queued]  ❯ src/services/db/flyer.db.test.ts 1/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 0/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 5 passed (242)  Tests 339 passed (441)  Start at 07:51:47  Duration 22.23s [?2026l[?2026hstderr | src/services/db/flyer.db.test.ts > Flyer DB Service > createFlyerAndItems > should execute find/create store, insert flyer, and insert items using the provided client [DB DEBUG] FlyerRepository.insertFlyer called with: { "file_name": "transact.jpg", "store_name": "Transaction Store", "store_id": 1 } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > createFlyerAndItems > should create a flyer with no items if items array is empty [DB DEBUG] FlyerRepository.insertFlyer called with: { "file_name": "empty.jpg", "store_name": "Empty Store", "store_id": 2 } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > createFlyerAndItems > should propagate an error if any step fails [DB DEBUG] FlyerRepository.insertFlyer called with: { "file_name": "fail.jpg", "store_name": "Fail Store", "store_id": 1 } [DB DEBUG] Transforming relative URLs: { baseUrl: 'http://localhost:3000', originalImage: 'placeholder.jpg', originalIcon: null } [DB DEBUG] Final URLs for insert: { imageUrl: 'http://localhost:3000/placeholder.jpg', iconUrl: null } stderr | src/services/db/flyer.db.test.ts > Flyer DB Service > createFlyerAndItems > should propagate an error if any step fails [DB DEBUG] insertFlyer caught error: Error: Underlying DB call failed at /app/src/services/db/flyer.db.test.ts:592:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 0/61  ❯ src/routes/user.routes.test.ts 0/107  ❯ src/services/db/flyer.db.test.ts 20/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 43/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 5 passed (242)  Tests 401 passed (609)  Start at 07:51:47  Duration 22.44s [?2026l[?2026hstdout | src/services/db/flyer.db.test.ts > Flyer DB Service > getFlyers > should use default limit and offset when none are provided [TEST DEBUG] Running test: getFlyers > should use default limit and offset stdout | src/services/db/flyer.db.test.ts > Flyer DB Service > getFlyers > should use default limit and offset when none are provided [TEST DEBUG] mockPoolInstance.query calls: [ [ "\n SELECT\n f.*,\n json_build_object(\n 'store_id', s.store_id,\n 'name', s.name,\n 'logo_url', s.logo_url,\n 'locations', COALESCE(\n (SELECT json_agg(\n json_build_object(\n 'address_line_1', a.address_line_1,\n 'city', a.city,\n 'province_state', a.province_state,\n 'postal_code', a.postal_code\n )\n )\n FROM public.store_locations sl\n JOIN public.addresses a ON sl.address_id = a.address_id\n WHERE sl.store_id = s.store_id),\n '[]'::json\n )\n ) as store\n FROM public.flyers f\n JOIN public.stores s ON f.store_id = s.store_id\n ORDER BY f.created_at DESC LIMIT $1 OFFSET $2", [ 20, 0 ] ] ] stdout | src/services/db/flyer.db.test.ts > Flyer DB Service > getFlyers > should use provided limit and offset values [TEST DEBUG] Running test: getFlyers > should use provided limit and offset stdout | src/services/db/flyer.db.test.ts > Flyer DB Service > getFlyers > should use provided limit and offset values [TEST DEBUG] mockPoolInstance.query calls: [ [ "\n SELECT\n f.*,\n json_build_object(\n 'store_id', s.store_id,\n 'name', s.name,\n 'logo_url', s.logo_url,\n 'locations', COALESCE(\n (SELECT json_agg(\n json_build_object(\n 'address_line_1', a.address_line_1,\n 'city', a.city,\n 'province_state', a.province_state,\n 'postal_code', a.postal_code\n )\n )\n FROM public.store_locations sl\n JOIN public.addresses a ON sl.address_id = a.address_id\n WHERE sl.store_id = s.store_id),\n '[]'::json\n )\n ) as store\n FROM public.flyers f\n JOIN public.stores s ON f.store_id = s.store_id\n ORDER BY f.created_at DESC LIMIT $1 OFFSET $2", [ 10, 5 ] ] ]  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 0/61  ❯ src/routes/user.routes.test.ts 0/107  ❯ src/services/db/flyer.db.test.ts 20/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 43/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 5 passed (242)  Tests 401 passed (609)  Start at 07:51:47  Duration 22.44s [?2026l[?2026h ❯ src/services/db/flyer.db.test.ts (45 tests | 1 failed) 319ms ✓ should find an existing store and return its ID 16ms ✓ should create a new store if it does not exist and return its ID 3ms ✓ should throw an error if the database query fails 9ms ✓ should throw an error if store is not found after upsert (edge case) 6ms ✓ should execute an INSERT query and return the new flyer 19ms ✓ should throw UniqueConstraintError on duplicate checksum 34ms ✓ should throw a generic error if the database query fails 13ms ✓ should throw CheckConstraintError for invalid checksum format 17ms ✓ should throw CheckConstraintError for invalid status 11ms ✓ should throw CheckConstraintError for invalid URL format 14ms ✓ should transform relative icon_url to absolute URL with leading slash 5ms ✓ should transform relative icon_url to absolute URL without leading slash 4ms ✓ should build a bulk INSERT query and return the new items 3ms ✓ should return an empty array and not query the DB if items array is empty 2ms ✓ should throw ForeignKeyConstraintError if flyerId is invalid 4ms ✓ should throw a generic error if the database query fails 9ms ✓ should sanitize empty or whitespace-only price_display to "N/A" 2ms ✓ should execute find/create store, insert flyer, and insert items using the provided client 11ms ✓ should create a flyer with no items if items array is empty 3ms ✓ should propagate an error if any step fails 18ms ✓ should execute the correct SELECT query and return brands 7ms ✓ should throw an error if the database query fails 2ms  × should return a flyer if found 22ms ✓ should throw NotFoundError if flyer is not found 4ms ✓ should use default limit and offset when none are provided 8ms ✓ should use provided limit and offset values 11ms ✓ should throw an error if the database query fails 3ms ✓ should return items for a specific flyer 13ms ✓ should return an empty array if flyer has no items 2ms ✓ should throw an error if the database query fails 4ms ✓ should return items for multiple flyers using ANY 2ms ✓ should return an empty array if no items are found for the given flyer IDs 1ms ✓ should throw an error if the database query fails 3ms ✓ should return the total count of items 2ms ✓ should return 0 if the flyerIds array is empty 1ms ✓ should throw an error if the database query fails 3ms ✓ should return a flyer for a given checksum 3ms ✓ should return undefined if no flyer is found for the checksum 1ms ✓ should throw an error if the database query fails 2ms ✓ should increment view_count for a "view" interaction 2ms ✓ should increment click_count for a "click" interaction 1ms ✓ should not throw an error if the database query fails (fire-and-forget) 2ms ✓ should use withTransaction to delete a flyer 1ms ✓ should throw an error if the flyer to delete is not found 1ms ✓ should rollback transaction on generic error 2ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 1/61  ❯ src/routes/user.routes.test.ts 0/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 48/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 431 passed (609)  Start at 07:51:47  Duration 22.54s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should enqueue a job and return 202 on success [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should return 400 if checksum is missing [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 4/61  ❯ src/routes/user.routes.test.ts 2/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 50/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 438 passed (609)  Start at 07:51:47  Duration 22.78s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > GET /profile > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 4/61  ❯ src/routes/user.routes.test.ts 2/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 50/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 438 passed (609)  Start at 07:51:47  Duration 22.78s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > GET /profile > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:171:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should return 409 if flyer checksum already exists [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 4/61  ❯ src/routes/user.routes.test.ts 2/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 50/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 438 passed (609)  Start at 07:51:47  Duration 22.78s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > GET /watched-items > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 7/61  ❯ src/routes/user.routes.test.ts 6/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 52/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 447 passed (609)  Start at 07:51:47  Duration 22.88s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > GET /watched-items > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:194:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should return 500 if enqueuing the job fails [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 7/61  ❯ src/routes/user.routes.test.ts 6/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 52/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 447 passed (609)  Start at 07:51:47  Duration 22.88s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should return 500 if enqueuing the job fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 7/61  ❯ src/routes/user.routes.test.ts 6/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 52/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 447 passed (609)  Start at 07:51:47  Duration 22.88s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should return 500 if enqueuing the job fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Redis connection failed at /app/src/routes/ai.routes.test.ts:237:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should pass user ID to the job when authenticated [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should pass user profile address to the job when authenticated user has an address [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 7/61  ❯ src/routes/user.routes.test.ts 6/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/db/receipt.db.test.ts 46/46  ❯ src/services/upcService.server.test.ts 52/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 447 passed (609)  Start at 07:51:47  Duration 22.88s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > POST /watched-items > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 13/61  ❯ src/routes/user.routes.test.ts 11/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 55/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 461 passed (609)  Start at 07:51:47  Duration 23.24s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > POST /watched-items > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:220:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-and-process > should clean up the uploaded file if validation fails (e.g., missing checksum) [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-legacy > should process a legacy flyer and return 200 on success [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 13/61  ❯ src/routes/user.routes.test.ts 11/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 55/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 461 passed (609)  Start at 07:51:47  Duration 23.24s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > DELETE /watched-items/:masterItemId > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 13/61  ❯ src/routes/user.routes.test.ts 11/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 55/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 461 passed (609)  Start at 07:51:47  Duration 23.24s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > DELETE /watched-items/:masterItemId > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:273:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 13/61  ❯ src/routes/user.routes.test.ts 11/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 55/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 461 passed (609)  Start at 07:51:47  Duration 23.24s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Routes > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Routes > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:296:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Routes > should return 500 on a generic database error during creation [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Routes > should return 500 on a generic database error during creation --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:340:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Routes > DELETE /shopping-lists/:listId > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Routes > DELETE /shopping-lists/:listId > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:374:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-legacy > should return 409 and cleanup file if a duplicate flyer is detected [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-legacy > should return 500 and cleanup file on a generic service error [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-legacy > should return 500 and cleanup file on a generic service error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /upload-legacy > should return 500 and cleanup file on a generic service error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Internal service failure at /app/src/routes/ai.routes.test.ts:427:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should save a flyer and return 201 on success [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should return 409 Conflict and delete the uploaded file if flyer checksum already exists [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should accept payload when extractedData.items is missing and save with empty items [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should fallback to a safe store name when store_name is missing [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 20/61  ❯ src/routes/user.routes.test.ts 23/107  ❯ src/services/db/flyer.db.test.ts 45/45  ❯ src/services/upcService.server.test.ts 57/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 5 passed (242)  Tests 1 failed | 482 passed (609)  Start at 07:51:47  Duration 23.44s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Item Routes > should return 500 on a generic database error when adding an item [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Item Routes > should return 500 on a generic database error when adding an item --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:462:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026h ✓ src/services/upcService.server.test.ts (58 tests) 1357ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should handle a generic error during flyer creation [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Item Routes > should return 500 on a generic database error when updating an item [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Item Routes > should return 500 on a generic database error when updating an item --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:505:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should handle a generic error during flyer creation [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy) > should handle a generic error during flyer creation --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB transaction failed at /app/src/routes/ai.routes.test.ts:547:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 22/61  ❯ src/routes/user.routes.test.ts 33/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 495 passed (609)  Start at 07:51:47  Duration 23.54s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Item Routes > DELETE /shopping-lists/items/:itemId > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 23/61  ❯ src/routes/user.routes.test.ts 34/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 497 passed (609)  Start at 07:51:47  Duration 23.86s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Shopping List Item Routes > DELETE /shopping-lists/items/:itemId > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:543:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 23/61  ❯ src/routes/user.routes.test.ts 34/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 497 passed (609)  Start at 07:51:47  Duration 23.86s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > PUT /profile > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 23/61  ❯ src/routes/user.routes.test.ts 34/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 497 passed (609)  Start at 07:51:47  Duration 23.86s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > PUT /profile > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:585:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 23/61  ❯ src/routes/user.routes.test.ts 34/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 497 passed (609)  Start at 07:51:47  Duration 23.86s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > PUT /profile/password > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 23/61  ❯ src/routes/user.routes.test.ts 34/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 497 passed (609)  Start at 07:51:47  Duration 23.86s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > PUT /profile/password > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:617:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 23/61  ❯ src/routes/user.routes.test.ts 34/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 497 passed (609)  Start at 07:51:47  Duration 23.86s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Payload Variations) > should handle payload where "data" field is an object, not stringified JSON [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Payload Variations) > should handle payload where extractedData is null [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Payload Variations) > should handle payload where extractedData is a string [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Payload Variations) > should handle payload where extractedData is at the root of the body [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Payload Variations) > should default item quantity to 1 if missing [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Error Handling) > should handle malformed JSON in data field and return 400 [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > DELETE /account > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > DELETE /account > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:681:11 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /flyers/process (Legacy Error Handling) > should return 400 if checksum is missing from legacy payload [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /check-flyer > should return 200 with a stubbed response on success [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /check-flyer > should return 500 on a generic error [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /check-flyer > should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /check-flyer > should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Logging failed at Object. (/app/src/routes/ai.routes.test.ts:717:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:487:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at done (/app/node_modules/multer/lib/make-middleware.js:59:7) at indicateDone (/app/node_modules/multer/lib/make-middleware.js:63:68) at Multipart. (/app/node_modules/multer/lib/make-middleware.js:187:7)  at Multipart.emit (node:events:524:28)  at emitCloseNT (node:internal/streams/destroy:147:10)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > PUT /profile/preferences > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > PUT /profile/preferences > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:711:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/dietary-restrictions > GET should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/dietary-restrictions > GET should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:748:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 31/61  ❯ src/routes/user.routes.test.ts 47/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 518 passed (609)  Start at 07:51:47  Duration 24.10s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/dietary-restrictions > PUT should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 34/61  ❯ src/routes/user.routes.test.ts 61/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 535 passed (609)  Start at 07:51:47  Duration 24.20s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/dietary-restrictions > PUT should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:785:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 34/61  ❯ src/routes/user.routes.test.ts 61/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 535 passed (609)  Start at 07:51:47  Duration 24.20s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/appliances > GET should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 34/61  ❯ src/routes/user.routes.test.ts 61/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 535 passed (609)  Start at 07:51:47  Duration 24.20s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/appliances > GET should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:812:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /rescan-area > should return 400 if cropArea or extractionType is missing [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 34/61  ❯ src/routes/user.routes.test.ts 61/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 535 passed (609)  Start at 07:51:47  Duration 24.20s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/appliances > PUT should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 34/61  ❯ src/routes/user.routes.test.ts 61/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 535 passed (609)  Start at 07:51:47  Duration 24.20s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > User Preferences and Personalization > GET and PUT /users/me/appliances > PUT should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:843:27 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 34/61  ❯ src/routes/user.routes.test.ts 61/107  ❯ src/services/upcService.server.test.ts 58/58  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 535 passed (609)  Start at 07:51:47  Duration 24.20s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /rescan-area > should return 400 if cropArea is malformed JSON [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Notification Routes > GET /notifications should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Notification Routes > GET /notifications should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:902:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Notification Routes > POST /notifications/mark-all-read should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Notification Routes > POST /notifications/mark-all-read should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:919:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Notification Routes > POST /notifications/:notificationId/mark-read should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Notification Routes > POST /notifications/:notificationId/mark-read should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:940:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Address Routes > GET /addresses/:addressId should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Address Routes > GET /addresses/:addressId should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/user.routes.test.ts:975:65 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Address Routes > PUT /profile/address should return 500 on a generic service error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Address Routes > PUT /profile/address should return 500 on a generic service error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1025:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 35/61  ❯ src/routes/user.routes.test.ts 66/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 541 passed (609)  Start at 07:51:47  Duration 24.58s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-address > should return 200 with a stubbed response on success [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-address > should return 500 on a generic error [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-address > should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-address > should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Logging failed at Object. (/app/src/routes/ai.routes.test.ts:774:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:533:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at done (/app/node_modules/multer/lib/make-middleware.js:59:7) at indicateDone (/app/node_modules/multer/lib/make-middleware.js:63:68) at Multipart. (/app/node_modules/multer/lib/make-middleware.js:187:7)  at Multipart.emit (node:events:524:28)  at emitCloseNT (node:internal/streams/destroy:147:10) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-logo > should return 200 with a stubbed response on success [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-logo > should return 500 on a generic error [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-logo > should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /extract-logo > should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Logging failed at Object. (/app/src/routes/ai.routes.test.ts:802:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:581:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at done (/app/node_modules/multer/lib/make-middleware.js:59:7) at indicateDone (/app/node_modules/multer/lib/make-middleware.js:63:68) at Multipart. (/app/node_modules/multer/lib/make-middleware.js:187:7)  at Multipart.emit (node:events:524:28)  at emitCloseNT (node:internal/streams/destroy:147:10) stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /rescan-area (authenticated) > should call the AI service and return the result on success (authenticated) [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /rescan-area (authenticated) > should return 500 if the AI service throws an error (authenticated) [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /rescan-area (authenticated) > should return 500 if the AI service throws an error (authenticated) [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > POST /rescan-area (authenticated) > should return 500 if the AI service throws an error (authenticated) --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: AI API is down at /app/src/routes/ai.routes.test.ts:848:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > POST /profile/avatar > should return 500 if updating the profile fails after upload [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > POST /profile/avatar > should return 500 if updating the profile fails after upload --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1067:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /quick-insights should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /quick-insights should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Logging failed at Object. (/app/src/routes/ai.routes.test.ts:886:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:628:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 44/61  ❯ src/routes/user.routes.test.ts 84/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 568 passed (609)  Start at 07:51:47  Duration 24.68s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /plan-trip should return 500 if the AI service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /plan-trip should return 500 if the AI service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Maps API key invalid at /app/src/routes/ai.routes.test.ts:951:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /deep-dive should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /deep-dive should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Deep dive logging failed at Object. (/app/src/routes/ai.routes.test.ts:968:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:673:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /search-web should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /search-web should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Search web logging failed at Object. (/app/src/routes/ai.routes.test.ts:979:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:717:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstdout | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /compare-prices should return 500 on a generic error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstderr | src/routes/ai.routes.test.ts > AI Routes (/api/ai) > when user is authenticated > POST /compare-prices should return 500 on a generic error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Compare prices logging failed at Object. (/app/src/routes/ai.routes.test.ts:990:15) at Object.Mock (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/ai.routes.ts:763:15 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 45/61  ❯ src/routes/user.routes.test.ts 85/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 6 passed (242)  Tests 1 failed | 570 passed (609)  Start at 07:51:47  Duration 24.85s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > POST /profile/avatar > should clean up the uploaded file if updating the profile fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > POST /profile/avatar > should clean up the uploaded file if updating the profile fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1112:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > POST /recipes should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > POST /recipes should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1158:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > DELETE /recipes/:recipeId should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > DELETE /recipes/:recipeId should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1185:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > PUT /recipes/:recipeId should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > PUT /recipes/:recipeId should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1233:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026h ✓ src/routes/ai.routes.test.ts (61 tests) 2427ms stdout | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > GET /shopping-lists/:listId should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026hstderr | src/routes/user.routes.test.ts > User Routes (/api/users) > when user is authenticated > Recipe Routes > GET /shopping-lists/:listId should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/user.routes.test.ts:1282:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 104/107  ❯ src/tests/integration/flyer-processing.integration.test.ts [queued]  Test Files 1 failed | 7 passed (242)  Tests 1 failed | 605 passed (609)  Start at 07:51:47  Duration 25.21s [?2026l[?2026h ✓ src/routes/user.routes.test.ts (107 tests) 2815ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 107/107  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 25.64s [?2026l[?2026hstderr | src/tests/integration/flyer-processing.integration.test.ts > Flyer Processing Background Job Integration Test [TEST SETUP] STORAGE_PATH: /app/flyer-images [TEST SETUP] FRONTEND_URL stubbed to: https://example.com  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/ai.routes.test.ts 61/61  ❯ src/routes/user.routes.test.ts 107/107  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 26.92s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 27.09s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts [queued]  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 27.71s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts [queued]  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 28.93s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts [queued]  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 29.03s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts [queued]  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 30.36s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts [queued]  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (616)  Start at 07:51:47  Duration 31.35s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts 0/62  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 608 passed (678)  Start at 07:51:47  Duration 31.59s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts [queued]  ❯ src/services/db/shopping.db.test.ts 1/62  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 8 passed (242)  Tests 1 failed | 609 passed (678)  Start at 07:51:47  Duration 31.76s [?2026l[?2026h ✓ src/services/db/shopping.db.test.ts (62 tests) 115ms  ❯ src/pages/admin/components/ProfileManager.test.tsx [queued]  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts 0/56  ❯ src/services/db/shopping.db.test.ts 62/62  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 9 passed (242)  Tests 1 failed | 670 passed (734)  Start at 07:51:47  Duration 32.03s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts 0/56  ❯ src/services/db/shopping.db.test.ts 62/62  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts 0/37  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 9 passed (242)  Tests 1 failed | 670 passed (817)  Start at 07:51:47  Duration 32.33s [?2026l[?2026h ✓ src/services/db/personalization.db.test.ts (56 tests) 193ms ✓ src/services/receiptService.server.test.ts (37 tests) 205ms  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts [queued]  ❯ src/services/db/personalization.db.test.ts 56/56  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/services/receiptService.server.test.ts 37/37  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 763 passed (817)  Start at 07:51:47  Duration 33.37s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts 0/47  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 763 passed (864)  Start at 07:51:47  Duration 33.79s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts 1/47  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 764 passed (864)  Start at 07:51:47  Duration 34.30s [?2026l[?2026hstderr | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authentication Flows (Signed Out) > should render the Sign In form when authStatus is SIGNED_OUT React does not recognize the `showStrength` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `showstrength` instead. If you accidentally passed it from a parent component, remove it from the DOM element.  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts 5/47  ❯ src/services/flyerProcessingService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 768 passed (864)  Start at 07:51:47  Duration 34.42s [?2026l[?2026hstdout | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /register > should return 500 if a generic database error occurs during registration [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts 6/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 769 passed (884)  Start at 07:51:47  Duration 34.53s [?2026l[?2026hstderr | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /register > should return 500 if a generic database error occurs during registration --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB connection lost at /app/src/routes/auth.routes.test.ts:267:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx 0/46  ❯ src/routes/auth.routes.test.ts 6/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 769 passed (884)  Start at 07:51:47  Duration 34.53s [?2026l[?2026hstderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.jpg stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [WORKER DEBUG] ProcessingService: aiProcessor returned data for store: Mock Store stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [WORKER DEBUG] ProcessingService: Generating icon from /tmp/flyer-processed.jpeg to /tmp/icons  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 7/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 771 passed (884)  Start at 07:51:47  Duration 34.63s [?2026l[?2026hstderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [WORKER DEBUG] ProcessingService: Icon generated: icon-flyer.webp [DEBUG] FlyerProcessingService resolved baseUrl: "https://example.com" (job.data.baseUrl: "https://example.com", env.FRONTEND_URL: "http://localhost:3000") [DEBUG] FlyerProcessingService calling transformer with: { originalFileName: 'flyer.jpg', imageFileName: 'flyer-processed.jpeg', iconFileName: 'icon-flyer.webp', checksum: 'checksum-123', baseUrl: 'https://example.com' } stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should process an image file successfully and enqueue a cleanup job [DEBUG] FlyerProcessingService transformer output URLs: { imageUrl: 'https://example.com/test.jpg', iconUrl: 'https://example.com/icon.webp' } [DEBUG] Full Flyer Data to be saved: { "file_name": "test.jpg", "image_url": "https://example.com/test.jpg", "icon_url": "https://example.com/icon.webp", "store_name": "Mock Store", "status": "processed", "item_count": 0, "valid_from": "2024-01-01", "valid_to": "2024-01-07" } stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.pdf stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [WORKER DEBUG] ProcessingService: fileHandler returned 2 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [WORKER DEBUG] ProcessingService: aiProcessor returned data for store: Mock Store stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [WORKER DEBUG] ProcessingService: Generating icon from /tmp/flyer-1.jpg to /tmp/icons stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [WORKER DEBUG] ProcessingService: Icon generated: icon-flyer-1.webp [DEBUG] FlyerProcessingService resolved baseUrl: "https://example.com" (job.data.baseUrl: "https://example.com", env.FRONTEND_URL: "http://localhost:3000") [DEBUG] FlyerProcessingService calling transformer with: { originalFileName: 'flyer.pdf', imageFileName: 'flyer-1.jpg', iconFileName: 'icon-flyer-1.webp', checksum: 'checksum-123', baseUrl: 'https://example.com' }  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 13/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 777 passed (884)  Start at 07:51:47  Duration 34.83s [?2026l[?2026hstdout | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /login > should return 500 if saving the refresh token fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 13/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 777 passed (884)  Start at 07:51:47  Duration 34.83s [?2026l[?2026hstderr | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /login > should return 500 if saving the refresh token fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB write failed at /app/src/routes/auth.routes.test.ts:357:65 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should convert a PDF, process its images, and enqueue a cleanup job for all files [DEBUG] FlyerProcessingService transformer output URLs: { imageUrl: 'https://example.com/test.jpg', iconUrl: 'https://example.com/icon.webp' } [DEBUG] Full Flyer Data to be saved: { "file_name": "test.jpg", "image_url": "https://example.com/test.jpg", "icon_url": "https://example.com/icon.webp", "store_name": "Mock Store", "status": "processed", "item_count": 0, "valid_from": "2024-01-01", "valid_to": "2024-01-07" }  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 13/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 777 passed (884)  Start at 07:51:47  Duration 34.83s [?2026l[?2026hstdout | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /login > should return 500 if passport strategy returns an error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 13/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 777 passed (884)  Start at 07:51:47  Duration 34.83s [?2026l[?2026hstderr | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /login > should return 500 if passport strategy returns an error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Database connection failed at /app/src/routes/auth.routes.test.ts:33:25 at /app/src/routes/auth.routes.ts:294:5 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5) stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the AI service fails [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.jpg stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the AI service fails [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the AI service fails [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 13/47  ❯ src/services/flyerProcessingService.server.test.ts 0/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 777 passed (884)  Start at 07:51:47  Duration 34.83s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 17/47  ❯ src/services/flyerProcessingService.server.test.ts 2/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 783 passed (884)  Start at 07:51:47  Duration 34.94s [?2026l[?2026hstderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw UnrecoverableError for quota issues and not enqueue cleanup [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.jpg stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw UnrecoverableError for quota issues and not enqueue cleanup [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw UnrecoverableError for quota issues and not enqueue cleanup [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw PdfConversionError and not enqueue cleanup if PDF conversion fails [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/bad.pdf  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 21/47  ❯ src/services/flyerProcessingService.server.test.ts 5/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 790 passed (884)  Start at 07:51:47  Duration 35.05s [?2026l[?2026hstdout | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /forgot-password > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 21/47  ❯ src/services/flyerProcessingService.server.test.ts 5/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 790 passed (884)  Start at 07:51:47  Duration 35.05s [?2026l[?2026hstderr | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /forgot-password > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB connection failed at /app/src/routes/auth.routes.test.ts:460:57 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw AiDataValidationError and not enqueue cleanup if AI validation fails [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.jpg stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw AiDataValidationError and not enqueue cleanup if AI validation fails [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw AiDataValidationError and not enqueue cleanup if AI validation fails [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.gif stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [WORKER DEBUG] ProcessingService: aiProcessor returned data for store: Mock Store stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [WORKER DEBUG] ProcessingService: Generating icon from /tmp/flyer-converted.png to /tmp/icons stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [WORKER DEBUG] ProcessingService: Icon generated: icon-flyer-converted.webp [DEBUG] FlyerProcessingService resolved baseUrl: "https://example.com" (job.data.baseUrl: "https://example.com", env.FRONTEND_URL: "http://localhost:3000") [DEBUG] FlyerProcessingService calling transformer with: { originalFileName: 'flyer.gif', imageFileName: 'flyer-converted.png', iconFileName: 'icon-flyer-converted.webp', checksum: 'checksum-123', baseUrl: 'https://example.com' } stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should handle convertible image types and include original and converted files in cleanup [DEBUG] FlyerProcessingService transformer output URLs: { imageUrl: 'https://example.com/test.jpg', iconUrl: 'https://example.com/icon.webp' } [DEBUG] Full Flyer Data to be saved: { "file_name": "test.jpg", "image_url": "https://example.com/test.jpg", "icon_url": "https://example.com/icon.webp", "store_name": "Mock Store", "status": "processed", "item_count": 0, "valid_from": "2024-01-01", "valid_to": "2024-01-07" }  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 21/47  ❯ src/services/flyerProcessingService.server.test.ts 5/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 790 passed (884)  Start at 07:51:47  Duration 35.05s [?2026l[?2026hstderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.jpg stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [WORKER DEBUG] ProcessingService: aiProcessor returned data for store: Mock Store stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [WORKER DEBUG] ProcessingService: Generating icon from /tmp/flyer.jpg to /tmp/icons stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [WORKER DEBUG] ProcessingService: Icon generated: icon-flyer.webp [DEBUG] FlyerProcessingService resolved baseUrl: "https://example.com" (job.data.baseUrl: "https://example.com", env.FRONTEND_URL: "http://localhost:3000") [DEBUG] FlyerProcessingService calling transformer with: { originalFileName: 'flyer.jpg', imageFileName: 'flyer.jpg', iconFileName: 'icon-flyer.webp', checksum: 'checksum-123', baseUrl: 'https://example.com' } stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw an error and not enqueue cleanup if the database service fails [DEBUG] FlyerProcessingService transformer output URLs: { imageUrl: 'https://example.com/test.jpg', iconUrl: 'https://example.com/icon.webp' } [DEBUG] Full Flyer Data to be saved: { "file_name": "test.jpg", "image_url": "https://example.com/test.jpg", "icon_url": "https://example.com/icon.webp", "store_name": "Mock Store", "status": "processed", "item_count": 0, "valid_from": "2024-01-01", "valid_to": "2024-01-07" } stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should throw UnsupportedFileTypeError for an unsupported file type [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/document.txt stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should delegate to _reportErrorAndThrow if icon generation fails [WORKER DEBUG] ProcessingService: Calling fileHandler.prepareImageInputs for /tmp/flyer.jpg stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should delegate to _reportErrorAndThrow if icon generation fails [WORKER DEBUG] ProcessingService: fileHandler returned 1 images. stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should delegate to _reportErrorAndThrow if icon generation fails [WORKER DEBUG] ProcessingService: Calling aiProcessor.extractAndValidateData stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should delegate to _reportErrorAndThrow if icon generation fails [WORKER DEBUG] ProcessingService: aiProcessor returned data for store: Mock Store stderr | src/services/flyerProcessingService.server.test.ts > FlyerProcessingService > processJob (Orchestrator) > should delegate to _reportErrorAndThrow if icon generation fails [WORKER DEBUG] ProcessingService: Generating icon from /tmp/flyer.jpg to /tmp/icons  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 24/47  ❯ src/services/flyerProcessingService.server.test.ts 11/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 11 passed (242)  Tests 1 failed | 799 passed (884)  Start at 07:51:47  Duration 35.15s [?2026l[?2026hstdout | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /reset-password > should return 500 if updatePassword throws an error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 27/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 811 passed (884)  Start at 07:51:47  Duration 35.25s [?2026l[?2026hstderr | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /reset-password > should return 500 if updatePassword throws an error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Database connection failed at /app/src/routes/auth.routes.test.ts:520:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 27/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 811 passed (884)  Start at 07:51:47  Duration 35.25s [?2026l[?2026h ✓ src/services/flyerProcessingService.server.test.ts (20 tests) 724ms  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 27/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 811 passed (884)  Start at 07:51:47  Duration 35.25s [?2026l[?2026hstdout | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /refresh-token > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 31/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 815 passed (884)  Start at 07:51:47  Duration 35.36s [?2026l[?2026hstderr | src/routes/auth.routes.test.ts > Auth Routes (/api/auth) > POST /refresh-token > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/auth.routes.test.ts:565:62 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 31/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 815 passed (884)  Start at 07:51:47  Duration 35.36s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 34/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 0/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 818 passed (884)  Start at 07:51:47  Duration 35.61s [?2026l[?2026h  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 36/47  ❯ src/services/flyerProcessingService.server.test.ts 20/20  ❯ src/tests/integration/flyer-processing.integration.test.ts 1/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 820 passed | 1 skipped (884)  Start at 07:51:47  Duration 35.71s [?2026l[?2026hstderr | src/tests/integration/flyer-processing.integration.test.ts > Flyer Processing Background Job Integration Test [TEST TEARDOWN] Closing in-process workers...  ❯ src/pages/admin/components/ProfileManager.test.tsx 1/46  ❯ src/routes/auth.routes.test.ts 37/47  ❯ src/tests/integration/flyer-processing.integration.test.ts 1/7  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 821 passed | 1 skipped (884)  Start at 07:51:47  Duration 36.64s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 3/46  ❯ src/routes/auth.routes.test.ts 42/47  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 828 passed | 7 skipped (884)  Start at 07:51:47  Duration 36.80s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 3/46  ❯ src/routes/auth.routes.test.ts 47/47  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 12 passed (242)  Tests 1 failed | 833 passed | 7 skipped (884)  Start at 07:51:47  Duration 38.35s [?2026l[?2026h ✓ src/routes/auth.routes.test.ts (47 tests) 3327ms ✓ should block requests after exceeding the limit when the opt-in header is sent  397ms ✓ should NOT block requests when the opt-in header is not sent (default test behavior)  354ms stdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should handle failure when fetching user address [TEST DEBUG] Running: should handle failure when fetching user address [TEST DEBUG] Mocked apiClient.getUserAddress to reject. [TEST DEBUG] Waiting for assertions. Current logger calls: [] stdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should handle failure when fetching user address [TEST DEBUG] Waiting for assertions. Current logger calls: [ [ '[useProfileAddress] Fetch returned null for addressId: 123.' ] ]  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 12/46  ❯ src/routes/auth.routes.test.ts 47/47  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 842 passed | 7 skipped (884)  Start at 07:51:47  Duration 38.71s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 13/46  ❯ src/routes/auth.routes.test.ts 47/47  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 843 passed | 7 skipped (884)  Start at 07:51:47  Duration 38.93s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 15/46  ❯ src/routes/auth.routes.test.ts 47/47  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 845 passed | 7 skipped (884)  Start at 07:51:47  Duration 39.23s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 16/46  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 846 passed | 7 skipped (884)  Start at 07:51:47  Duration 40.92s [?2026l[?2026hstdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should not geocode if address already has coordinates (using fake timers) [TEST LOG] Waiting for initial address load...  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 17/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts [queued]  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 847 passed | 7 skipped (884)  Start at 07:51:47  Duration 41.07s [?2026l[?2026hstdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should not geocode if address already has coordinates (using fake timers) [TEST LOG] Wait complete. Verifying no geocode call.  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 17/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts 0/54  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 847 passed | 7 skipped (938)  Start at 07:51:47  Duration 41.27s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 17/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts 1/54  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 13 passed (242)  Tests 1 failed | 848 passed | 7 skipped (938)  Start at 07:51:47  Duration 41.40s [?2026l[?2026h ✓ src/services/db/admin.db.test.ts (54 tests) 174ms  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 17/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts 54/54  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts [queued]  Test Files 1 failed | 14 passed (242)  Tests 1 failed | 901 passed | 7 skipped (938)  Start at 07:51:47  Duration 42.12s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 18/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts 54/54  ❯ src/services/expiryService.server.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 14 passed (242)  Tests 1 failed | 902 passed | 7 skipped (969)  Start at 07:51:47  Duration 42.24s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 18/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts 54/54  ❯ src/services/expiryService.server.test.ts 1/26  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 14 passed (242)  Tests 1 failed | 903 passed | 7 skipped (995)  Start at 07:51:47  Duration 42.61s [?2026l[?2026h ✓ src/services/expiryService.server.test.ts (26 tests) 153ms  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 18/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/db/admin.db.test.ts 54/54  ❯ src/services/expiryService.server.test.ts 26/26  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 15 passed (242)  Tests 1 failed | 928 passed | 7 skipped (995)  Start at 07:51:47  Duration 42.82s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 18/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/services/expiryService.server.test.ts 26/26  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 15 passed (242)  Tests 1 failed | 928 passed | 7 skipped (995)  Start at 07:51:47  Duration 43.06s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 19/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 15 passed (242)  Tests 1 failed | 929 passed | 7 skipped (995)  Start at 07:51:47  Duration 44.34s [?2026l[?2026hSourcemap for "/app/node_modules/node-cron/dist/esm/node-cron.js" points to missing source files  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 20/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 15 passed (242)  Tests 1 failed | 930 passed | 7 skipped (995)  Start at 07:51:47  Duration 45.45s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 21/46  ❯ src/services/backgroundJobService.test.ts [queued]  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 1 failed | 15 passed (242)  Tests 1 failed | 931 passed | 7 skipped (995)  Start at 07:51:47  Duration 45.97s [?2026l[?2026h ❯ src/tests/integration/flyer-processing.integration.test.ts (7 tests | 7 skipped) 20095ms ↓ should successfully process a flyer for an AUTHENTICATED user via the background queue ↓ should successfully process a flyer for an ANONYMOUS user via the background queue ↓ should strip EXIF data from uploaded JPEG images during processing ↓ should strip metadata from uploaded PNG images during processing ↓ should handle a failure from the AI service gracefully - requires mock injection mechanism ↓ should handle a database failure during flyer creation - requires mock injection mechanism ↓ should NOT clean up temporary files when a job fails - requires mock injection mechanism  ❯ src/App.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 21/46  ❯ src/services/backgroundJobService.test.ts 0/28  ❯ src/tests/integration/flyer-processing.integration.test.ts 7/7  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 15 passed (242)  Tests 1 failed | 931 passed | 7 skipped (1023)  Start at 07:51:47  Duration 46.11s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 21/46  ❯ src/services/backgroundJobService.test.ts 0/28  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 15 passed (242)  Tests 1 failed | 931 passed | 7 skipped (1023)  Start at 07:51:47  Duration 46.40s [?2026l[?2026h ✓ src/services/backgroundJobService.test.ts (28 tests) 449ms  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 22/46  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 960 passed | 7 skipped (1023)  Start at 07:51:47  Duration 47.15s [?2026l[?2026hstdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should handle toggling dark mode when profile preferences are initially null [TEST LOG] Clicking preferences tab... stdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should handle toggling dark mode when profile preferences are initially null [TEST LOG] Clicking dark mode toggle...  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 23/46  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 961 passed | 7 skipped (1023)  Start at 07:51:47  Duration 47.65s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 26/46  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 964 passed | 7 skipped (1023)  Start at 07:51:47  Duration 48.82s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 26/46  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 964 passed | 7 skipped (1023)  Start at 07:51:47  Duration 49.19s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 27/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 965 passed | 7 skipped (1023)  Start at 07:51:47  Duration 49.30s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 28/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 966 passed | 7 skipped (1023)  Start at 07:51:47  Duration 49.54s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 29/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 967 passed | 7 skipped (1023)  Start at 07:51:47  Duration 50.16s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 30/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 968 passed | 7 skipped (1023)  Start at 07:51:47  Duration 50.42s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 31/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 969 passed | 7 skipped (1023)  Start at 07:51:47  Duration 50.80s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 32/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 970 passed | 7 skipped (1023)  Start at 07:51:47  Duration 50.91s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 32/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 970 passed | 7 skipped (1023)  Start at 07:51:47  Duration 51.21s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 33/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 971 passed | 7 skipped (1023)  Start at 07:51:47  Duration 51.46s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 34/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 972 passed | 7 skipped (1023)  Start at 07:51:47  Duration 51.74s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts 0/28  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 35/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 973 passed | 7 skipped (1051)  Start at 07:51:47  Duration 52.00s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts 1/28  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 35/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 16 passed (242)  Tests 1 failed | 974 passed | 7 skipped (1051)  Start at 07:51:47  Duration 52.21s [?2026l[?2026h ✓ src/config/passport.test.ts (28 tests) 115ms stdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should log warning if address fetch returns null [TEST DEBUG] Running: should log warning if address fetch returns null [TEST DEBUG] Mocked apiClient.getUserAddress to resolve with a null body. [TEST DEBUG] Waiting for assertions. Current logger calls: [] stdout | src/pages/admin/components/ProfileManager.test.tsx > ProfileManager > Authenticated User Features > should log warning if address fetch returns null [TEST DEBUG] Waiting for assertions. Current logger calls: [ [ '[useProfileAddress] Fetch returned null for addressId: 123.' ] ]  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts 28/28  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 36/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 0/31  Test Files 2 failed | 17 passed (242)  Tests 1 failed | 1002 passed | 7 skipped (1051)  Start at 07:51:47  Duration 52.56s [?2026l[?2026h ❯ src/tests/integration/inventory.integration.test.ts (31 tests | 31 skipped) 10023ms ↓ should add a new inventory item ↓ should add item without expiry date ↓ should add item with notes and purchase_date ↓ should reject invalid location ↓ should reject missing item_name ↓ should reject unauthenticated requests ↓ should return all inventory items ↓ should filter by location ↓ should support pagination ↓ should compute expiry_status correctly for items ↓ should only return items for the authenticated user ↓ should return item details ↓ should return 404 for non-existent item ↓ should not allow accessing another user's item ↓ should update item quantity ↓ should update item location ↓ should update expiry_date ↓ should reject empty update body ↓ should delete an inventory item ↓ should mark item as consumed ↓ should verify item is marked as consumed ↓ should return 404 for already consumed or non-existent item ↓ should return items expiring within default days ↓ should respect days parameter ↓ should return expired items ↓ should return alert settings ↓ should update alert settings for email method ↓ should reject invalid days_before_expiry ↓ should reject invalid alert method ↓ should return recipe suggestions for expiring items ↓ should handle full add-track-consume workflow  ❯ src/App.test.tsx [queued]  ❯ src/config/passport.test.ts 28/28  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 39/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 31/31  Test Files 3 failed | 17 passed (242)  Tests 1 failed | 1005 passed | 38 skipped (1051)  Start at 07:51:47  Duration 52.69s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 40/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts [queued]  ❯ src/tests/integration/inventory.integration.test.ts 31/31  Test Files 3 failed | 17 passed (242)  Tests 1 failed | 1006 passed | 38 skipped (1051)  Start at 07:51:47  Duration 53.27s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 42/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts 1/38  Test Files 3 failed | 17 passed (242)  Tests 1 failed | 1009 passed | 38 skipped (1089)  Start at 07:51:47  Duration 53.58s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 43/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts 8/38  Test Files 3 failed | 17 passed (242)  Tests 1 failed | 1017 passed | 38 skipped (1089)  Start at 07:51:47  Duration 53.71s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 43/46  ❯ src/routes/health.routes.test.ts [queued]  ❯ src/routes/receipt.routes.test.ts 12/38  Test Files 3 failed | 17 passed (242)  Tests 1 failed | 1021 passed | 38 skipped (1089)  Start at 07:51:47  Duration 54.54s [?2026l[?2026h ✓ src/routes/receipt.routes.test.ts (38 tests) 957ms  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 44/46  ❯ src/routes/health.routes.test.ts 0/32  ❯ src/routes/receipt.routes.test.ts 38/38  Test Files 3 failed | 18 passed (242)  Tests 1 failed | 1048 passed | 38 skipped (1121)  Start at 07:51:47  Duration 54.98s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 45/46  ❯ src/routes/health.routes.test.ts 0/32  ❯ src/routes/receipt.routes.test.ts 38/38  Test Files 3 failed | 18 passed (242)  Tests 1 failed | 1049 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.49s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Connection timed out at /app/src/routes/health.routes.test.ts:88:26 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping returns an unexpected response [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping returns an unexpected response --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Unexpected Redis ping response: OK at /app/src/routes/health.routes.ts:432:13  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if tables are missing [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if tables are missing --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Database schema check failed. Missing tables: missing_table_1, missing_table_2. at /app/src/routes/health.routes.ts:333:9  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if the database check fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if the database check fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB connection failed at /app/src/routes/health.routes.test.ts:159:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if the database check fails [DEBUG] health.routes.test.ts: Verifying logger.error for DB schema check failure ✓ src/pages/admin/components/ProfileManager.test.tsx (46 tests) 22832ms ✓ should render the Sign In form when authStatus is SIGNED_OUT  1933ms ✓ should switch to the Create an Account form and register successfully  1601ms ✓ should switch to the Reset Password form and request a reset  579ms ✓ should render profile tabs when authStatus is AUTHENTICATED  329ms ✓ should handle unexpected Promise.allSettled rejection during save  432ms ✓ should show error if geocoding is attempted with no address string  350ms ✓ should automatically geocode address after user stops typing (using fake timers)  1629ms ✓ should show an error when trying to link an account  827ms ✓ should show an error when trying to link a GitHub account  1198ms ✓ should switch between all tabs correctly  1959ms ✓ should show an error if password is too short  585ms ✓ should show an error if account deletion fails  1192ms ✓ should handle toggling dark mode when profile preferences are initially null  801ms ✓ should allow updating the user profile and address  376ms ✓ should show an error if updating the address fails but profile succeeds  413ms ✓ should allow updating the password  335ms ✓ should show an error if passwords do not match  371ms ✓ should trigger data export  428ms ✓ should handle account deletion flow  515ms ✓ should allow toggling dark mode  314ms ✓ should allow changing unit system when preferences are initially null  494ms ✓ should not call onProfileUpdate if updating unit system fails  314ms ✓ should only call updateAddress when only address data has changed  331ms ✓ should handle updating the user profile and address with empty strings  587ms ✓ should show error notification when manual geocoding fails  388ms ✓ should handle permission denied error during geocoding  513ms ✓ should not trigger OAuth link if user profile is missing  968ms stdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if the database check fails with a non-Error object [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /db-schema > should return 500 if the database check fails with a non-Error object --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB connection failed at /app/src/routes/health.routes.ts:344:17  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /storage > should return 500 if storage is not accessible or writable [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /storage > should return 500 if storage is not accessible or writable --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Storage check failed. Ensure the directory '/var/www/flyer-crawler.projectium.com/flyer-images' exists and is writable by the application. at /app/src/routes/health.routes.ts:362:7  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /storage > should return 500 if storage check fails with a non-Error object [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /storage > should return 500 if storage check fails with a non-Error object --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Storage check failed. Ensure the directory '/var/www/flyer-crawler.projectium.com/flyer-images' exists and is writable by the application. at /app/src/routes/health.routes.ts:362:7  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 8/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1058 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.61s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > should return 500 if getPoolStatus throws an error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > should return 500 if getPoolStatus throws an error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Pool is not initialized at /app/src/routes/health.routes.test.ts:293:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > should return 500 if getPoolStatus throws a non-Error object [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > should return 500 if getPoolStatus throws a non-Error object --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Pool is not initialized at /app/src/routes/health.routes.ts:401:19 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Connection timed out at /app/src/routes/health.routes.test.ts:334:26 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails [DEBUG] health.routes.test.ts: Checking if logger.error was called with the correct pattern stdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping returns an unexpected response [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping returns an unexpected response --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Unexpected Redis ping response: OK at /app/src/routes/health.routes.ts:432:13  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstdout | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails with a non-Error object [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026hstderr | src/routes/health.routes.test.ts > Health Routes (/api/health) > GET /redis > should return 500 if Redis ping fails with a non-Error object --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Non-error rejection at /app/src/routes/health.routes.ts:440:19  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  ❯ src/pages/admin/components/ProfileManager.test.tsx 46/46  ❯ src/routes/health.routes.test.ts 13/32  Test Files 3 failed | 19 passed (242)  Tests 1 failed | 1063 passed | 38 skipped (1121)  Start at 07:51:47  Duration 55.76s [?2026l[?2026h ✓ src/routes/health.routes.test.ts (32 tests) 793ms  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1082 passed | 38 skipped (1121)  Start at 07:51:47  Duration 56.46s [?2026l[?2026h  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 0/15  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1082 passed | 38 skipped (1136)  Start at 07:51:47  Duration 56.60s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should render the initial state correctly  --- [TEST LOG] ---: Starting test: "FlyerUploader > should render the initial state correctly" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should render the initial state correctly --- [TEST LOG] ---: Rendering component inside MemoryRouter. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should render the initial state correctly --- [TEST LOG] ---: Finished test: "FlyerUploader > should render the initial state correctly" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling  --- [TEST LOG] ---: Starting test: "FlyerUploader > should handle file upload and start polling" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 1. Setting up mocks for upload and polling. --- [TEST LOG] ---: 2. Rendering component and preparing file. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 3. Firing file change event. --- [TEST LOG] ---: 4. File change event fired. Now AWAITING UI update. --- [TEST LOG] ---: 5a. Awaiting screen.findByText("Checking...") stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling [LOGGER.INFO] FlyerUploader Status: Checking... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 5b. SUCCESS: UI updated to polling state. --- [TEST LOG] ---: 6. Asserting mock calls after UI update. --- [TEST LOG] ---: 7. Mocks verified. Advancing timers now... --- [TEST LOG] ---: 9. Act block finished. Now checking if getJobStatus was called again. --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 1/15  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1083 passed | 38 skipped (1136)  Start at 07:51:47  Duration 58.23s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 1/15  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1083 passed | 38 skipped (1136)  Start at 07:51:47  Duration 58.36s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 1/15  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1083 passed | 38 skipped (1136)  Start at 07:51:47  Duration 59.17s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 10. waitFor check: getJobStatus calls = 2 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: 11. SUCCESS: Second poll confirmed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload and start polling --- [TEST LOG] ---: Finished test: "FlyerUploader > should handle file upload and start polling" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload via drag and drop  --- [TEST LOG] ---: Starting test: "FlyerUploader > should handle file upload via drag and drop" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload via drag and drop --- [TEST LOG] ---: 1. Setting up mocks for drag and drop. --- [TEST LOG] ---: 2. Rendering component and preparing file for drop. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 3. Firing drop event. --- [TEST LOG] ---: 4. Awaiting UI update to "Dropped...". stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload via drag and drop [LOGGER.INFO] FlyerUploader Status: Dropped... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload via drag and drop --- [TEST LOG] ---: 5. Asserting upload was called. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle file upload via drag and drop --- [TEST LOG] ---: Finished test: "FlyerUploader > should handle file upload via drag and drop" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect  --- [TEST LOG] ---: Starting test: "FlyerUploader > should poll for status, complete successfully, and redirect" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 1. Setting up mock sequence for polling. --- [TEST LOG] ---: 2. Rendering component and uploading file. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 3. Fired event. Now AWAITING UI update to "Analyzing...". stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect [LOGGER.INFO] FlyerUploader Status: Analyzing... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 4. SUCCESS: UI is showing "Analyzing...". --- [TEST LOG] ---: 5. First poll confirmed. Now AWAITING timer advancement. --- [TEST LOG] ---: 8a. waitFor check: Waiting for completion text and job status count. --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 2/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1084 passed | 38 skipped (1136)  Start at 07:51:47  Duration 60.10s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1  ❯ src/App.test.tsx [queued]  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1085 passed | 38 skipped (1136)  Start at 07:51:47  Duration 61.55s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1  ❯ src/App.test.tsx 0/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1085 passed | 38 skipped (1162)  Start at 07:51:47  Duration 61.83s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/App.test.tsx > App Component > should render the main layout and header [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1  ❯ src/App.test.tsx 0/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 0/15  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1085 passed | 38 skipped (1177)  Start at 07:51:47  Duration 62.05s [?2026l[?2026hstdout | src/App.test.tsx > App Component > should render the footer [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete  ❯ src/App.test.tsx 0/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 1/15  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1086 passed | 38 skipped (1177)  Start at 07:51:47  Duration 62.31s [?2026l[?2026hstderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should call AI service and return validated data on success [WORKER DEBUG] FlyerAiProcessor[itaaks]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should call AI service and return validated data on success [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "AI Store", "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 AI St", "items": [ { "item": "Test Item", "price_display": "$1.99", "price_in_cents": 199, "quantity": "each", "category_name": "Grocery" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should throw an error if getAllMasterItems fails [WORKER DEBUG] FlyerAiProcessor[wzq44]: extractAndValidateData called with 1 images, extractFn=null  ❯ src/App.test.tsx 0/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 1/15  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1086 passed | 38 skipped (1177)  Start at 07:51:47  Duration 62.31s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1  ❯ src/App.test.tsx 0/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 1/15  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1086 passed | 38 skipped (1177)  Start at 07:51:47  Duration 62.31s [?2026l[?2026hstderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should pass validation and not flag for review with good quality data [WORKER DEBUG] FlyerAiProcessor[ain34]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should pass validation and not flag for review with good quality data [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Good Store", "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Good St", "items": [ { "item": "Priced Item 1", "price_in_cents": 199, "price_display": "$1.99", "quantity": "1", "category_name": "A" }, { "item": "Priced Item 2", "price_in_cents": 299, "price_display": "$2.99", "quantity": "1", "category_name": "B" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should throw AiDataValidationError if AI response has incorrect data structure [WORKER DEBUG] FlyerAiProcessor[k77mvq]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should throw AiDataValidationError if AI response has incorrect data structure [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Invalid Store", "valid_from": null, "valid_to": null, "store_address": null, "items": [ "n", "o", "t", "-", "a", "n", "-", "a", "r", "r", "a", "y" ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if store_name is missing [WORKER DEBUG] FlyerAiProcessor[7qe8nn]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if store_name is missing [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": null, "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": null, "items": [ { "item": "Test Item", "price_display": "$1.99", "price_in_cents": 199, "quantity": "each", "category_name": "Grocery" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if items array is empty [WORKER DEBUG] FlyerAiProcessor[05z3b]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if items array is empty [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Test Store", "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": null, "items": [] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if item price quality is low [WORKER DEBUG] FlyerAiProcessor[6914zi]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if item price quality is low [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Test Store", "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Test St", "items": [ { "item": "Priced Item", "price_in_cents": 199, "price_display": "$1.99", "quantity": "1", "category_name": "A" }, { "item": "Unpriced Item 1", "price_in_cents": null, "price_display": "See store", "quantity": "1", "category_name": "B" }, { "item": "Unpriced Item 2", "price_in_cents": null, "price_display": "FREE", "quantity": "1", "category_name": "C" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should use a custom price quality threshold from an environment variable [WORKER DEBUG] FlyerAiProcessor[aik80k]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should use a custom price quality threshold from an environment variable [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Test Store", "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Test St", "items": [ { "item": "Priced Item 1", "price_in_cents": 199, "price_display": "$1.99", "quantity": "1", "category_name": "A" }, { "item": "Priced Item 2", "price_in_cents": 299, "price_display": "$2.99", "quantity": "1", "category_name": "B" }, { "item": "Priced Item 3", "price_in_cents": 399, "price_display": "$3.99", "quantity": "1", "category_name": "C" }, { "item": "Unpriced Item 1", "price_in_cents": null, "price_display": "See store", "quantity": "1", "category_name": "D" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if validity dates are missing [WORKER DEBUG] FlyerAiProcessor[9pvovw]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should flag for review if validity dates are missing [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Test Store", "valid_from": null, "valid_to": null, "store_address": "123 Test St", "items": [ { "item": "Test Item", "price_in_cents": 199, "price_display": "$1.99", "quantity": "1", "category_name": "A" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should combine multiple quality issues in the log [WORKER DEBUG] FlyerAiProcessor[vvow6w]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Validation and Quality Checks > should combine multiple quality issues in the log [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": null, "valid_from": null, "valid_to": null, "store_address": null, "items": [] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should pass the userProfileAddress from jobData to the AI service [WORKER DEBUG] FlyerAiProcessor[qg4lr]: extractAndValidateData called with 1 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should pass the userProfileAddress from jobData to the AI service [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Test Store", "valid_from": "2024-01-01", "valid_to": "2024-01-07", "store_address": "123 Test St", "items": [ { "item": "Test Item", "price_in_cents": 199, "price_display": "$1.99", "quantity": "1", "category_name": "A" } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Batching Logic > should process images in batches and merge the results correctly [WORKER DEBUG] FlyerAiProcessor[8m4yo]: extractAndValidateData called with 5 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Batching Logic > should process images in batches and merge the results correctly [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Batch 1 Store", "valid_from": "2025-01-01", "valid_to": "2025-01-07", "store_address": "123 Batch St", "items": [ { "item": "Item A", "price_display": "$1", "price_in_cents": 100, "quantity": "1", "category_name": "Cat A", "master_item_id": 1 }, { "item": "Item B", "price_display": "$2", "price_in_cents": 200, "quantity": "1", "category_name": "Cat B", "master_item_id": 2 }, { "item": "Item C", "price_display": "$3", "price_in_cents": 300, "quantity": "1", "category_name": "Cat C", "master_item_id": 3 } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Batching Logic > should handle an empty object response from a batch without crashing [WORKER DEBUG] FlyerAiProcessor[m9excw]: extractAndValidateData called with 5 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Batching Logic > should handle an empty object response from a batch without crashing [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Good Store", "valid_from": "2025-01-01", "valid_to": "2025-01-07", "store_address": "123 Good St", "items": [ { "item": "Item A", "price_display": "$1", "price_in_cents": 100, "quantity": "1", "category_name": "Cat A", "master_item_id": 1 } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Batching Logic > should fill in missing metadata from subsequent batches [WORKER DEBUG] FlyerAiProcessor[nge3r]: extractAndValidateData called with 5 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > Batching Logic > should fill in missing metadata from subsequent batches [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Batch 2 Store", "valid_from": "2025-01-01", "valid_to": "2025-01-07", "store_address": "456 Subsequent St", "items": [ { "item": "Item A", "price_display": "$1", "price_in_cents": 100, "quantity": "1", "category_name": "Cat A", "master_item_id": 1 }, { "item": "Item C", "price_display": "$3", "price_in_cents": 300, "quantity": "1", "category_name": "Cat C", "master_item_id": 3 } ] } stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should handle a single batch correctly when image count is less than BATCH_SIZE [WORKER DEBUG] FlyerAiProcessor[xp57uo]: extractAndValidateData called with 2 images, extractFn=null stderr | src/services/flyerAiProcessor.server.test.ts > FlyerAiProcessor > should handle a single batch correctly when image count is less than BATCH_SIZE [WORKER DEBUG] FlyerAiProcessor: Merged AI Data: { "store_name": "Single Batch Store", "valid_from": "2025-02-01", "valid_to": "2025-02-07", "store_address": "789 Single St", "items": [ { "item": "Item X", "price_display": "$10", "price_in_cents": 1000, "quantity": "1", "category_name": "Cat X", "master_item_id": 10 } ] }  ❯ src/App.test.tsx 0/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 1/15  ❯ src/tests/integration/receipt.integration.test.ts [queued]  Test Files 3 failed | 20 passed (242)  Tests 1 failed | 1086 passed | 38 skipped (1177)  Start at 07:51:47  Duration 62.31s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/App.test.tsx > App Component > should render the BulkImporter for an admin user [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > should render the BulkImporter for an admin user [TEST DEBUG] Test Start: should render the BulkImporter for an admin user [TEST DEBUG] Rendering App with /admin route [TEST DEBUG] Waiting for admin-page-mock stdout | src/App.test.tsx > App Component > should show a welcome message when no flyer is selected [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > should render the admin page on the /admin route [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > should render the admin page on the /admin route [TEST DEBUG] Rendering App with /admin route [TEST DEBUG] Waiting for admin-page-mock stdout | src/App.test.tsx > App Component > should render the reset password page on the correct route [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Flyer Selection from URL > should select a flyer when flyerId is present in the URL [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete ✓ src/services/flyerAiProcessor.server.test.ts (15 tests) 113ms stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/App.test.tsx > App Component > Flyer Selection from URL > should not select a flyer if the flyerId from the URL does not exist [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/App.test.tsx > App Component > Flyer Selection from URL > should select the first flyer if no flyer is selected and flyers are available [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the ProfileManager modal [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete  ❯ src/App.test.tsx 7/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 15/15  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 21 passed (242)  Tests 1 failed | 1107 passed | 38 skipped (1200)  Start at 07:51:47  Duration 62.42s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the ProfileManager modal [TEST DEBUG] Test Start: should open and close the ProfileManager modal  ❯ src/App.test.tsx 8/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/services/flyerAiProcessor.server.test.ts 15/15  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 21 passed (242)  Tests 1 failed | 1108 passed | 38 skipped (1200)  Start at 07:51:47  Duration 62.81s [?2026l[?2026hstdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the ProfileManager modal [TEST DEBUG] ProfileManager modal opened. Now closing... stdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the ProfileManager modal [TEST DEBUG] ProfileManager modal closed. stdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the VoiceAssistant modal for authenticated users [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the VoiceAssistant modal for authenticated users [TEST DEBUG] Test Start: should open and close the VoiceAssistant modal [TEST DEBUG] Rendering App [TEST DEBUG] Clicking Open Voice Assistant [TEST DEBUG] Waiting for voice-assistant-mock stdout | src/App.test.tsx > App Component > Modal Interactions > should not render the FlyerCorrectionTool if no flyer is selected [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Modal Interactions > should open and close the FlyerCorrectionTool modal [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Modal Interactions > should render admin sub-routes correctly [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Modal Interactions > should render admin sub-routes correctly [TEST DEBUG] Test Start: should render admin sub-routes correctly Testing admin sub-routes with renderApp wrapper to ensure ModalProvider context [TEST DEBUG] Rendering App with /admin/corrections [TEST DEBUG] Waiting for corrections-page-mock stdout | src/App.test.tsx > App Component > Flyer Correction Tool Data Handling > should handle store name extraction from the correction tool [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=1 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 8b. waitFor interval: calls=2 stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 9. SUCCESS: Completion message found. stdout | src/App.test.tsx > App Component > Flyer Correction Tool Data Handling > should handle date extraction from the correction tool [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Profile and Login Handlers > should call updateProfile when handleProfileUpdate is triggered [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Profile and Login Handlers > should call updateProfile when handleProfileUpdate is triggered [TEST DEBUG] Test Start: should call updateProfile when handleProfileUpdate is triggered [TEST DEBUG] Rendering App [TEST DEBUG] Opening Profile stdout | src/App.test.tsx > App Component > Profile and Login Handlers > should call updateProfile when handleProfileUpdate is triggered [TEST DEBUG] Clicking Update Profile [TEST DEBUG] Checking mockUpdateProfile calls: [ [ { full_name: 'Updated' } ] ] stdout | src/App.test.tsx > App Component > Profile and Login Handlers > should set an error state if login fails inside handleLoginSuccess [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete  ❯ src/App.test.tsx 13/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 21 passed (242)  Tests 1 failed | 1113 passed | 38 skipped (1200)  Start at 07:51:47  Duration 63.42s [?2026l[?2026h  ❯ src/App.test.tsx 16/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 21 passed (242)  Tests 1 failed | 1116 passed | 38 skipped (1200)  Start at 07:51:47  Duration 63.71s [?2026l[?2026hstdout | src/App.test.tsx > App Component > Profile and Login Handlers > should set an error state if login fails inside handleLoginSuccess [TEST DEBUG] Test Start: should set an error state if login fails inside handleLoginSuccess [TEST DEBUG] Rendering App [TEST DEBUG] Opening Profile stdout | src/App.test.tsx > App Component > Profile and Login Handlers > should set an error state if login fails inside handleLoginSuccess [TEST DEBUG] Clicking Login [TEST DEBUG] Checking mockLogin calls: [ [ 'token', {} ] ] stdout | src/App.test.tsx > App Component > Version Display and What's New > should display the version number and commit link [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > Version Display and What's New > should open the "What's New" modal when the question mark icon is clicked [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > handleDataExtractedFromCorrection edge cases > should handle the early return when selectedFlyer is null [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > handleDataExtractedFromCorrection edge cases > should update store name in selectedFlyer when extracting store_name [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > handleDataExtractedFromCorrection edge cases > should handle dates extraction type [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete  ❯ src/App.test.tsx 21/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 21 passed (242)  Tests 1 failed | 1121 passed | 38 skipped (1200)  Start at 07:51:47  Duration 64.15s [?2026l[?2026hstdout | src/App.test.tsx > App Component > Debug logging in test environment > should trigger debug logging when NODE_ENV is test [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > handleFlyerSelect callback > should update selectedFlyer when handleFlyerSelect is called [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete stdout | src/App.test.tsx > App Component > URL-based flyer selection edge cases > should not re-select the same flyer if already selected [TEST DEBUG] beforeEach: Clearing mocks and setting up defaults [TEST DEBUG] beforeEach: Setup complete  ❯ src/App.test.tsx 25/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 21 passed (242)  Tests 1 failed | 1125 passed | 38 skipped (1200)  Start at 07:51:47  Duration 64.25s [?2026l[?2026h ✓ src/App.test.tsx (26 tests) 2431ms ✓ should set an error state if login fails inside handleLoginSuccess  862ms  ❯ src/App.test.tsx 26/26  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1126 passed | 38 skipped (1200)  Start at 07:51:47  Duration 65.08s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 3/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1126 passed | 38 skipped (1200)  Start at 07:51:47  Duration 65.19s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: 11. Timers advanced. Now asserting navigation. --- [TEST LOG] ---: 12. Callback and navigation confirmed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should poll for status, complete successfully, and redirect --- [TEST LOG] ---: Finished test: "FlyerUploader > should poll for status, complete successfully, and redirect" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a failed job  --- [TEST LOG] ---: Starting test: "FlyerUploader > should handle a failed job" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a failed job --- [TEST LOG] ---: 1. Setting up mocks for a failed job. --- [TEST LOG] ---: 2. Rendering and uploading. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 3. Firing file change event. --- [TEST LOG] ---: 3. File upload triggered. --- [TEST LOG] ---: 4. AWAITING failure message...  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 4/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1127 passed | 38 skipped (1200)  Start at 07:51:47  Duration 65.33s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a failed job [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. stderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a failed job [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. [LOGGER.ERROR] [FlyerUploader] Error encountered: Polling failed: AI model exploded { duplicateFlyerId: null }  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 4/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1127 passed | 38 skipped (1200)  Start at 07:51:47  Duration 65.33s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a failed job --- [TEST LOG] ---: 5. SUCCESS: Failure message found. --- [TEST LOG] ---: 6. "Upload Another" button confirmed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a failed job --- [TEST LOG] ---: Finished test: "FlyerUploader > should handle a failed job" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should clear the polling timeout when a job fails  --- [TEST LOG] ---: Starting test: "FlyerUploader > should clear the polling timeout when a job fails" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should clear the polling timeout when a job fails --- [TEST LOG] ---: 1. Setting up mocks for failed job timeout clearance. --- [TEST LOG] ---: Rendering component inside MemoryRouter. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should clear the polling timeout when a job fails [LOGGER.INFO] FlyerUploader Status: Working...  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 4/15  ❯ src/pages/admin/components/SystemCheck.test.tsx [queued]  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1127 passed | 38 skipped (1200)  Start at 07:51:47  Duration 65.33s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 5/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 0/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1128 passed | 38 skipped (1232)  Start at 07:51:47  Duration 65.87s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx [queued]  ❯ src/features/flyer/FlyerUploader.test.tsx 5/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 0/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1128 passed | 38 skipped (1232)  Start at 07:51:47  Duration 66.04s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx 0/22  ❯ src/features/flyer/FlyerUploader.test.tsx 5/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 0/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1128 passed | 38 skipped (1254)  Start at 07:51:47  Duration 67.70s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx 4/22  ❯ src/features/flyer/FlyerUploader.test.tsx 5/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 1/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1133 passed | 38 skipped (1254)  Start at 07:51:47  Duration 68.53s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should clear the polling timeout when a job fails [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. stderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should clear the polling timeout when a job fails [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. [LOGGER.ERROR] [FlyerUploader] Error encountered: Polling failed: Fatal Error { duplicateFlyerId: null }  ❯ src/features/flyer/ExtractedDataTable.test.tsx 10/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 5/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1144 passed | 38 skipped (1254)  Start at 07:51:47  Duration 68.63s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should clear the polling timeout when a job fails --- [TEST LOG] ---: Finished test: "FlyerUploader > should clear the polling timeout when a job fails" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should stop polling for job status when the component unmounts  --- [TEST LOG] ---: Starting test: "FlyerUploader > should stop polling for job status when the component unmounts" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should stop polling for job status when the component unmounts --- [TEST LOG] ---: 1. Setting up mocks for unmount polling stop. --- [TEST LOG] ---: Rendering component inside MemoryRouter. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should stop polling for job status when the component unmounts [LOGGER.INFO] FlyerUploader Status: Polling... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should stop polling for job status when the component unmounts --- [TEST LOG] ---: 2. First poll confirmed. --- [TEST LOG] ---: 3. Unmounting component. --- [TEST LOG] ---: 4. Waiting for 4 seconds to check for further polling.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 10/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 5/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1144 passed | 38 skipped (1254)  Start at 07:51:47  Duration 68.63s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx 10/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 6/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1145 passed | 38 skipped (1254)  Start at 07:51:47  Duration 69.07s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx 10/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 7/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts [queued]  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1146 passed | 38 skipped (1254)  Start at 07:51:47  Duration 69.24s [?2026l[?2026h  ❯ src/features/flyer/ExtractedDataTable.test.tsx 11/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 7/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 0/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1147 passed | 38 skipped (1295)  Start at 07:51:47  Duration 69.50s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET / > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 12/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 8/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 1/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1150 passed | 38 skipped (1295)  Start at 07:51:47  Duration 69.68s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET / > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:184:63 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 12/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 8/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 1/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1150 passed | 38 skipped (1295)  Start at 07:51:47  Duration 69.68s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > POST / > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 14/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 13/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1166 passed | 38 skipped (1295)  Start at 07:51:47  Duration 69.88s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > POST / > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:248:67 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 14/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 13/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1166 passed | 38 skipped (1295)  Start at 07:51:47  Duration 69.88s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /expiring/summary > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 14/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 14/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1167 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.03s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /expiring/summary > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:421:74 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 14/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 14/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1167 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.03s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /expired > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 15/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 29/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1183 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.13s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /expired > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:483:66 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 15/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 29/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1183 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.13s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /alerts > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 15/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 29/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1183 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.13s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /alerts > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:520:67 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 15/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 29/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1183 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.13s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > PUT /alerts/:alertMethod > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 15/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 29/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1183 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.13s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > PUT /alerts/:alertMethod > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:583:70 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 15/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 29/41  ❯ src/services/aiApiClient.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 22 passed (242)  Tests 1 failed | 1183 passed | 38 skipped (1295)  Start at 07:51:47  Duration 70.13s [?2026l[?2026hstdout | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /recipes/suggestions > should return 500 if service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 0/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1196 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.23s [?2026l[?2026hstderr | src/routes/inventory.routes.test.ts > Inventory Routes (/api/inventory) > GET /recipes/suggestions > should return 500 if service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/inventory.routes.test.ts:657:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 0/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1196 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.23s [?2026l[?2026h ✓ src/routes/inventory.routes.test.ts (41 tests) 691ms  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 0/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1196 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.23s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer > should construct FormData with file and checksum and send a POST request  --- [TEST START] uploadAndProcessFlyer --- [TEST ARRANGE] Created mock file: { name: 'flyer.pdf', size: 18, type: 'application/pdf' } [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'flyer.pdf'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/upload-and-process.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer > should construct FormData with file and checksum and send a POST request [aiApiClient] uploadAndProcessFlyer: Uploading file 'flyer.pdf' with checksum 'checksum-abc-123'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer > should construct FormData with file and checksum and send a POST request  --- [MSW HANDLER] Intercepted POST to 'upload-and-process' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer > should construct FormData with file and checksum and send a POST request [MSW HANDLER] Reading 'X-Test-Filename' header. Value: 'flyer.pdf' [MSW HANDLER DEBUG] Found file-like object for key 'flyerFile'. Original name: 'blob'. Using preserved name: 'flyer.pdf' [MSW HANDLER] Finished processing FormData. Final object for spy: { flyerFile: { name: 'flyer.pdf', size: 18, type: 'application/pdf' }, checksum: 'checksum-abc-123' } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer > should construct FormData with file and checksum and send a POST request [TEST ASSERT] Request object received by spy: { "endpoint": "upload-and-process", "method": "POST", "body": { "flyerFile": { "name": "flyer.pdf", "size": 18, "type": "application/pdf" }, "checksum": "checksum-abc-123" }, "headers": {} } [TEST DEBUG] uploadAndProcessFlyer - Body received by spy: { flyerFile: { name: 'flyer.pdf', size: 18, type: 'application/pdf' }, checksum: 'checksum-abc-123' } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer error handling > should throw a structured error with JSON body on non-ok response [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'flyer.pdf'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/upload-and-process.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer error handling > should throw a structured error with JSON body on non-ok response [aiApiClient] uploadAndProcessFlyer: Uploading file 'flyer.pdf' with checksum 'checksum-abc-123'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer error handling > should throw a structured error with text body on non-ok, non-JSON response [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'flyer.pdf'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/upload-and-process.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > uploadAndProcessFlyer error handling > should throw a structured error with text body on non-ok, non-JSON response [aiApiClient] uploadAndProcessFlyer: Uploading file 'flyer.pdf' with checksum 'checksum-abc-123'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus > should send a GET request to the correct job status URL [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/jobs/job-id-456/status.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus > should send a GET request to the correct job status URL [aiApiClient] getJobStatus: Fetching status for job 'job-id-456'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a JobFailedError if job state is "failed" [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/jobs/job-id-789/status.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a JobFailedError if job state is "failed" [aiApiClient] getJobStatus: Fetching status for job 'job-id-789'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should use failedReason for JobFailedError if progress message is missing [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/jobs/job-id-789/status.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should use failedReason for JobFailedError if progress message is missing [aiApiClient] getJobStatus: Fetching status for job 'job-id-789'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a generic error if the API response is not ok [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/jobs/job-id-789/status.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a generic error if the API response is not ok [aiApiClient] getJobStatus: Fetching status for job 'job-id-789'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a specific error if a 200 OK response is not valid JSON [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/jobs/job-id-789/status.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a specific error if a 200 OK response is not valid JSON [aiApiClient] getJobStatus: Fetching status for job 'job-id-789'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a generic error with status text if the non-ok API response is not valid JSON [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/jobs/job-id-789/status.  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstderr | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getJobStatus error handling > should throw a generic error with status text if the non-ok API response is not valid JSON [aiApiClient] getJobStatus: Fetching status for job 'job-id-789'  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > isImageAFlyer > should construct FormData and send a POST request  --- [TEST START] isImageAFlyer --- [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'flyer.jpg'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/check-flyer. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > isImageAFlyer > should construct FormData and send a POST request  --- [MSW HANDLER] Intercepted POST to 'check-flyer' ---  ❯ src/features/flyer/ExtractedDataTable.test.tsx 16/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 10/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 1/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1197 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.55s [?2026l[?2026hstdout | src/features/flyer/ExtractedDataTable.test.tsx > ExtractedDataTable > Data Edge Cases > should correctly format unit price for metric system --- DEBUG: Metric System Test Case --- DOM Structure:     Boneless Chicken         + Watch       Price:   $8.00/kg     Deal:    per kg      Unit Price:    $0.080   /kg      Category:   Meat   (Canonical:  Chicken Breast )      Row Text Content: Boneless Chicken+ WatchPrice:$8.00/kgDeal:per kgUnit Price:$0.080/kgCategory:Meat(Canonical: Chicken Breast) Found 2 elements containing "$": [0] Tag: , Text: "$8.00/kg" [1] Tag: , Text: "$0.080" Match Check: Strict='$8.00' found? false Match Check: Lax='$8.00' found? true --- DEBUG End --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > isImageAFlyer > should construct FormData and send a POST request [MSW HANDLER] Reading 'X-Test-Filename' header. Value: 'flyer.jpg' [MSW HANDLER DEBUG] Found file-like object for key 'image'. Original name: 'blob'. Using preserved name: 'flyer.jpg' [MSW HANDLER] Finished processing FormData. Final object for spy: { image: { name: 'flyer.jpg', size: 19, type: 'image/jpeg' } } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > isImageAFlyer > should construct FormData and send a POST request [TEST ASSERT] Request object received by spy: { "endpoint": "check-flyer", "method": "POST", "body": { "image": { "name": "flyer.jpg", "size": 19, "type": "image/jpeg" } }, "headers": {} } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractAddressFromImage > should construct FormData and send a POST request  --- [TEST START] extractAddressFromImage --- [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'flyer.jpg'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/extract-address. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractAddressFromImage > should construct FormData and send a POST request  --- [MSW HANDLER] Intercepted POST to 'extract-address' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractAddressFromImage > should construct FormData and send a POST request [MSW HANDLER] Reading 'X-Test-Filename' header. Value: 'flyer.jpg' [MSW HANDLER DEBUG] Found file-like object for key 'image'. Original name: 'blob'. Using preserved name: 'flyer.jpg' [MSW HANDLER] Finished processing FormData. Final object for spy: { image: { name: 'flyer.jpg', size: 19, type: 'image/jpeg' } } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractAddressFromImage > should construct FormData and send a POST request [TEST ASSERT] Request object received by spy: { "endpoint": "extract-address", "method": "POST", "body": { "image": { "name": "flyer.jpg", "size": 19, "type": "image/jpeg" } }, "headers": {} } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractLogoFromImage > should construct FormData and send a POST request  --- [TEST START] extractLogoFromImage --- [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'logo.jpg'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/extract-logo. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractLogoFromImage > should construct FormData and send a POST request  --- [MSW HANDLER] Intercepted POST to 'extract-logo' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractLogoFromImage > should construct FormData and send a POST request [MSW HANDLER] Reading 'X-Test-Filename' header. Value: 'logo.jpg' [MSW HANDLER DEBUG] Found file-like object for key 'images'. Original name: 'blob'. Using preserved name: 'logo.jpg' [MSW HANDLER] Finished processing FormData. Final object for spy: { images: { name: 'logo.jpg', size: 19, type: 'image/jpeg' } } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > extractLogoFromImage > should construct FormData and send a POST request [TEST ASSERT] Request object received by spy: { "endpoint": "extract-logo", "method": "POST", "body": { "images": { "name": "logo.jpg", "size": 19, "type": "image/jpeg" } }, "headers": {} } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getQuickInsights > should send items as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/quick-insights. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getQuickInsights > should send items as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'quick-insights' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getDeepDiveAnalysis > should send items as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/deep-dive. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > getDeepDiveAnalysis > should send items as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'deep-dive' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > searchWeb > should send query as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/search-web. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > searchWeb > should send query as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'search-web' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > generateImageFromText > should send prompt as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/generate-image. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > generateImageFromText > should send prompt as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'generate-image' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > generateSpeechFromText > should send text as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/generate-speech. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > generateSpeechFromText > should send text as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'generate-speech' --- stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > planTripWithMaps > should send items, store, and location as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/plan-trip. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > planTripWithMaps > should send items, store, and location as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'plan-trip' ---  ❯ src/features/flyer/ExtractedDataTable.test.tsx 19/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 11/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 8/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 23 passed (242)  Tests 1 failed | 1208 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.69s [?2026l[?2026hstdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > planTripWithMaps > should send items, store, and location as JSON in the body [TEST DEBUG] planTripWithMaps - Body received by spy: { items: [ { flyer_item_id: 1, flyer_id: 1, item: 'bread', price_display: '$1.99', price_in_cents: 199, unit_price: null, quantity: '1 loaf', view_count: 0, click_count: 0, created_at: '2026-01-19T07:52:58.128Z', updated_at: '2026-01-19T07:52:58.128Z', category_name: 'Bakery' } ], store: { store_id: 1, name: 'Test Store', logo_url: null, created_by: null, created_at: '2026-01-19T07:52:58.128Z', updated_at: '2026-01-19T07:52:58.128Z' }, userLocation: { latitude: 45, longitude: -75, accuracy: 0, altitude: null, altitudeAccuracy: null, heading: null, speed: null } } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > rescanImageArea > should construct FormData with image, cropArea, and extractionType  --- [TEST START] rescanImageArea --- [apiFetch MOCK] FormData detected. Searching for file to preserve its name. [apiFetch MOCK] Found file: 'flyer-page.jpg'. Setting 'X-Test-Filename' header. [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/rescan-area. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > rescanImageArea > should construct FormData with image, cropArea, and extractionType  --- [MSW HANDLER] Intercepted POST to 'rescan-area' --- ✓ src/features/flyer/ExtractedDataTable.test.tsx (22 tests) 4392ms ✓ should render the table with items  934ms ✓ should sort watched items to the top  681ms ✓ should sort items alphabetically within watched and unwatched groups  401ms stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > rescanImageArea > should construct FormData with image, cropArea, and extractionType [MSW HANDLER] Reading 'X-Test-Filename' header. Value: 'flyer-page.jpg' [MSW HANDLER DEBUG] Found file-like object for key 'image'. Original name: 'blob'. Using preserved name: 'flyer-page.jpg' [MSW HANDLER] Finished processing FormData. Final object for spy: { image: { name: 'flyer-page.jpg', size: 19, type: 'image/jpeg' }, cropArea: '{"x":10,"y":20,"width":100,"height":50}', extractionType: 'item_details' } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > rescanImageArea > should construct FormData with image, cropArea, and extractionType [TEST ASSERT] Request object received by spy: { "endpoint": "rescan-area", "method": "POST", "body": { "image": { "name": "flyer-page.jpg", "size": 19, "type": "image/jpeg" }, "cropArea": "{\"x\":10,\"y\":20,\"width\":100,\"height\":50}", "extractionType": "item_details" }, "headers": {} } stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > compareWatchedItemPrices > should send items as JSON in the body [apiFetch MOCK] Executing fetch for URL: http://localhost/api/ai/compare-prices. stdout | src/services/aiApiClient.test.ts > AI API Client (Network Mocking with MSW) > compareWatchedItemPrices > should send items as JSON in the body  --- [MSW HANDLER] Intercepted POST to 'compare-prices' ---  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 12/32  ❯ src/routes/admin.content.routes.test.ts [queued]  ❯ src/routes/inventory.routes.test.ts 41/41  ❯ src/services/aiApiClient.test.ts 18/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 24 passed (242)  Tests 1 failed | 1222 passed | 38 skipped (1316)  Start at 07:51:47  Duration 70.82s [?2026l[?2026h ✓ src/services/aiApiClient.test.ts (21 tests) 488ms  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 12/32  ❯ src/routes/admin.content.routes.test.ts 0/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1225 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.27s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 12/32  ❯ src/routes/admin.content.routes.test.ts 1/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1226 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.48s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:205:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 12/32  ❯ src/routes/admin.content.routes.test.ts 1/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1226 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.48s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > POST /corrections/:id/approve should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 12/32  ❯ src/routes/admin.content.routes.test.ts 1/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1226 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.48s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > POST /corrections/:id/approve should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:226:73 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 12/32  ❯ src/routes/admin.content.routes.test.ts 1/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1226 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.48s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > POST /corrections/:id/reject should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 13/32  ❯ src/routes/admin.content.routes.test.ts 6/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1232 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.58s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > POST /corrections/:id/reject should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:241:72 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 13/32  ❯ src/routes/admin.content.routes.test.ts 6/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1232 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.58s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > PUT /corrections/:id should return 500 on a generic DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 13/32  ❯ src/routes/admin.content.routes.test.ts 6/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1232 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.58s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Corrections Routes > PUT /corrections/:id should return 500 on a generic DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Generic DB Error at /app/src/routes/admin.content.routes.test.ts:283:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/ExtractedDataTable.test.tsx 22/22  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 13/32  ❯ src/routes/admin.content.routes.test.ts 6/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1232 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.58s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Flyer Review Routes > GET /review/flyers should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 11/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1238 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.87s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Flyer Review Routes > GET /review/flyers should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:309:74 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 11/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1238 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.87s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Stats Routes > GET /stats should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 11/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1238 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.87s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Stats Routes > GET /stats should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:319:75 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 11/36  ❯ src/services/aiApiClient.test.ts 21/21  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1238 passed | 38 skipped (1352)  Start at 07:51:47  Duration 71.87s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > GET /brands should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > GET /brands should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:336:68 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > POST /brands/:id/logo should upload a logo and update the brand [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images stderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > POST /brands/:id/logo should return 500 on DB error [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > POST /brands/:id/logo should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > POST /brands/:id/logo should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:360:71 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > should clean up the uploaded file if updating the brand logo fails [MULTER DEBUG] Flyer storage destination: /var/www/flyer-crawler.projectium.com/flyer-images  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > should clean up the uploaded file if updating the brand logo fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Brand Routes > should clean up the uploaded file if updating the brand logo fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/admin.content.routes.test.ts:377:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Recipe and Comment Routes > DELETE /recipes/:recipeId should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Recipe and Comment Routes > DELETE /recipes/:recipeId should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:431:69 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Recipe and Comment Routes > PUT /recipes/:id/status should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Recipe and Comment Routes > PUT /recipes/:id/status should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:460:74 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Recipe and Comment Routes > PUT /comments/:id/status should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Recipe and Comment Routes > PUT /comments/:id/status should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:495:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Unmatched Items Route > GET /unmatched-items should return 500 on DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Unmatched Items Route > GET /unmatched-items should return 500 on DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.content.routes.test.ts:520:78 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Flyer Routes > DELETE /flyers/:flyerId should return 500 on a generic DB error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) > Flyer Routes > DELETE /flyers/:flyerId should return 500 on a generic DB error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Generic DB Error at /app/src/routes/admin.content.routes.test.ts:551:67 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) stderr | src/routes/admin.content.routes.test.ts > Admin Content Management Routes (/api/admin) Error during admin content test file cleanup: TypeError: __vi_import_4__.default.readdir is not a function at /app/src/routes/admin.content.routes.test.ts:176:33 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at runHook (file:///app/node_modules/@vitest/runner/dist/index.js:1514:51) at callSuiteHook (file:///app/node_modules/@vitest/runner/dist/index.js:1520:25) at file:///app/node_modules/@vitest/runner/dist/index.js:1826:36 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runSuite (file:///app/node_modules/@vitest/runner/dist/index.js:1826:10)  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 14/32  ❯ src/routes/admin.content.routes.test.ts 16/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 0/23  Test Files 3 failed | 25 passed (242)  Tests 1 failed | 1243 passed | 38 skipped (1352)  Start at 07:51:47  Duration 72.53s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should stop polling for job status when the component unmounts --- [TEST LOG] ---: 5. Asserting no new polls occurred. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should stop polling for job status when the component unmounts --- [TEST LOG] ---: Finished test: "FlyerUploader > should stop polling for job status when the component unmounts" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a duplicate flyer error (409)  --- [TEST LOG] ---: Starting test: "FlyerUploader > should handle a duplicate flyer error (409)" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a duplicate flyer error (409) --- [TEST LOG] ---: 1. Setting up mock for 409 duplicate error. --- [TEST LOG] ---: 2. Rendering and uploading. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 3. Firing file change event. --- [TEST LOG] ---: 3. File upload triggered. --- [TEST LOG] ---: 4. AWAITING duplicate flyer message...  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 15/32  ❯ src/routes/admin.content.routes.test.ts 36/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 23/23  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1264 passed | 61 skipped (1352)  Start at 07:51:47  Duration 72.83s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a duplicate flyer error (409) [LOGGER.ERROR] [FlyerUploader] Error encountered: This flyer has already been processed. { duplicateFlyerId: 99 }  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 15/32  ❯ src/routes/admin.content.routes.test.ts 36/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 23/23  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1264 passed | 61 skipped (1352)  Start at 07:51:47  Duration 72.83s [?2026l[?2026h ✓ src/routes/admin.content.routes.test.ts (36 tests) 1030ms ❯ src/tests/integration/receipt.integration.test.ts (23 tests | 23 skipped) 10017ms ↓ should upload a receipt image successfully ↓ should upload receipt without optional fields ↓ should reject request without file ↓ should reject unauthenticated requests ↓ should return paginated list of receipts ↓ should support status filter ↓ should support pagination ↓ should only return receipts for the authenticated user ↓ should return receipt with items ↓ should return 404 for non-existent receipt ↓ should not allow accessing another user's receipt ↓ should delete a receipt ↓ should queue a failed receipt for reprocessing ↓ should return 404 for non-existent receipt ↓ should return all receipt items ↓ should update item status ↓ should reject invalid status ↓ should return unadded items ↓ should confirm items and add to inventory ↓ should skip items with include: false ↓ should reject invalid location ↓ should return processing logs ↓ should handle full upload-process-confirm workflow  ❯ src/features/flyer/FlyerUploader.test.tsx 6/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 15/32  ❯ src/routes/admin.content.routes.test.ts 36/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 23/23  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1264 passed | 61 skipped (1352)  Start at 07:51:47  Duration 72.83s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a duplicate flyer error (409) --- [TEST LOG] ---: 5. SUCCESS: Duplicate message found. --- [TEST LOG] ---: 6. Duplicate link confirmed.  ❯ src/features/flyer/FlyerUploader.test.tsx 7/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 16/32  ❯ src/routes/admin.content.routes.test.ts 36/36  ❯ src/tests/integration/admin.integration.test.ts [queued]  ❯ src/tests/integration/receipt.integration.test.ts 23/23  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1266 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.13s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should handle a duplicate flyer error (409) --- [TEST LOG] ---: Finished test: "FlyerUploader > should handle a duplicate flyer error (409)" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should allow the user to stop watching progress  --- [TEST LOG] ---: Starting test: "FlyerUploader > should allow the user to stop watching progress" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should allow the user to stop watching progress --- [TEST LOG] ---: 1. Setting up mocks for infinite polling. --- [TEST LOG] ---: 2. Rendering and uploading. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 3. Firing file change event. --- [TEST LOG] ---: 3. File upload triggered. --- [TEST LOG] ---: 4. AWAITING polling UI... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should allow the user to stop watching progress [LOGGER.INFO] FlyerUploader Status: Analyzing... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should allow the user to stop watching progress --- [TEST LOG] ---: 5. SUCCESS: Polling UI is visible. --- [TEST LOG] ---: 6. Clicking "Stop Watching Progress" button. --- [TEST LOG] ---: 7. Click event fired. --- [TEST LOG] ---: 8. AWAITING UI reset to idle state... stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should allow the user to stop watching progress --- [TEST LOG] ---: 9. SUCCESS: UI has reset and message removed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > should allow the user to stop watching progress --- [TEST LOG] ---: Finished test: "FlyerUploader > should allow the user to stop watching progress" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure  --- [TEST LOG] ---: Starting test: "FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure --- [TEST LOG] ---: 1. Setting up mock for checksum failure. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 2. Firing file change event. --- [TEST LOG] ---: 3. Awaiting error message.  ❯ src/features/flyer/FlyerUploader.test.tsx 8/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 17/32  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1268 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.60s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure [LOGGER.ERROR] [FlyerUploader] Error encountered: Checksum generation failed { duplicateFlyerId: null }  ❯ src/features/flyer/FlyerUploader.test.tsx 8/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 17/32  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1268 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.60s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure --- [TEST LOG] ---: 4. Assertions passed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure --- [TEST LOG] ---: Finished test: "FlyerUploader > Error Handling and Edge Cases > should handle checksum generation failure" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload  --- [TEST LOG] ---: Starting test: "FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload --- [TEST LOG] ---: 1. Setting up mock for generic upload error. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 2. Firing file change event. --- [TEST LOG] ---: 3. Awaiting error message.  ❯ src/features/flyer/FlyerUploader.test.tsx 8/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 17/32  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1268 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.60s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload [LOGGER.ERROR] [FlyerUploader] Error encountered: Network Error During Upload { duplicateFlyerId: null }  ❯ src/features/flyer/FlyerUploader.test.tsx 8/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 17/32  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1268 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.60s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload --- [TEST LOG] ---: 4. Assertions passed.  ❯ src/features/flyer/FlyerUploader.test.tsx 8/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 17/32  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1268 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.60s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload --- [TEST LOG] ---: Finished test: "FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during upload" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling  --- [TEST LOG] ---: Starting test: "FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling --- [TEST LOG] ---: 1. Setting up mock for polling error. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 2. Firing file change event. --- [TEST LOG] ---: 3. Awaiting error message.  ❯ src/features/flyer/FlyerUploader.test.tsx 11/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 18/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1272 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.70s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. stderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. [LOGGER.ERROR] [FlyerUploader] Error encountered: Polling failed: Polling Network Error { duplicateFlyerId: null }  ❯ src/features/flyer/FlyerUploader.test.tsx 11/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 18/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1272 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.70s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling --- [TEST LOG] ---: 4. Assertions passed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling --- [TEST LOG] ---: Finished test: "FlyerUploader > Error Handling and Edge Cases > should handle a generic network error during polling" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId  --- [TEST LOG] ---: Starting test: "FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId --- [TEST LOG] ---: 1. Setting up mock for malformed completion payload. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 2. Firing file change event. --- [TEST LOG] ---: 3. Awaiting error message.  ❯ src/features/flyer/FlyerUploader.test.tsx 11/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 18/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1272 passed | 61 skipped (1352)  Start at 07:51:47  Duration 73.70s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId [LOGGER.ERROR] [FlyerUploader] Error encountered: Job completed but did not return a flyer ID. { duplicateFlyerId: null }  ❯ src/features/flyer/FlyerUploader.test.tsx 12/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 19/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1274 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.09s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId --- [TEST LOG] ---: 4. Assertions passed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId --- [TEST LOG] ---: Finished test: "FlyerUploader > Error Handling and Edge Cases > should handle a completed job with a missing flyerId" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling  --- [TEST LOG] ---: Starting test: "FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling" --- [TEST LOG] ---: Mocks reset.  ❯ src/features/flyer/FlyerUploader.test.tsx 12/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 19/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 26 passed (242)  Tests 1 failed | 1274 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.09s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling --- [TEST LOG] ---: 1. Setting up mock for non-JSON response. --- [TEST LOG] ---: Rendering component inside MemoryRouter. --- [TEST LOG] ---: 2. Firing file change event. --- [TEST LOG] ---: 3. Awaiting error message.  ❯ src/features/flyer/FlyerUploader.test.tsx 15/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 19/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1277 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.23s [?2026l[?2026hstderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. stderr | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling [LOGGER.WARN] [useFlyerUploader] Polling stopped due to query error state. [LOGGER.ERROR] [FlyerUploader] Error encountered: Polling failed: Failed to parse JSON response from server. Body: 502 Bad Gateway { duplicateFlyerId: null }  ❯ src/features/flyer/FlyerUploader.test.tsx 15/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 19/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1277 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.23s [?2026l[?2026hstdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling --- [TEST LOG] ---: 4. Assertions passed. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling --- [TEST LOG] ---: Finished test: "FlyerUploader > Error Handling and Edge Cases > should handle a non-JSON response during polling" stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should do nothing if the file input is cancelled  --- [TEST LOG] ---: Starting test: "FlyerUploader > Error Handling and Edge Cases > should do nothing if the file input is cancelled" --- [TEST LOG] ---: Mocks reset. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should do nothing if the file input is cancelled --- [TEST LOG] ---: Rendering component inside MemoryRouter. stdout | src/features/flyer/FlyerUploader.test.tsx > FlyerUploader > Error Handling and Edge Cases > should do nothing if the file input is cancelled --- [TEST LOG] ---: Finished test: "FlyerUploader > Error Handling and Edge Cases > should do nothing if the file input is cancelled" ✓ src/features/flyer/FlyerUploader.test.tsx (15 tests) 17232ms ✓ should handle file upload and start polling  3166ms ✓ should poll for status, complete successfully, and redirect  5073ms ✓ should clear the polling timeout when a job fails  3048ms ✓ should stop polling for job status when the component unmounts  4063ms ✓ should handle a duplicate flyer error (409)  841ms  ❯ src/features/flyer/FlyerUploader.test.tsx 15/15  ❯ src/pages/admin/components/SystemCheck.test.tsx 19/32  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1277 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.23s [?2026l[?2026h  ❯ src/pages/admin/components/SystemCheck.test.tsx 21/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1279 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.34s [?2026l[?2026h  ❯ src/pages/admin/components/SystemCheck.test.tsx 22/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1280 passed | 61 skipped (1352)  Start at 07:51:47  Duration 74.97s [?2026l[?2026h  ❯ src/pages/admin/components/SystemCheck.test.tsx 22/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1280 passed | 61 skipped (1384)  Start at 07:51:47  Duration 75.08s [?2026l[?2026h  ❯ src/pages/admin/components/SystemCheck.test.tsx 24/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1282 passed | 61 skipped (1384)  Start at 07:51:47  Duration 75.39s [?2026l[?2026h  ❯ src/pages/admin/components/SystemCheck.test.tsx 25/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1283 passed | 61 skipped (1384)  Start at 07:51:47  Duration 75.72s [?2026l[?2026h  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/pages/admin/components/SystemCheck.test.tsx 26/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1284 passed | 61 skipped (1384)  Start at 07:51:47  Duration 75.83s [?2026l[?2026h  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/pages/admin/components/SystemCheck.test.tsx 27/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/services/db/upc.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1285 passed | 61 skipped (1384)  Start at 07:51:47  Duration 76.05s [?2026l[?2026h  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/pages/admin/components/SystemCheck.test.tsx 32/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts [queued]  ❯ src/services/db/upc.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 27 passed (242)  Tests 1 failed | 1290 passed | 61 skipped (1384)  Start at 07:51:47  Duration 76.93s [?2026l[?2026h ✓ src/pages/admin/components/SystemCheck.test.tsx (32 tests) 10628ms ✓ should render initial idle state and then run checks automatically on mount  1500ms ✓ should show backend connection as failed if pingBackend fails  385ms ✓ should skip schema and seed checks if DB pool check fails  302ms ✓ should show seeded user check as failed if loginUser fails  311ms ✓ should display a loading spinner and disable button while checks are running  700ms ✓ should re-run checks when the "Re-run Checks" button is clicked  713ms ✓ should call triggerFailingJob and show a success toast  476ms ✓ should show a loading state while triggering the job  809ms ✓ should show an error toast if triggering the job fails  352ms ✓ should show an error toast if the API returns a non-OK response  309ms ✓ should call clearGeocodeCache and show a success toast  375ms ✓ should not call clearGeocodeCache if user cancels confirmation  339ms ✓ should show an error toast if the API returns a non-OK response  398ms  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/pages/admin/components/SystemCheck.test.tsx 32/32  ❯ src/services/authService.test.ts [queued]  ❯ src/services/db/recipe.db.test.ts 0/42  ❯ src/services/db/upc.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 28 passed (242)  Tests 1 failed | 1290 passed | 61 skipped (1426)  Start at 07:51:47  Duration 77.50s [?2026l[?2026h  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/pages/admin/components/SystemCheck.test.tsx 32/32  ❯ src/services/authService.test.ts 0/27  ❯ src/services/db/recipe.db.test.ts 1/42  ❯ src/services/db/upc.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts [queued]  Test Files 4 failed | 28 passed (242)  Tests 1 failed | 1291 passed | 61 skipped (1453)  Start at 07:51:47  Duration 77.60s [?2026l[?2026h ✓ src/services/db/recipe.db.test.ts (42 tests) 178ms  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/services/authService.test.ts 0/27  ❯ src/services/db/recipe.db.test.ts 42/42  ❯ src/services/db/upc.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  Test Files 4 failed | 29 passed (242)  Tests 1 failed | 1332 passed | 61 skipped (1473)  Start at 07:51:47  Duration 78.54s [?2026l[?2026hstdout | src/services/authService.test.ts > AuthService > registerAndLoginUser > should register user and return tokens [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex" stdout | src/services/authService.test.ts > AuthService > generateAuthTokens > should generate access and refresh tokens [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex" stdout | src/services/authService.test.ts > AuthService > resetPassword > should process password reset for existing user [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex" stdout | src/services/authService.test.ts > AuthService > resetPassword > should log error if sending email fails but still return token [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/services/authService.test.ts 5/27  ❯ src/services/db/upc.db.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  Test Files 4 failed | 29 passed (242)  Tests 1 failed | 1337 passed | 61 skipped (1473)  Start at 07:51:47  Duration 79.01s [?2026l[?2026hstdout | src/services/authService.test.ts > AuthService > refreshAccessToken > should return new access token if user found [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex" ✓ src/services/authService.test.ts (27 tests) 1223ms ✓ should successfully register a new user  942ms  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/services/authService.test.ts 27/27  ❯ src/services/db/upc.db.test.ts 1/34  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  Test Files 4 failed | 30 passed (242)  Tests 1 failed | 1360 passed | 61 skipped (1507)  Start at 07:51:47  Duration 79.11s [?2026l[?2026h  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/services/authService.test.ts 27/27  ❯ src/services/db/upc.db.test.ts 14/34  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  Test Files 4 failed | 30 passed (242)  Tests 1 failed | 1373 passed | 61 skipped (1507)  Start at 07:51:47  Duration 79.21s [?2026l[?2026h ✓ src/services/db/upc.db.test.ts (34 tests) 200ms  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/services/db/upc.db.test.ts 34/34  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1393 passed | 61 skipped (1507)  Start at 07:51:47  Duration 79.82s [?2026l[?2026h  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/services/db/upc.db.test.ts 34/34  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1393 passed | 61 skipped (1507)  Start at 07:51:47  Duration 80.06s [?2026l[?2026h  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1393 passed | 61 skipped (1507)  Start at 07:51:47  Duration 80.37s [?2026l[?2026h  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 0/24  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1393 passed | 61 skipped (1531)  Start at 07:51:47  Duration 80.49s [?2026l[?2026h  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 3/24  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1396 passed | 61 skipped (1531)  Start at 07:51:47  Duration 81.14s [?2026l[?2026h  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 6/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1399 passed | 61 skipped (1531)  Start at 07:51:47  Duration 81.54s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 8/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1401 passed | 61 skipped (1531)  Start at 07:51:47  Duration 81.95s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 9/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1402 passed | 61 skipped (1531)  Start at 07:51:47  Duration 82.44s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 10/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts [queued]  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1403 passed | 61 skipped (1531)  Start at 07:51:47  Duration 82.56s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 10/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1403 passed | 61 skipped (1543)  Start at 07:51:47  Duration 82.83s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 12/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1405 passed | 61 skipped (1543)  Start at 07:51:47  Duration 83.20s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 13/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1406 passed | 61 skipped (1543)  Start at 07:51:47  Duration 83.49s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 16/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1409 passed | 61 skipped (1543)  Start at 07:51:47  Duration 84.10s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 17/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1410 passed | 61 skipped (1543)  Start at 07:51:47  Duration 84.24s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx [queued]  ❯ src/pages/admin/components/CorrectionRow.test.tsx 18/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1411 passed | 61 skipped (1543)  Start at 07:51:47  Duration 84.80s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 0/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 19/24  ❯ src/routes/upc.routes.test.ts [queued]  ❯ src/tests/integration/admin.integration.test.ts 0/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 4 failed | 31 passed (242)  Tests 1 failed | 1412 passed | 61 skipped (1556)  Start at 07:51:47  Duration 85.19s [?2026l[?2026h ❯ src/tests/integration/admin.integration.test.ts (32 tests | 32 skipped) 10013ms ↓ should allow an admin to fetch application stats ↓ should forbid a regular user from fetching application stats ↓ should allow an admin to fetch daily stats ↓ should forbid a regular user from fetching daily stats ↓ should allow an admin to fetch suggested corrections ↓ should forbid a regular user from fetching suggested corrections ↓ should allow an admin to fetch all brands ↓ should forbid a regular user from fetching all brands ↓ should allow an admin to approve a correction ↓ should allow an admin to reject a correction ↓ should allow an admin to update a correction ↓ should allow an admin to update a recipe status ↓ should allow an admin to delete another user's account ↓ should prevent an admin from deleting their own account ↓ should return 404 if the user to be deleted is not found ↓ should return queue status for all queues ↓ should forbid regular users from viewing queue status ↓ should enqueue an analytics report job ↓ should forbid regular users from triggering analytics report ↓ should enqueue a weekly analytics job ↓ should forbid regular users from triggering weekly analytics ↓ should enqueue a daily deal check job ↓ should forbid regular users from triggering daily deal check ↓ should clear the application cache ↓ should forbid regular users from clearing cache ↓ should return validation error for invalid queue name ↓ should return 404 for non-existent job ↓ should forbid regular users from retrying jobs ↓ should return all users for admin ↓ should forbid regular users from listing all users ↓ should return pending review flyers for admin ↓ should forbid regular users from viewing pending flyers  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 0/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 21/24  ❯ src/routes/upc.routes.test.ts 0/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 31 passed (242)  Tests 1 failed | 1414 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.38s [?2026l[?2026hstdout | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > POST /scan > should return 500 if the scan service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 6/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 21/24  ❯ src/routes/upc.routes.test.ts 4/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 31 passed (242)  Tests 1 failed | 1424 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.48s [?2026l[?2026hstderr | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > POST /scan > should return 500 if the scan service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Scan service error at /app/src/routes/upc.routes.test.ts:193:55 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 6/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 21/24  ❯ src/routes/upc.routes.test.ts 4/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 31 passed (242)  Tests 1 failed | 1424 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.48s [?2026l[?2026h ✓ src/hooks/useActiveDeals.test.tsx (13 tests) 388ms stdout | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > GET /lookup > should return 500 if the lookup service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 21/24  ❯ src/routes/upc.routes.test.ts 9/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1436 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.59s [?2026l[?2026hstderr | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > GET /lookup > should return 500 if the lookup service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Lookup error at /app/src/routes/upc.routes.test.ts:280:57 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 21/24  ❯ src/routes/upc.routes.test.ts 9/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1436 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.59s [?2026l[?2026hstdout | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > GET /history > should return 500 if the history service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 22/24  ❯ src/routes/upc.routes.test.ts 16/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1444 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.79s [?2026l[?2026hstderr | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > GET /history > should return 500 if the history service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: History error at /app/src/routes/upc.routes.test.ts:377:62 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 22/24  ❯ src/routes/upc.routes.test.ts 16/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1444 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.79s [?2026l[?2026hstdout | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > GET /stats > should return 500 if the stats service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 22/24  ❯ src/routes/upc.routes.test.ts 16/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1444 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.79s [?2026l[?2026hstderr | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > GET /stats > should return 500 if the stats service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Stats error at /app/src/routes/upc.routes.test.ts:454:60 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 22/24  ❯ src/routes/upc.routes.test.ts 16/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1444 passed | 93 skipped (1583)  Start at 07:51:47  Duration 85.79s [?2026l[?2026hstdout | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > POST /link > should return 500 if the link service fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 22/24  ❯ src/routes/upc.routes.test.ts 23/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1451 passed | 93 skipped (1583)  Start at 07:51:47  Duration 86.01s [?2026l[?2026hstderr | src/routes/upc.routes.test.ts > UPC Routes (/api/upc) > POST /link > should return 500 if the link service fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Link error at /app/src/routes/upc.routes.test.ts:519:64 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 22/24  ❯ src/routes/upc.routes.test.ts 23/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 32 passed (242)  Tests 1 failed | 1451 passed | 93 skipped (1583)  Start at 07:51:47  Duration 86.01s [?2026l[?2026h ✓ src/routes/upc.routes.test.ts (27 tests) 779ms  ❯ src/features/flyer/FlyerList.test.tsx [queued]  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 24/24  ❯ src/routes/upc.routes.test.ts 27/27  ❯ src/tests/integration/admin.integration.test.ts 32/32  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 33 passed (242)  Tests 1 failed | 1457 passed | 93 skipped (1583)  Start at 07:51:47  Duration 86.11s [?2026l[?2026h ✓ src/pages/admin/components/CorrectionRow.test.tsx (24 tests) 5498ms ✓ should render correction data correctly  375ms ✓ should call approveCorrection when approval is confirmed  842ms ✓ should display an error message if an action fails  461ms ✓ should display a generic error if saving an edit fails with a non-Error object  330ms ✓ should save an edited value for INCORRECT_ITEM_LINK  344ms ✓ should render a select for INCORRECT_ITEM_LINK  372ms ✓ should render a select for ITEM_IS_MISCATEGORIZED  343ms  ❯ src/features/flyer/FlyerList.test.tsx 0/25  ❯ src/hooks/useActiveDeals.test.tsx 13/13  ❯ src/pages/admin/components/CorrectionRow.test.tsx 24/24  ❯ src/routes/upc.routes.test.ts 27/27  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 34 passed (242)  Tests 1 failed | 1457 passed | 93 skipped (1608)  Start at 07:51:47  Duration 86.25s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx 0/25  ❯ src/pages/admin/components/CorrectionRow.test.tsx 24/24  ❯ src/routes/upc.routes.test.ts 27/27  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 34 passed (242)  Tests 1 failed | 1457 passed | 93 skipped (1608)  Start at 07:51:47  Duration 86.46s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx 0/25  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 34 passed (242)  Tests 1 failed | 1457 passed | 93 skipped (1608)  Start at 07:51:47  Duration 87.17s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx 3/25  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 34 passed (242)  Tests 1 failed | 1460 passed | 93 skipped (1608)  Start at 07:51:47  Duration 87.94s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx 7/25  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 0/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 5 failed | 34 passed (242)  Tests 1 failed | 1464 passed | 93 skipped (1608)  Start at 07:51:47  Duration 88.37s [?2026l[?2026h ❯ src/tests/integration/upc.integration.test.ts (20 tests | 20 skipped) 10027ms ↓ should record a manual UPC scan successfully ↓ should record scan with product lookup result ↓ should reject invalid UPC code format ↓ should reject invalid scan_source ↓ should reject unauthenticated requests ↓ should return null for unknown UPC code ↓ should return product for known UPC code ↓ should reject missing upc_code parameter ↓ should return paginated scan history ↓ should support pagination parameters ↓ should filter by scan_source ↓ should only return scans for the authenticated user ↓ should return a specific scan by ID ↓ should return 404 for non-existent scan ↓ should not allow accessing another user's scan ↓ should return user scan statistics ↓ should allow admin to link UPC to product ↓ should reject non-admin users ↓ should reject invalid product_id ↓ should handle full scan-lookup-history workflow  ❯ src/features/flyer/FlyerList.test.tsx 16/25  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 20/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 6 failed | 34 passed (242)  Tests 1 failed | 1473 passed | 113 skipped (1608)  Start at 07:51:47  Duration 88.68s [?2026l[?2026h  ❯ src/features/flyer/FlyerList.test.tsx 18/25  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 20/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 6 failed | 34 passed (242)  Tests 1 failed | 1475 passed | 113 skipped (1608)  Start at 07:51:47  Duration 89.33s [?2026l[?2026h ✓ src/features/flyer/FlyerList.test.tsx (25 tests) 2959ms ✓ should render the heading  837ms  ❯ src/features/flyer/FlyerList.test.tsx 25/25  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/upc.integration.test.ts 20/20  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 6 failed | 35 passed (242)  Tests 1 failed | 1482 passed | 113 skipped (1608)  Start at 07:51:47  Duration 89.90s [?2026l[?2026h  ❯ src/services/userService.test.ts [queued]  ❯ src/tests/e2e/inventory-journey.e2e.test.ts [queued]  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 6 failed | 35 passed (242)  Tests 1 failed | 1482 passed | 113 skipped (1608)  Start at 07:51:47  Duration 90.37s [?2026l[?2026h  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/tests/e2e/inventory-journey.e2e.test.ts 0/1  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 6 failed | 35 passed (242)  Tests 1 failed | 1482 passed | 113 skipped (1609)  Start at 07:51:47  Duration 91.08s [?2026l[?2026h  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/tests/e2e/inventory-journey.e2e.test.ts 0/1  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 6 failed | 35 passed (242)  Tests 1 failed | 1482 passed | 113 skipped (1609)  Start at 07:51:47  Duration 92.17s [?2026l[?2026h ❯ src/tests/e2e/inventory-journey.e2e.test.ts (1 test | 1 failed) 243ms  × should complete inventory journey: Register -> Add Items -> Track Expiry -> Consume -> Configure Alerts 234ms  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/tests/integration/user.integration.test.ts 0/12  Test Files 7 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 113 skipped (1609)  Start at 07:51:47  Duration 92.38s [?2026l[?2026h  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/tests/integration/user.integration.test.ts 1/12  Test Files 7 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 114 skipped (1609)  Start at 07:51:47  Duration 93.03s [?2026l[?2026h  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/tests/integration/user.integration.test.ts 1/12  Test Files 7 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 114 skipped (1609)  Start at 07:51:47  Duration 93.39s [?2026l[?2026h ❯ src/tests/integration/user.integration.test.ts (12 tests | 12 skipped) 10013ms ↓ should fetch the authenticated user profile via GET /api/users/profile ↓ should update the user profile via PUT /api/users/profile ↓ should allow updating the profile with an empty string for avatar_url ↓ should update user preferences via PUT /api/users/profile/preferences ↓ should reject registration with a weak password ↓ should allow a user to delete their own account and then fail to log in ↓ should allow a user to reset their password and log in with the new one ↓ should allow a user to add and remove a watched item ↓ should allow a user to manage a shopping list ↓ should allow a user to upload an avatar image and update their profile ↓ should reject avatar upload for an invalid file type ↓ should reject avatar upload for a file that is too large  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 125 skipped (1609)  Start at 07:51:47  Duration 93.70s [?2026l[?2026h  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 125 skipped (1609)  Start at 07:51:47  Duration 94.39s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 125 skipped (1609)  Start at 07:51:47  Duration 94.70s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts [queued]  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 125 skipped (1609)  Start at 07:51:47  Duration 95.80s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts 0/19  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 35 passed (242)  Tests 2 failed | 1482 passed | 125 skipped (1628)  Start at 07:51:47  Duration 95.95s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/services/userService.test.ts 1/19  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 35 passed (242)  Tests 2 failed | 1483 passed | 125 skipped (1628)  Start at 07:51:47  Duration 96.10s [?2026l[?2026h ✓ src/services/userService.test.ts (19 tests) 166ms  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts [queued]  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 36 passed (242)  Tests 2 failed | 1501 passed | 125 skipped (1628)  Start at 07:51:47  Duration 96.31s [?2026l[?2026hstdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > should initialize with correct default states  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > should initialize with correct default states TEST: should initialize with correct default states Asserting initial state... Initial state assertions passed. stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should call the correct service method for QUICK_INSIGHTS and update state on success  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should call the correct service method for QUICK_INSIGHTS and update state on success TEST: should handle QUICK_INSIGHTS success stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should call the correct service method for QUICK_INSIGHTS and update state on success [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'QUICK_INSIGHTS', data: 'Quick insights text' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should call the correct service method for DEEP_DIVE  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should call the correct service method for DEEP_DIVE TEST: should call execute for DEEP_DIVE stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should call the correct service method for DEEP_DIVE [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'DEEP_DIVE' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'DEEP_DIVE', data: 'Deep dive text' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle grounded responses for WEB_SEARCH  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle grounded responses for WEB_SEARCH TEST: should handle grounded responses for WEB_SEARCH stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle grounded responses for WEB_SEARCH [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'WEB_SEARCH' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_GROUNDED { payload: { analysisType: 'WEB_SEARCH', data: { text: 'Web search text', sources: [Array] } } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle PLAN_TRIP and its specific arguments  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle PLAN_TRIP and its specific arguments TEST: should handle PLAN_TRIP stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle PLAN_TRIP and its specific arguments [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'PLAN_TRIP' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_GROUNDED { payload: { analysisType: 'PLAN_TRIP', data: { text: 'Trip plan text', sources: [Array] } } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle COMPARE_PRICES and its specific arguments  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle COMPARE_PRICES and its specific arguments TEST: should handle COMPARE_PRICES stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should handle COMPARE_PRICES and its specific arguments [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'COMPARE_PRICES' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_GROUNDED { payload: { analysisType: 'COMPARE_PRICES', data: { text: 'Price comparison text', sources: [Array] } } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set error if PLAN_TRIP is called without a store  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set error if PLAN_TRIP is called without a store TEST: should set error if PLAN_TRIP is called without a store [LOG ERROR] runAnalysis failed for type PLAN_TRIP { error: Error: Store information is not available for trip planning. at Object.runAnalysis (/app/src/hooks/useAiAnalysis.ts:127:21) at /app/src/hooks/useAiAnalysis.test.ts:187:30 at /app/node_modules/@testing-library/react/dist/act-compat.js:47:24 at process.env.NODE_ENV.exports.act (/app/node_modules/react/cjs/react.development.js:814:22) at Proxy. (/app/node_modules/@testing-library/react/dist/act-compat.js:46:25) at /app/src/hooks/useAiAnalysis.test.ts:186:13 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set error if PLAN_TRIP is called without a store [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'PLAN_TRIP' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_ERROR { payload: { error: 'Store information is not available for trip planning.' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set the error state if a service call fails  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set the error state if a service call fails TEST: should set error state on failure stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set the error state if a service call fails [LOG ERROR] runAnalysis failed for type QUICK_INSIGHTS { error: Error: API is down at /app/src/hooks/useAiAnalysis.test.ts:196:24 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should set the error state if a service call fails [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_ERROR { payload: { error: 'API is down' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should clear previous error when starting a new analysis  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should clear previous error when starting a new analysis TEST: should clear previous error when starting a new analysis stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should clear previous error when starting a new analysis [LOG ERROR] runAnalysis failed for type QUICK_INSIGHTS { error: Error: First failure at /app/src/hooks/useAiAnalysis.test.ts:211:24 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should clear previous error when starting a new analysis [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_ERROR { payload: { error: 'First failure' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > runAnalysis > should clear previous error when starting a new analysis [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'QUICK_INSIGHTS', data: 'Success' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should not call the service if there is no DEEP_DIVE result  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should not call the service if there is no DEEP_DIVE result TEST: should not run generateImage if DEEP_DIVE results are missing [LOG WARN] generateImage called but no meal plan text available. stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should call the service and update state on successful image generation  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should call the service and update state on successful image generation TEST: should generate image on success stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should call the service and update state on successful image generation [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'DEEP_DIVE' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'DEEP_DIVE', data: 'A great meal plan' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should call the service and update state on successful image generation [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'GENERATE_IMAGE' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_IMAGE { payload: { data: 'base64string' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should set an error if image generation fails  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should set an error if image generation fails TEST: should handle image generation failure stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should set an error if image generation fails [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'DEEP_DIVE' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'DEEP_DIVE', data: 'A great meal plan' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should set an error if image generation fails [LOG ERROR] generateImage failed { error: Error: Image model failed at /app/src/hooks/useAiAnalysis.test.ts:272:24 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > generateImage > should set an error if image generation fails [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'GENERATE_IMAGE' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_ERROR { payload: { error: 'Image model failed' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should preserve existing results when running a new analysis  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should preserve existing results when running a new analysis TEST: should preserve existing results stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should preserve existing results when running a new analysis [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'QUICK_INSIGHTS', data: 'Insight 1' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should preserve existing results when running a new analysis [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'DEEP_DIVE' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'DEEP_DIVE', data: 'Insight 2' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should log reducer actions  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should log reducer actions TEST: should log reducer actions stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should log reducer actions [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'QUICK_INSIGHTS', data: 'Insight' } }  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts 1/18  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/utils/zodUtils.test.ts [queued]  Test Files 8 failed | 36 passed (242)  Tests 2 failed | 1502 passed | 125 skipped (1646)  Start at 07:51:47  Duration 96.61s [?2026l[?2026hstdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should set loading state but not call service for unhandled analysis types in runAnalysis  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should set loading state but not call service for unhandled analysis types in runAnalysis TEST: unhandled analysis type stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > State Management and Logging > should set loading state but not call service for unhandled analysis types in runAnalysis [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'GENERATE_IMAGE' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should clear error when clearError is called  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should clear error when clearError is called [LOG ERROR] runAnalysis failed for type QUICK_INSIGHTS { error: Error: Some error at /app/src/hooks/useAiAnalysis.test.ts:347:24 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12) } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should clear error when clearError is called [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_ERROR { payload: { error: 'Some error' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should clear error when clearError is called [LOG INFO] [aiAnalysisReducer] Dispatched action: CLEAR_ERROR { payload: {} } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should reset state when resetAnalysis is called  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should reset state when resetAnalysis is called [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_START { payload: { analysisType: 'QUICK_INSIGHTS' } } [LOG INFO] [aiAnalysisReducer] Dispatched action: FETCH_SUCCESS_TEXT { payload: { analysisType: 'QUICK_INSIGHTS', data: 'Insight' } } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > Helper Functions > should reset state when resetAnalysis is called [LOG INFO] [aiAnalysisReducer] Dispatched action: RESET_STATE { payload: {} } stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > aiAnalysisReducer > should return current state for unknown action  --- TEST CASE START --- stdout | src/hooks/useAiAnalysis.test.ts > useAiAnalysis Hook > aiAnalysisReducer > should return current state for unknown action [LOG INFO] [aiAnalysisReducer] Dispatched action: UNKNOWN_ACTION { payload: {} } ✓ src/hooks/useAiAnalysis.test.ts (18 tests) 497ms  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts 18/18  ❯ src/pages/admin/components/AuthView.test.tsx [queued]  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/utils/zodUtils.test.ts 1/46  Test Files 8 failed | 37 passed (242)  Tests 2 failed | 1520 passed | 125 skipped (1692)  Start at 07:51:47  Duration 97.15s [?2026l[?2026h ✓ src/utils/zodUtils.test.ts (46 tests) 138ms  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts 18/18  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/utils/zodUtils.test.ts 46/46  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1565 passed | 125 skipped (1713)  Start at 07:51:47  Duration 97.88s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/hooks/useAiAnalysis.test.ts 18/18  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/utils/zodUtils.test.ts 46/46  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1565 passed | 125 skipped (1713)  Start at 07:51:47  Duration 97.99s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1565 passed | 125 skipped (1713)  Start at 07:51:47  Duration 98.96s [?2026l[?2026hstdout | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > GET / > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 1/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1566 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.00s [?2026l[?2026hstderr | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > GET / > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Connection Failed at /app/src/routes/gamification.routes.test.ts:106:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 1/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1566 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.00s [?2026l[?2026hstdout | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > GET /me > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 7/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1572 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.23s [?2026l[?2026hstderr | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > GET /me > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/gamification.routes.test.ts:166:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 7/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1572 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.23s [?2026l[?2026hstdout | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > POST /award > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 7/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1572 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.23s [?2026l[?2026hstderr | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > POST /award > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/gamification.routes.test.ts:225:73 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 7/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1572 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.23s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 11/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1576 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.50s [?2026l[?2026hstdout | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > GET /leaderboard > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 14/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1579 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.76s [?2026l[?2026hstderr | src/routes/gamification.routes.test.ts > Gamification Routes (/api/achievements) > GET /leaderboard > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/gamification.routes.test.ts:324:71 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 14/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 38 passed (242)  Tests 2 failed | 1579 passed | 125 skipped (1733)  Start at 07:51:47  Duration 100.76s [?2026l[?2026h ✓ src/routes/gamification.routes.test.ts (20 tests) 984ms  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 0/21  ❯ src/routes/gamification.routes.test.ts 20/20  ❯ src/routes/recipe.routes.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1585 passed | 125 skipped (1733)  Start at 07:51:47  Duration 101.64s [?2026l[?2026hstderr | src/pages/admin/components/AuthView.test.tsx > AuthView > Initial Render and Login > should render the Sign In form by default React does not recognize the `showStrength` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `showstrength` instead. If you accidentally passed it from a parent component, remove it from the DOM element.  ❯ src/components/FlyerCorrectionTool.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 1/21  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1586 passed | 125 skipped (1733)  Start at 07:51:47  Duration 101.74s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 0/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 1/21  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1586 passed | 125 skipped (1746)  Start at 07:51:47  Duration 101.85s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 0/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 2/21  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1587 passed | 125 skipped (1746)  Start at 07:51:47  Duration 102.46s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 0/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 3/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1588 passed | 125 skipped (1746)  Start at 07:51:47  Duration 102.59s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 0/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 4/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1589 passed | 125 skipped (1746)  Start at 07:51:47  Duration 103.77s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 3/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 6/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1594 passed | 125 skipped (1746)  Start at 07:51:47  Duration 103.92s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 3/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 7/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts [queued]  ❯ src/services/flyerDataTransformer.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1595 passed | 125 skipped (1746)  Start at 07:51:47  Duration 104.08s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 4/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 7/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 0/27  ❯ src/services/flyerDataTransformer.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1596 passed | 125 skipped (1773)  Start at 07:51:47  Duration 104.81s [?2026l[?2026hstdout | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /by-sale-percentage > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstderr | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /by-sale-percentage > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/recipe.routes.test.ts:87:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstdout | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /by-sale-ingredients > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstderr | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /by-sale-ingredients > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/recipe.routes.test.ts:122:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstdout | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /by-ingredient-and-tag > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstderr | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /by-ingredient-and-tag > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/recipe.routes.test.ts:156:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstdout | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /:recipeId/comments > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstderr | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /:recipeId/comments > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/recipe.routes.test.ts:197:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstdout | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /:recipeId > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstderr | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > GET /:recipeId > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/recipe.routes.test.ts:240:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 15/27  ❯ src/services/flyerDataTransformer.test.ts 0/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1613 passed | 125 skipped (1783)  Start at 07:51:47  Duration 104.91s [?2026l[?2026hstderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > should transform AI data into database-ready format with a user ID [DEBUG] FlyerDataTransformer.transform called with baseUrl: https://example.com [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'https://example.com' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: https://example.com [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'https://example.com/flyer-images/flyer-page-1.jpg', iconUrl: 'https://example.com/flyer-images/icons/icon-flyer-page-1.webp' }  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 17/27  ❯ src/services/flyerDataTransformer.test.ts 3/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1618 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.10s [?2026l[?2026hstdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should call rescanImageArea with correct parameters and show success  --- [TEST LOG] ---: Starting test: "should call rescanImageArea..." --- [TEST LOG] ---: 1. Setting up controllable promise for rescanImageArea. --- [TEST LOG] ---: Awaiting image fetch inside component...  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 17/27  ❯ src/services/flyerDataTransformer.test.ts 3/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1618 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.10s [?2026l[?2026hstderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > should handle missing optional data gracefully [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://another.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'another.png', iconFileName: 'icon-another.webp', baseUrl: 'http://another.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://another.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://another.host/flyer-images/another.png', iconUrl: 'http://another.host/flyer-images/icons/icon-another.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > should correctly normalize item fields with null, undefined, or empty values [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://normalize.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://normalize.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://normalize.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://normalize.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://normalize.host/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > should use fallback baseUrl from getBaseUrl if none is provided [DEBUG] FlyerDataTransformer.transform called with baseUrl: [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: '' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://fallback-url.com [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://fallback-url.com/flyer-images/flyer-page-1.jpg', iconUrl: 'http://fallback-url.com/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > _normalizeItem price parsing > should use price_in_cents from AI if it is valid, ignoring price_display [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://test.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://test.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://test.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://test.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://test.host/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > _normalizeItem price parsing > should use parsePriceToCents as a fallback if AI price_in_cents is null [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://test.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://test.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://test.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://test.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://test.host/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > _normalizeItem price parsing > should result in null if both AI price and display price are unparsable [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://test.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://test.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://test.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://test.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://test.host/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > should handle non-string values for string fields gracefully by converting them [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://robust.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://robust.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://robust.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://robust.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://robust.host/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > needsReview flag handling > should set status to "processed" when needsReview is false [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://test.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://test.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://test.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://test.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://test.host/flyer-images/icons/icon-flyer-page-1.webp' } stderr | src/services/flyerDataTransformer.test.ts > FlyerDataTransformer > needsReview flag handling > should set status to "needs_review" when needsReview is true [DEBUG] FlyerDataTransformer.transform called with baseUrl: http://test.host [DEBUG] FlyerDataTransformer._buildUrls inputs: { imageFileName: 'flyer-page-1.jpg', iconFileName: 'icon-flyer-page-1.webp', baseUrl: 'http://test.host' } [DEBUG] FlyerDataTransformer._buildUrls finalBaseUrl resolved to: http://test.host [DEBUG] FlyerDataTransformer._buildUrls constructed: { imageUrl: 'http://test.host/flyer-images/flyer-page-1.jpg', iconUrl: 'http://test.host/flyer-images/icons/icon-flyer-page-1.webp' }  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 8/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 17/27  ❯ src/services/flyerDataTransformer.test.ts 3/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 39 passed (242)  Tests 2 failed | 1618 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.10s [?2026l[?2026h ✓ src/services/flyerDataTransformer.test.ts (10 tests) 169ms stdout | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > POST /suggest > should return 500 on service error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 9/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 24/27  ❯ src/services/flyerDataTransformer.test.ts 10/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 40 passed (242)  Tests 2 failed | 1633 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.20s [?2026l[?2026hstderr | src/routes/recipe.routes.test.ts > Recipe Routes (/api/recipes) > POST /suggest > should return 500 on service error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: AI Error at /app/src/routes/recipe.routes.test.ts:310:21 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/FlyerCorrectionTool.test.tsx 5/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 9/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 24/27  ❯ src/services/flyerDataTransformer.test.ts 10/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 40 passed (242)  Tests 2 failed | 1633 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.20s [?2026l[?2026hstdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should call rescanImageArea with correct parameters and show success --- [TEST LOG] ---: Image fetch complete. --- [TEST LOG] ---: Mocking image dimensions. --- [TEST LOG] ---: Simulating user drawing a rectangle... --- [TEST LOG] ---: Rectangle drawn. --- [TEST LOG] ---: 2. Clicking "Extract Store Name" button. --- [TEST LOG] ---: 3. Awaiting "Processing..." loading state. stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should call rescanImageArea with correct parameters and show success --- [TEST LOG] ---: 3a. SUCCESS: Found "Processing..." text. --- [TEST LOG] ---: 4. Awaiting API call verification... --- [TEST LOG] ---: 4a. waitFor check: Checking rescanImageArea call... stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should call rescanImageArea with correct parameters and show success --- [TEST LOG] ---: 4b. SUCCESS: API call verified. --- [TEST LOG] ---: 5. Manually resolving the API promise inside act()... --- [TEST LOG] ---: 5a. Calling resolveRescanPromise... stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should call rescanImageArea with correct parameters and show success --- [TEST LOG] ---: 5b. Promise resolved and act() block finished. --- [TEST LOG] ---: 6. Awaiting final state assertions... --- [TEST LOG] ---: 6a. waitFor check: Verifying notifications and callbacks... stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should call rescanImageArea with correct parameters and show success --- [TEST LOG] ---: 6b. SUCCESS: Final state verified.  ❯ src/components/FlyerCorrectionTool.test.tsx 6/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 9/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 24/27  ❯ src/services/flyerDataTransformer.test.ts 10/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 40 passed (242)  Tests 2 failed | 1634 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.70s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 7/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 9/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 26/27  ❯ src/services/flyerDataTransformer.test.ts 10/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 40 passed (242)  Tests 2 failed | 1637 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.80s [?2026l[?2026h ✓ src/routes/recipe.routes.test.ts (27 tests) 1461ms ✓ should block requests after exceeding the limit when the opt-in header is sent  387ms stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should show an error if rescan is attempted before image is loaded TEST: Starting "should show an error if rescan is attempted before image is loaded" TEST: fetch called, returning pending promise to simulate loading TEST: fetch called, returning pending promise to simulate loading TEST: fetch called, returning pending promise to simulate loading TEST: Drawing selection to enable button TEST: Button is enabled, clicking now... TEST: Checking for error notification  ❯ src/components/FlyerCorrectionTool.test.tsx 8/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 9/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 27/27  ❯ src/services/flyerDataTransformer.test.ts 10/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 41 passed (242)  Tests 2 failed | 1639 passed | 125 skipped (1783)  Start at 07:51:47  Duration 105.90s [?2026l[?2026hstdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should handle non-standard API errors during rescan TEST: Starting "should handle non-standard API errors during rescan"  ❯ src/components/FlyerCorrectionTool.test.tsx 9/13  ❯ src/features/shopping/ShoppingList.test.tsx [queued]  ❯ src/pages/admin/components/AuthView.test.tsx 9/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/routes/recipe.routes.test.ts 27/27  ❯ src/services/flyerDataTransformer.test.ts 10/10  ❯ src/tests/integration/auth.integration.test.ts [queued]  Test Files 8 failed | 41 passed (242)  Tests 2 failed | 1640 passed | 125 skipped (1783)  Start at 07:51:47  Duration 106.02s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 9/13  ❯ src/features/shopping/ShoppingList.test.tsx 0/23  ❯ src/pages/admin/components/AuthView.test.tsx 10/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 41 passed (242)  Tests 2 failed | 1641 passed | 125 skipped (1806)  Start at 07:51:47  Duration 107.34s [?2026l[?2026hstdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should handle non-standard API errors during rescan TEST: Clicking button to trigger API error stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should handle API failure response (ok: false) correctly TEST: Starting "should handle API failure response (ok: false) correctly" stdout | src/components/FlyerCorrectionTool.test.tsx > FlyerCorrectionTool > should redraw the canvas when the image loads TEST: Starting "should redraw the canvas when the image loads"  ❯ src/components/FlyerCorrectionTool.test.tsx 13/13  ❯ src/features/shopping/ShoppingList.test.tsx 0/23  ❯ src/pages/admin/components/AuthView.test.tsx 12/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 41 passed (242)  Tests 2 failed | 1647 passed | 125 skipped (1806)  Start at 07:51:47  Duration 107.44s [?2026l[?2026h ✓ src/components/FlyerCorrectionTool.test.tsx (13 tests) 5540ms ✓ should render correctly when isOpen is true  1306ms ✓ should enable extraction buttons after a selection is made  676ms ✓ should stop drawing when the mouse leaves the canvas  389ms ✓ should call rescanImageArea with correct parameters and show success  652ms ✓ should show an error if rescan is attempted before image is loaded  424ms ✓ should handle non-standard API errors during rescan  523ms ✓ should handle API failure response (ok: false) correctly  435ms ✓ should call rescanImageArea with "dates" type when Extract Sale Dates is clicked  434ms  ❯ src/components/FlyerCorrectionTool.test.tsx 13/13  ❯ src/features/shopping/ShoppingList.test.tsx 0/23  ❯ src/pages/admin/components/AuthView.test.tsx 13/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 42 passed (242)  Tests 2 failed | 1648 passed | 125 skipped (1806)  Start at 07:51:47  Duration 108.11s [?2026l[?2026h  ❯ src/components/FlyerCorrectionTool.test.tsx 13/13  ❯ src/features/shopping/ShoppingList.test.tsx 0/23  ❯ src/pages/admin/components/AuthView.test.tsx 13/21  ❯ src/routes/flyer.routes.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 42 passed (242)  Tests 2 failed | 1648 passed | 125 skipped (1829)  Start at 07:51:47  Duration 108.31s [?2026l[?2026h  ❯ src/features/shopping/ShoppingList.test.tsx 1/23  ❯ src/pages/admin/components/AuthView.test.tsx 13/21  ❯ src/routes/flyer.routes.test.ts 0/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 42 passed (242)  Tests 2 failed | 1649 passed | 125 skipped (1860)  Start at 07:51:47  Duration 108.60s [?2026l[?2026h  ❯ src/features/shopping/ShoppingList.test.tsx 1/23  ❯ src/pages/admin/components/AuthView.test.tsx 13/21  ❯ src/routes/flyer.routes.test.ts 0/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 42 passed (242)  Tests 2 failed | 1649 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.05s [?2026l[?2026hstdout | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > GET / > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstderr | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > GET / > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/flyer.routes.test.ts:76:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstdout | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > GET /:id > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstderr | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > GET /:id > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/flyer.routes.test.ts:130:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstdout | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > GET /:id/items > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstderr | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > GET /:id/items > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/flyer.routes.test.ts:162:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstdout | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > POST /items/batch-fetch > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstderr | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > POST /items/batch-fetch > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/flyer.routes.test.ts:205:72 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstdout | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > POST /items/batch-count > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstderr | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > POST /items/batch-count > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/flyer.routes.test.ts:244:74 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstdout | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > POST /items/:itemId/track > should return 500 if the tracking function throws synchronously [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026hstderr | src/routes/flyer.routes.test.ts > Flyer Routes (/api/flyers) > POST /items/:itemId/track > should return 500 if the tracking function throws synchronously --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Sync error in tracking at /app/src/routes/flyer.routes.test.ts:314:25 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026h ✓ src/routes/flyer.routes.test.ts (31 tests) 1152ms  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 15/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1685 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.26s [?2026l[?2026h  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 17/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1687 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.68s [?2026l[?2026h  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 17/21  ❯ src/routes/flyer.routes.test.ts 31/31  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1687 passed | 125 skipped (1860)  Start at 07:51:47  Duration 110.98s [?2026l[?2026h  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 17/21  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1687 passed | 125 skipped (1860)  Start at 07:51:47  Duration 111.18s [?2026l[?2026h  ❯ src/features/shopping/ShoppingList.test.tsx 4/23  ❯ src/pages/admin/components/AuthView.test.tsx 17/21  ❯ src/services/barcodeService.server.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1687 passed | 125 skipped (1860)  Start at 07:51:47  Duration 111.96s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 5/23  ❯ src/pages/admin/components/AuthView.test.tsx 17/21  ❯ src/services/barcodeService.server.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1688 passed | 125 skipped (1860)  Start at 07:51:47  Duration 112.09s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 7/23  ❯ src/pages/admin/components/AuthView.test.tsx 19/21  ❯ src/services/barcodeService.server.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts [queued]  Test Files 8 failed | 43 passed (242)  Tests 2 failed | 1692 passed | 125 skipped (1860)  Start at 07:51:47  Duration 113.34s [?2026l[?2026h ✓ src/pages/admin/components/AuthView.test.tsx (21 tests) 15117ms ✓ should render the Sign In form by default  3336ms ✓ should call loginUser and onLoginSuccess on successful login  555ms ✓ should switch to the registration form  920ms ✓ should call registerUser on successful registration  403ms ✓ should allow registration without providing a full name  446ms ✓ should display an error on failed registration  482ms ✓ should display an error on non-OK registration response  588ms ✓ should switch to the reset password form  903ms ✓ should call requestPasswordReset and show success message  676ms ✓ should display an error on failed password reset request  586ms ✓ should display an error on non-OK password reset response  699ms ✓ should switch back to sign in from forgot password  1126ms ✓ should set window.location.href for Google OAuth  515ms ✓ should set window.location.href for GitHub OAuth  704ms ✓ should show loading state during login submission  1445ms ✓ should show loading state during password reset submission  329ms ✓ should show loading state during registration submission  793ms  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 9/23  ❯ src/pages/admin/components/AuthView.test.tsx 21/21  ❯ src/services/barcodeService.server.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 44 passed (242)  Tests 2 failed | 1696 passed | 125 skipped (1862)  Start at 07:51:47  Duration 113.51s [?2026l[?2026hstderr | src/features/shopping/ShoppingList.test.tsx > ShoppingListComponent (in shopping feature) > should call generateSpeechFromText when "Read aloud" is clicked [vitest] The vi.fn() mock did not use 'function' or 'class' in its implementation, see https://vitest.dev/api/vi#vi-spyon for examples.  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 10/23  ❯ src/pages/admin/components/AuthView.test.tsx 21/21  ❯ src/services/barcodeService.server.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 44 passed (242)  Tests 2 failed | 1697 passed | 125 skipped (1862)  Start at 07:51:47  Duration 114.19s [?2026l[?2026hNot implemented: Window's alert() method  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 13/23  ❯ src/services/barcodeService.server.test.ts 0/35  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 44 passed (242)  Tests 2 failed | 1700 passed | 125 skipped (1897)  Start at 07:51:47  Duration 114.47s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 13/23  ❯ src/services/barcodeService.server.test.ts 1/35  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 44 passed (242)  Tests 2 failed | 1701 passed | 125 skipped (1897)  Start at 07:51:47  Duration 115.00s [?2026l[?2026h ✓ src/services/barcodeService.server.test.ts (35 tests) 242ms  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 14/23  ❯ src/services/barcodeService.server.test.ts 35/35  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts [queued]  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1736 passed | 125 skipped (1897)  Start at 07:51:47  Duration 115.25s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 15/23  ❯ src/services/barcodeService.server.test.ts 35/35  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1737 passed | 125 skipped (1909)  Start at 07:51:47  Duration 115.83s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 16/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1738 passed | 125 skipped (1909)  Start at 07:51:47  Duration 116.18s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 16/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1738 passed | 125 skipped (1909)  Start at 07:51:47  Duration 116.28s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 17/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1739 passed | 125 skipped (1909)  Start at 07:51:47  Duration 117.11s [?2026l[?2026hNot implemented: Window's alert() method stderr | src/features/shopping/ShoppingList.test.tsx > ShoppingListComponent (in shopping feature) > Loading States and Disabled States > should show a loading spinner while reading the list aloud [vitest] The vi.fn() mock did not use 'function' or 'class' in its implementation, see https://vitest.dev/api/vi#vi-spyon for examples.  ❯ src/features/charts/PriceHistoryChart.test.tsx [queued]  ❯ src/features/shopping/ShoppingList.test.tsx 18/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1740 passed | 125 skipped (1909)  Start at 07:51:47  Duration 117.21s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx 0/13  ❯ src/features/shopping/ShoppingList.test.tsx 18/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1740 passed | 125 skipped (1922)  Start at 07:51:47  Duration 117.42s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx 1/13  ❯ src/features/shopping/ShoppingList.test.tsx 18/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1741 passed | 125 skipped (1922)  Start at 07:51:47  Duration 117.92s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx 2/13  ❯ src/features/shopping/ShoppingList.test.tsx 20/23  ❯ src/tests/integration/auth.integration.test.ts 0/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1744 passed | 125 skipped (1922)  Start at 07:51:47  Duration 118.03s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx 3/13  ❯ src/features/shopping/ShoppingList.test.tsx 20/23  ❯ src/tests/integration/auth.integration.test.ts 1/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 8 failed | 45 passed (242)  Tests 2 failed | 1745 passed | 126 skipped (1922)  Start at 07:51:47  Duration 118.23s [?2026l[?2026h ❯ src/tests/integration/auth.integration.test.ts (23 tests | 23 skipped) 10026ms ↓ should successfully log in a registered user ↓ should fail to log in with an incorrect password ↓ should fail to log in with a non-existent email ↓ should allow registration with an empty string for avatar_url and save it as null ↓ should successfully refresh an access token using a refresh token cookie ↓ should fail to refresh an access token with an invalid refresh token cookie ↓ should successfully log out and clear the refresh token cookie ↓ should block requests to /forgot-password after exceeding the limit ↓ should reject empty Bearer token ↓ should reject token without dots (invalid JWT structure) ↓ should reject token with only 2 parts (missing signature) ↓ should reject token with invalid signature ↓ should accept lowercase "bearer" scheme (case-insensitive) ↓ should reject Basic auth scheme ↓ should reject missing Authorization header ↓ should return same error for wrong password and non-existent user ↓ should return same response for forgot-password on existing and non-existing email ↓ should return validation error for missing login fields ↓ should reject reset with invalid token ↓ should reject duplicate email registration ↓ should reject invalid email format ↓ should reject weak password ↓ should return error when refresh token cookie is missing  ❯ src/features/charts/PriceHistoryChart.test.tsx 4/13  ❯ src/features/shopping/ShoppingList.test.tsx 21/23  ❯ src/services/db/budget.db.test.ts [queued]  ❯ src/tests/integration/auth.integration.test.ts 23/23  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 45 passed (242)  Tests 2 failed | 1747 passed | 148 skipped (1922)  Start at 07:51:47  Duration 118.36s [?2026l[?2026h ✓ src/features/shopping/ShoppingList.test.tsx (23 tests) 12198ms ✓ should render correctly when authenticated with an active list  2234ms ✓ should call onSelectList when changing the list in the dropdown  301ms ✓ should call onCreateList when creating a new list  1364ms ✓ should not call onCreateList if prompt is cancelled  1112ms ✓ should call onDeleteList when deleting a list after confirmation  661ms ✓ should not call onDeleteList if deletion is not confirmed  418ms ✓ should call onAddItem when adding a custom item  679ms ✓ should call onUpdateItem when toggling an item checkbox  372ms ✓ should disable the "Add" button for custom items when input is empty or whitespace  940ms ✓ should show a loading spinner while adding a custom item  974ms ✓ should show a loading spinner while creating a new list  924ms ✓ should not call onCreateList if the prompt returns an empty or whitespace string  708ms ✓ should render an item gracefully if it has no custom name or master item name  352ms ✓ src/features/charts/PriceHistoryChart.test.tsx (13 tests) 1264ms ✓ should render a placeholder when there are no watched items  333ms  ❯ src/features/charts/PriceHistoryChart.test.tsx 13/13  ❯ src/features/shopping/ShoppingList.test.tsx 23/23  ❯ src/services/db/budget.db.test.ts [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 47 passed (242)  Tests 2 failed | 1758 passed | 148 skipped (1922)  Start at 07:51:47  Duration 119.28s [?2026l[?2026h  ❯ src/features/charts/PriceHistoryChart.test.tsx 13/13  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/budget.db.test.ts [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 47 passed (242)  Tests 2 failed | 1758 passed | 148 skipped (1922)  Start at 07:51:47  Duration 119.79s [?2026l[?2026h  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/budget.db.test.ts [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 47 passed (242)  Tests 2 failed | 1758 passed | 148 skipped (1922)  Start at 07:51:47  Duration 120.55s [?2026l[?2026h  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/budget.db.test.ts [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 47 passed (242)  Tests 2 failed | 1758 passed | 148 skipped (1922)  Start at 07:51:47  Duration 121.64s [?2026l[?2026h  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/budget.db.test.ts [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 47 passed (242)  Tests 2 failed | 1758 passed | 148 skipped (1922)  Start at 07:51:47  Duration 123.09s [?2026l[?2026h  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx [queued]  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/budget.db.test.ts 0/17  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  Test Files 9 failed | 47 passed (242)  Tests 2 failed | 1758 passed | 148 skipped (1939)  Start at 07:51:47  Duration 123.19s [?2026l[?2026h ✓ src/services/db/budget.db.test.ts (17 tests) 113ms  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx [queued]  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/budget.db.test.ts 17/17  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 0/2  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 9 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 148 skipped (1939)  Start at 07:51:47  Duration 124.34s [?2026l[?2026h ❯ src/tests/integration/gamification.integration.test.ts (2 tests | 2 skipped) 10199ms ↓ should award the "First Upload" achievement after a user successfully uploads and processes their first flyer ↓ should process a legacy upload and save fully qualified URLs to the database  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx [queued]  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 2/2  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 10 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 150 skipped (1939)  Start at 07:51:47  Duration 125.15s [?2026l[?2026h  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx [queued]  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 0/12  ❯ src/tests/integration/gamification.integration.test.ts 2/2  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 10 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 150 skipped (1939)  Start at 07:51:47  Duration 125.25s [?2026l[?2026h  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx [queued]  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 1/12  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 10 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 151 skipped (1939)  Start at 07:51:47  Duration 126.26s [?2026l[?2026h ❯ src/tests/integration/data-integrity.integration.test.ts (12 tests | 12 skipped) 10026ms ↓ should cascade delete shopping lists when user is deleted ↓ should cascade delete budgets when user is deleted ↓ should cascade delete shopping list items when list is deleted ↓ should prevent admin from deleting their own account via admin route ↓ should return error when adding item with invalid shopping list ID ↓ should enforce FK constraints at database level ↓ should return CONFLICT for duplicate email registration ↓ should reject budget with invalid period via API ↓ should reject budget with negative amount via API ↓ should enforce CHECK constraints at database level ↓ should require budget name via API ↓ should rollback partial inserts on constraint violation  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx [queued]  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/tests/integration/data-integrity.integration.test.ts 12/12  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 11 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 162 skipped (1939)  Start at 07:51:47  Duration 127.43s [?2026l[?2026h  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 0/14  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 11 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 162 skipped (1953)  Start at 07:51:47  Duration 127.53s [?2026l[?2026h  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 0/14  ❯ src/hooks/useShoppingLists.test.tsx [queued]  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/notification.db.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  ❯ src/utils/pdfConverter.test.ts [queued]  Test Files 11 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 162 skipped (1953)  Start at 07:51:47  Duration 128.88s [?2026l[?2026h  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 0/14  ❯ src/hooks/useShoppingLists.test.tsx 0/21  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/notification.db.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  ❯ src/utils/pdfConverter.test.ts 0/11  Test Files 11 failed | 48 passed (242)  Tests 2 failed | 1775 passed | 162 skipped (1985)  Start at 07:51:47  Duration 129.27s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 1/14  ❯ src/hooks/useShoppingLists.test.tsx 13/21  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/notification.db.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  ❯ src/utils/pdfConverter.test.ts 0/11  Test Files 11 failed | 48 passed (242)  Tests 2 failed | 1789 passed | 162 skipped (1985)  Start at 07:51:47  Duration 129.42s [?2026l[?2026h ✓ src/hooks/useShoppingLists.test.tsx (21 tests) 406ms ✓ src/utils/pdfConverter.test.ts (11 tests) 100ms  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 3/14  ❯ src/hooks/useShoppingLists.test.tsx 21/21  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/notification.db.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  ❯ src/utils/pdfConverter.test.ts 11/11  Test Files 11 failed | 50 passed (242)  Tests 2 failed | 1810 passed | 162 skipped (1985)  Start at 07:51:47  Duration 129.87s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 6/14  ❯ src/hooks/useShoppingLists.test.tsx 21/21  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/notification.db.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  ❯ src/utils/pdfConverter.test.ts 11/11  Test Files 11 failed | 50 passed (242)  Tests 2 failed | 1813 passed | 162 skipped (1985)  Start at 07:51:47  Duration 130.17s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 8/14  ❯ src/hooks/useShoppingLists.test.tsx 21/21  ❯ src/layouts/MainLayout.test.tsx [queued]  ❯ src/services/db/notification.db.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  ❯ src/utils/pdfConverter.test.ts 11/11  Test Files 11 failed | 50 passed (242)  Tests 2 failed | 1815 passed | 162 skipped (1985)  Start at 07:51:47  Duration 130.29s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 9/14  ❯ src/layouts/MainLayout.test.tsx 0/16  ❯ src/services/db/notification.db.test.ts 0/22  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  Test Files 11 failed | 50 passed (242)  Tests 2 failed | 1816 passed | 162 skipped (2023)  Start at 07:51:47  Duration 130.81s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 10/14  ❯ src/layouts/MainLayout.test.tsx 1/16  ❯ src/services/db/notification.db.test.ts 0/22  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  Test Files 11 failed | 50 passed (242)  Tests 2 failed | 1818 passed | 162 skipped (2023)  Start at 07:51:47  Duration 131.23s [?2026l[?2026h ✓ src/layouts/MainLayout.test.tsx (16 tests) 508ms ✓ src/services/db/notification.db.test.ts (22 tests) 88ms  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 14/14  ❯ src/layouts/MainLayout.test.tsx 16/16  ❯ src/services/db/notification.db.test.ts 22/22  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts [queued]  Test Files 11 failed | 52 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2023)  Start at 07:51:47  Duration 131.49s [?2026l[?2026h ✓ src/features/voice-assistant/VoiceAssistant.test.tsx (14 tests) 3449ms ✓ should render correctly when isOpen is true  1088ms ✓ should call handleClose when mic is clicked while listening  342ms  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/features/voice-assistant/VoiceAssistant.test.tsx 14/14  ❯ src/layouts/MainLayout.test.tsx 16/16  ❯ src/services/db/notification.db.test.ts 22/22  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2036)  Start at 07:51:47  Duration 132.15s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2036)  Start at 07:51:47  Duration 132.48s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2036)  Start at 07:51:47  Duration 133.78s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2036)  Start at 07:51:47  Duration 134.49s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts [queued]  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2036)  Start at 07:51:47  Duration 134.66s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 2 failed | 1859 passed | 162 skipped (2054)  Start at 07:51:47  Duration 136.33s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts 1/1  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 11 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2055)  Start at 07:51:47  Duration 136.80s [?2026l[?2026h ❯ src/tests/e2e/receipt-journey.e2e.test.ts (1 test | 1 failed) 357ms  × should complete receipt journey: Register -> Upload -> View -> Manage Items -> Add to Inventory 342ms  ❯ src/features/flyer/AnalysisPanel.test.tsx [queued]  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts 1/1  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2055)  Start at 07:51:47  Duration 137.40s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx DEBUG: Setting up AiAnalysisService mock  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/receipt-journey.e2e.test.ts 1/1  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2068)  Start at 07:51:47  Duration 137.77s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should render tabs and an initial "Generate" button DEBUG: beforeEach setup start DEBUG: beforeEach setup complete  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2068)  Start at 07:51:47  Duration 137.88s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2068)  Start at 07:51:47  Duration 138.43s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2068)  Start at 07:51:47  Duration 139.35s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx [queued]  ❯ src/middleware/errorHandler.test.ts [queued]  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1859 passed | 162 skipped (2068)  Start at 07:51:47  Duration 140.43s [?2026l[?2026hstdout | src/middleware/errorHandler.test.ts > errorHandler Middleware > should return a generic 500 error for a standard Error object [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex" stdout | src/middleware/errorHandler.test.ts > errorHandler Middleware > should return a generic 500 error for a standard Error object [DEBUG] errorHandler.test.ts: Received 500 error response with ID: mocked_random_id  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 0/12  ❯ src/middleware/errorHandler.test.ts 1/12  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1860 passed | 162 skipped (2092)  Start at 07:51:47  Duration 140.84s [?2026l[?2026h  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 1/12  ❯ src/middleware/errorHandler.test.ts 2/12  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1862 passed | 162 skipped (2092)  Start at 07:51:47  Duration 140.94s [?2026l[?2026hstdout | src/middleware/errorHandler.test.ts > errorHandler Middleware > should handle a DatabaseError with a 500 status and a generic message [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex" stdout | src/middleware/errorHandler.test.ts > errorHandler Middleware > when NODE_ENV is "production" > should return a generic message with an error ID for a 500 error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 3/12  ❯ src/middleware/errorHandler.test.ts 9/12  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 53 passed (242)  Tests 3 failed | 1871 passed | 162 skipped (2092)  Start at 07:51:47  Duration 141.15s [?2026l[?2026h ✓ src/middleware/errorHandler.test.ts (12 tests) 618ms stdout | src/hooks/useAuth.test.tsx > useAuth Hook and AuthProvider > login function > sets token, fetches profile, and updates state on successful login [TEST-DEBUG] Waiting for initial auth check to complete... stdout | src/hooks/useAuth.test.tsx > useAuth Hook and AuthProvider > login function > sets token, fetches profile, and updates state on successful login [TEST-DEBUG] Initial auth check complete. Current status: SIGNED_OUT [TEST-DEBUG] Calling login function... stdout | src/hooks/useAuth.test.tsx > useAuth Hook and AuthProvider > login function > sets token, fetches profile, and updates state on successful login [TEST-DEBUG] Login function promise resolved.  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 5/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts [queued]  ❯ src/tests/e2e/auth.e2e.test.ts 0/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 54 passed (242)  Tests 3 failed | 1876 passed | 162 skipped (2104)  Start at 07:51:47  Duration 141.25s [?2026l[?2026hstdout | src/hooks/useAuth.test.tsx > useAuth Hook and AuthProvider > login function > sets token, fetches profile, and updates state on successful login [TEST-DEBUG] State immediately after login `act` call: { userProfile: { role: 'user', points: 100, full_name: 'Test User', avatar_url: null, preferences: {}, address_id: null, created_by: null, address: null, created_at: '2026-01-19T07:54:07.918Z', updated_at: '2026-01-19T07:54:07.918Z', user: { user_id: 'user-abc-123', email: 'test@example.com', created_at: '2026-01-19T07:54:07.918Z', updated_at: '2026-01-19T07:54:07.918Z' } }, authStatus: 'AUTHENTICATED', isLoading: false, login: [AsyncFunction (anonymous)], logout: [Function (anonymous)], updateProfile: [Function (anonymous)] } [TEST-DEBUG] Checking authStatus in waitFor... Current status: AUTHENTICATED stdout | src/hooks/useAuth.test.tsx > useAuth Hook and AuthProvider > login function > sets token, fetches profile, and updates state on successful login [TEST-DEBUG] Final state after successful login: { userProfile: { role: 'user', points: 100, full_name: 'Test User', avatar_url: null, preferences: {}, address_id: null, created_by: null, address: null, created_at: '2026-01-19T07:54:07.918Z', updated_at: '2026-01-19T07:54:07.918Z', user: { user_id: 'user-abc-123', email: 'test@example.com', created_at: '2026-01-19T07:54:07.918Z', updated_at: '2026-01-19T07:54:07.918Z' } }, authStatus: 'AUTHENTICATED', isLoading: false, login: [AsyncFunction (anonymous)], logout: [Function (anonymous)], updateProfile: [Function (anonymous)] }  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 7/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 0/18  ❯ src/tests/e2e/auth.e2e.test.ts 0/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 12 failed | 54 passed (242)  Tests 3 failed | 1878 passed | 162 skipped (2122)  Start at 07:51:47  Duration 141.35s [?2026l[?2026hstderr | src/tests/e2e/auth.e2e.test.ts > Authentication E2E Flow [FATAL] Setup failed. DB might be down. TypeError: Failed to parse URL from /api/auth/register  at node:internal/deps/undici/undici:14900:13  at processTicksAndRejections (node:internal/process/task_queues:95:5) at createAndLoginUser (/app/src/tests/utils/testHelpers.ts:76:5) at /app/src/tests/e2e/auth.e2e.test.ts:21:31 { [cause]: TypeError: Invalid URL  at new URL (node:internal/url:806:29)  at new Request (node:internal/deps/undici/undici:9776:25)  at fetch (node:internal/deps/undici/undici:10505:25)  at fetch (node:internal/deps/undici/undici:14898:10)  at fetch (node:internal/bootstrap/web/exposed-window-or-worker:72:12) at publicPost (/app/src/services/apiClient.ts:186:10) at Module.registerUser (/app/src/services/apiClient.ts:829:10) at createAndLoginUser (/app/src/tests/utils/testHelpers.ts:76:21) at /app/src/tests/e2e/auth.e2e.test.ts:21:37 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 { code: 'ERR_INVALID_URL', input: '/api/auth/register' } }  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 9/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 1/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 54 passed (242)  Tests 3 failed | 1881 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.45s [?2026l[?2026h ❯ src/tests/e2e/auth.e2e.test.ts (12 tests | 12 skipped) 227ms ↓ should successfully register a new user ↓ should fail to register a user with a weak password ↓ should fail to register a user with a duplicate email ↓ should successfully log in a registered user ↓ should fail to log in with an incorrect password ↓ should fail to log in with a non-existent email ↓ should be able to access a protected route after logging in ↓ should allow an authenticated user to update their profile ↓ should allow a user to reset their password and log in with the new one ↓ should return a generic success message for a non-existent email to prevent enumeration ↓ should allow an authenticated user to refresh their access token and use it ↓ should fail to refresh with an invalid or missing token  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 9/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 1/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 54 passed (242)  Tests 3 failed | 1881 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.45s [?2026l[?2026hstdout | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/daily-deal-check > should return 500 if triggering the job fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 2/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1885 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.69s [?2026l[?2026hstderr | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/daily-deal-check > should return 500 if triggering the job fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Job runner failed at Object. (/app/src/routes/admin.jobs.routes.test.ts:129:15) at Object.Mock [as runDailyDealCheck] (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at /app/src/routes/admin.routes.ts:977:28 at Layer.handleRequest (/app/node_modules/router/lib/layer.js:152:17) at next (/app/node_modules/router/lib/route.js:157:13) at /app/src/middleware/validation.middleware.ts:43:14  at processTicksAndRejections (node:internal/process/task_queues:95:5)  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 2/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1885 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.69s [?2026l[?2026h ✓ src/hooks/useAuth.test.tsx (12 tests) 1035ms stdout | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/failing-job > should return 500 if enqueuing the job fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 2/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1885 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.69s [?2026l[?2026hstderr | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/failing-job > should return 500 if enqueuing the job fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Queue is down at /app/src/routes/admin.jobs.routes.test.ts:150:55 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 2/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1885 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.69s [?2026l[?2026hstdout | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/analytics-report > should return 500 if enqueuing the analytics job fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 2/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1885 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.69s [?2026l[?2026hstderr | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/analytics-report > should return 500 if enqueuing the analytics job fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Queue error at /app/src/routes/admin.jobs.routes.test.ts:174:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 2/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1885 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.69s [?2026l[?2026hstdout | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/weekly-analytics > should return 500 if enqueuing the weekly analytics job fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 10/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1893 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.79s [?2026l[?2026hstderr | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /trigger/weekly-analytics > should return 500 if enqueuing the weekly analytics job fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Queue error at /app/src/routes/admin.jobs.routes.test.ts:196:9 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 10/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1893 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.79s [?2026l[?2026hstdout | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /flyers/:flyerId/cleanup > should return 500 if enqueuing the cleanup job fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 10/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1893 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.79s [?2026l[?2026hstderr | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /flyers/:flyerId/cleanup > should return 500 if enqueuing the cleanup job fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Queue is down at /app/src/routes/admin.jobs.routes.test.ts:218:53 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 10/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1893 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.79s [?2026l[?2026hstdout | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /jobs/:queueName/:jobId/retry > should return 500 if job.retry() throws an error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 13/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1896 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.89s [?2026l[?2026hstderr | src/routes/admin.jobs.routes.test.ts > Admin Job Trigger Routes (/api/admin/trigger) > POST /jobs/:queueName/:jobId/retry > should return 500 if job.retry() throws an error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Cannot retry job at /app/src/routes/admin.jobs.routes.test.ts:305:69 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/middleware/errorHandler.test.ts 12/12  ❯ src/routes/admin.jobs.routes.test.ts 13/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 0/13  Test Files 13 failed | 55 passed (242)  Tests 3 failed | 1896 passed | 174 skipped (2122)  Start at 07:51:47  Duration 141.89s [?2026l[?2026h ✓ src/routes/admin.jobs.routes.test.ts (18 tests) 591ms  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/hooks/useAuth.test.tsx 12/12  ❯ src/routes/admin.jobs.routes.test.ts 18/18  ❯ src/tests/e2e/auth.e2e.test.ts 12/12  ❯ src/tests/integration/budget.integration.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 1/13  Test Files 13 failed | 56 passed (242)  Tests 3 failed | 1901 passed | 175 skipped (2122)  Start at 07:51:47  Duration 142.23s [?2026l[?2026h ❯ src/tests/integration/recipe.integration.test.ts (13 tests | 13 skipped) 10049ms ↓ should fetch a single public recipe by its ID ↓ should return 404 for a non-existent recipe ID ↓ should allow an authenticated user to create a new recipe ↓ should allow an authenticated user to update their own recipe ↓ should prevent a user from updating another user's recipe ↓ should allow an authenticated user to delete their own recipe ↓ should prevent a user from deleting another user's recipe ↓ should allow an authenticated user to post a comment on a recipe ↓ should allow an authenticated user to fork a recipe ↓ should allow forking seed recipes (null user_id) ↓ should return comments for a recipe ↓ should return empty array for recipe with no comments ↓ should return a recipe suggestion based on ingredients stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should render tabs and an initial "Generate" button DEBUG: Starting render for initial state test DEBUG: AiAnalysisService constructor mocked call DEBUG: Render finished in 404ms DEBUG: Asserting tab existence DEBUG: Initial state test complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should render tabs and an initial "Generate" button DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should switch tabs and update the generate button text DEBUG: beforeEach setup start DEBUG: beforeEach setup complete  ❯ src/features/flyer/AnalysisPanel.test.tsx 0/13  ❯ src/tests/integration/budget.integration.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  ❯ src/tests/integration/recipe.integration.test.ts 13/13  Test Files 14 failed | 56 passed (242)  Tests 3 failed | 1901 passed | 187 skipped (2122)  Start at 07:51:47  Duration 143.70s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should switch tabs and update the generate button text DEBUG: AiAnalysisService constructor mocked call  ❯ src/features/flyer/AnalysisPanel.test.tsx 1/13  ❯ src/tests/integration/budget.integration.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  Test Files 14 failed | 56 passed (242)  Tests 3 failed | 1902 passed | 187 skipped (2122)  Start at 07:51:47  Duration 144.15s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should switch tabs and update the generate button text DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should call getQuickInsights and display the result DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should call getQuickInsights and display the result DEBUG: AiAnalysisService constructor mocked call  ❯ src/features/flyer/AnalysisPanel.test.tsx 2/13  ❯ src/tests/integration/budget.integration.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  Test Files 14 failed | 56 passed (242)  Tests 3 failed | 1903 passed | 187 skipped (2122)  Start at 07:51:47  Duration 144.37s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should call getQuickInsights and display the result DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display results with sources, and handle sources without a URI DEBUG: beforeEach setup start DEBUG: beforeEach setup complete  ❯ src/features/flyer/AnalysisPanel.test.tsx 2/13  ❯ src/tests/integration/budget.integration.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  Test Files 14 failed | 56 passed (242)  Tests 3 failed | 1903 passed | 187 skipped (2122)  Start at 07:51:47  Duration 144.67s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display results with sources, and handle sources without a URI DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display results with sources, and handle sources without a URI DEBUG: afterEach - cleaning up  ❯ src/features/flyer/AnalysisPanel.test.tsx 3/13  ❯ src/tests/integration/budget.integration.test.ts [queued]  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  Test Files 14 failed | 56 passed (242)  Tests 3 failed | 1904 passed | 187 skipped (2122)  Start at 07:51:47  Duration 145.08s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner when fetching initial items DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner when fetching initial items DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner when fetching initial items DEBUG: afterEach - cleaning up  ❯ src/features/flyer/AnalysisPanel.test.tsx 4/13  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/tests/integration/edge-cases.integration.test.ts 0/18  Test Files 14 failed | 56 passed (242)  Tests 3 failed | 1905 passed | 187 skipped (2142)  Start at 07:51:47  Duration 145.18s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show an error if fetching items fails DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show an error if fetching items fails DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show an error if fetching items fails DEBUG: afterEach - cleaning up ❯ src/tests/integration/edge-cases.integration.test.ts (18 tests | 18 skipped) 10023ms ↓ should reject missing checksum ↓ should reject invalid checksum format (non-hex) ↓ should reject short checksum (not 64 characters) ↓ should require flyerFile field ↓ should accept unicode characters and emojis ↓ should store XSS payloads as-is (frontend must escape) ↓ should reject null bytes in JSON ↓ should return 404 (not 403) for accessing another user's shopping list ↓ should return 404 when trying to update another user's shopping list ↓ should return 404 when trying to delete another user's shopping list ↓ should safely handle SQL injection in query params ↓ should safely handle SQL injection in search params ↓ should return 404 for non-existent resources with clear message ↓ should return validation error for malformed JSON body ↓ should return validation error for missing required fields ↓ should return validation error for invalid data types ↓ should handle concurrent writes without data loss ↓ should handle concurrent reads without errors stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner during analysis DEBUG: beforeEach setup start DEBUG: beforeEach setup complete  ❯ src/features/flyer/AnalysisPanel.test.tsx 4/13  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 56 passed (242)  Tests 3 failed | 1905 passed | 205 skipped (2142)  Start at 07:51:47  Duration 145.38s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner during analysis DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner during analysis DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display an error message if analysis fails DEBUG: beforeEach setup start DEBUG: beforeEach setup complete  ❯ src/features/flyer/AnalysisPanel.test.tsx 6/13  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 56 passed (242)  Tests 3 failed | 1907 passed | 205 skipped (2142)  Start at 07:51:47  Duration 146.10s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display an error message if analysis fails DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display an error message if analysis fails DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should handle the image generation flow DEBUG: beforeEach setup start DEBUG: beforeEach setup complete  ❯ src/config/env.test.ts [queued]  ❯ src/features/flyer/AnalysisPanel.test.tsx 7/13  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 56 passed (242)  Tests 3 failed | 1908 passed | 205 skipped (2142)  Start at 07:51:47  Duration 146.20s [?2026l[?2026h  ❯ src/config/env.test.ts [queued]  ❯ src/features/flyer/AnalysisPanel.test.tsx 7/13  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/utils/apiResponse.test.ts [queued]  Test Files 15 failed | 56 passed (242)  Tests 3 failed | 1908 passed | 205 skipped (2142)  Start at 07:51:47  Duration 147.50s [?2026l[?2026hstdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should handle the image generation flow DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should handle the image generation flow DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should not show sources for non-search analysis types DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should not show sources for non-search analysis types DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should not show sources for non-search analysis types DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display sources for Plan Trip analysis type DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display sources for Plan Trip analysis type DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display sources for Plan Trip analysis type DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display sources for Compare Prices analysis type DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display sources for Compare Prices analysis type DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should display sources for Compare Prices analysis type DEBUG: afterEach - cleaning up stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner when loading watched items DEBUG: beforeEach setup start DEBUG: beforeEach setup complete stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner when loading watched items DEBUG: AiAnalysisService constructor mocked call stdout | src/features/flyer/AnalysisPanel.test.tsx > AnalysisPanel > should show a loading spinner when loading watched items DEBUG: afterEach - cleaning up  ❯ src/config/env.test.ts [queued]  ❯ src/features/flyer/AnalysisPanel.test.tsx 12/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/utils/apiResponse.test.ts [queued]  Test Files 15 failed | 56 passed (242)  Tests 3 failed | 1913 passed | 205 skipped (2142)  Start at 07:51:47  Duration 148.29s [?2026l[?2026h ✓ src/features/flyer/AnalysisPanel.test.tsx (13 tests) 9917ms ✓ should render tabs and an initial "Generate" button  4844ms ✓ should switch tabs and update the generate button text  1548ms ✓ should display results with sources, and handle sources without a URI  645ms ✓ should handle the image generation flow  915ms ✓ should display sources for Plan Trip analysis type  541ms ✓ should display sources for Compare Prices analysis type  514ms  ❯ src/config/env.test.ts [queued]  ❯ src/features/flyer/AnalysisPanel.test.tsx 13/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/utils/apiResponse.test.ts [queued]  Test Files 15 failed | 57 passed (242)  Tests 3 failed | 1914 passed | 205 skipped (2142)  Start at 07:51:47  Duration 148.48s [?2026l[?2026h  ❯ src/config/env.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/errors.db.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/utils/apiResponse.test.ts [queued]  Test Files 15 failed | 57 passed (242)  Tests 3 failed | 1914 passed | 205 skipped (2142)  Start at 07:51:47  Duration 150.01s [?2026l[?2026h  ❯ src/config/env.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/errors.db.test.ts 0/31  ❯ src/services/queueService.server.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/utils/apiResponse.test.ts 1/33  Test Files 15 failed | 57 passed (242)  Tests 3 failed | 1915 passed | 205 skipped (2206)  Start at 07:51:47  Duration 150.13s [?2026l[?2026h ✓ src/services/db/errors.db.test.ts (31 tests) 134ms  ❯ src/config/env.test.ts 0/36  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts [queued]  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  ❯ src/utils/apiResponse.test.ts 10/33  Test Files 15 failed | 58 passed (242)  Tests 3 failed | 1955 passed | 205 skipped (2242)  Start at 07:51:47  Duration 150.27s [?2026l[?2026h ✓ src/utils/apiResponse.test.ts (33 tests) 231ms  ❯ src/config/env.test.ts 0/36  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts [queued]  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 59 passed (242)  Tests 3 failed | 1978 passed | 205 skipped (2242)  Start at 07:51:47  Duration 152.07s [?2026l[?2026h  ❯ src/config/env.test.ts 16/36  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts [queued]  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/e2e/deals-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 59 passed (242)  Tests 3 failed | 1994 passed | 205 skipped (2242)  Start at 07:51:47  Duration 152.23s [?2026l[?2026h  ❯ src/config/env.test.ts 26/36  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts [queued]  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/e2e/deals-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 59 passed (242)  Tests 3 failed | 2004 passed | 205 skipped (2242)  Start at 07:51:47  Duration 152.82s [?2026l[?2026h ✓ src/config/env.test.ts (36 tests) 2422ms ✓ should parse valid configuration with all required fields  1194ms  ❯ src/config/env.test.ts 36/36  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts [queued]  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/e2e/deals-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 60 passed (242)  Tests 3 failed | 2014 passed | 205 skipped (2242)  Start at 07:51:47  Duration 153.08s [?2026l[?2026h  ❯ src/config/env.test.ts 36/36  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/e2e/deals-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 60 passed (242)  Tests 3 failed | 2014 passed | 205 skipped (2251)  Start at 07:51:47  Duration 153.50s [?2026l[?2026h  ❯ src/pages/VoiceLabPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/e2e/deals-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 60 passed (242)  Tests 3 failed | 2014 passed | 205 skipped (2251)  Start at 07:51:47  Duration 153.75s [?2026l[?2026h  ❯ src/pages/VoiceLabPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/e2e/budget-journey.e2e.test.ts [queued]  ❯ src/tests/e2e/deals-journey.e2e.test.ts [queued]  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 60 passed (242)  Tests 3 failed | 2014 passed | 205 skipped (2251)  Start at 07:51:47  Duration 154.27s [?2026l[?2026h  ❯ src/pages/VoiceLabPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/e2e/budget-journey.e2e.test.ts 1/1  ❯ src/tests/e2e/deals-journey.e2e.test.ts 0/1  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 15 failed | 60 passed (242)  Tests 4 failed | 2014 passed | 205 skipped (2253)  Start at 07:51:47  Duration 154.70s [?2026l[?2026h ❯ src/tests/e2e/budget-journey.e2e.test.ts (1 test | 1 failed) 158ms  × should complete budget journey: Register -> Create Budget -> Track Spending -> Update -> Delete 152ms ❯ src/tests/e2e/deals-journey.e2e.test.ts (1 test | 1 failed) 164ms  × should complete deals journey: Register -> Watch Items -> View Prices -> Check Deals 155ms  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/e2e/deals-journey.e2e.test.ts 1/1  ❯ src/tests/integration/budget.integration.test.ts 0/20  Test Files 17 failed | 60 passed (242)  Tests 5 failed | 2014 passed | 205 skipped (2253)  Start at 07:51:47  Duration 155.09s [?2026l[?2026h ❯ src/tests/integration/budget.integration.test.ts (20 tests | 20 skipped) 10010ms ↓ should fetch budgets for the authenticated user ↓ should return 401 if user is not authenticated ↓ should allow an authenticated user to create a new budget ↓ should return 400 for invalid budget data ↓ should return 401 if user is not authenticated ↓ should reject period="yearly" (only weekly/monthly allowed) ↓ should reject negative amount_cents ↓ should reject invalid date format ↓ should require name field ↓ should allow an authenticated user to update their own budget ↓ should return 404 when updating a non-existent budget ↓ should return 400 when no update fields are provided ↓ should return 401 if user is not authenticated ↓ should allow an authenticated user to delete their own budget ↓ should return 404 when deleting a non-existent budget ↓ should return 401 if user is not authenticated ↓ should return spending analysis for the authenticated user ↓ should return 400 for invalid date format ↓ should return 400 when required query params are missing ↓ should return 401 if user is not authenticated  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/e2e/deals-journey.e2e.test.ts 1/1  ❯ src/tests/integration/budget.integration.test.ts 20/20  Test Files 18 failed | 60 passed (242)  Tests 5 failed | 2014 passed | 225 skipped (2263)  Start at 07:51:47  Duration 155.33s [?2026l[?2026hstdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > should render the initial state correctly [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/integration/budget.integration.test.ts 20/20  Test Files 18 failed | 60 passed (242)  Tests 5 failed | 2014 passed | 225 skipped (2263)  Start at 07:51:47  Duration 156.20s [?2026l[?2026hstderr | src/routes/store.routes.test.ts [vitest] The vi.fn() mock did not use 'function' or 'class' in its implementation, see https://vitest.dev/api/vi#vi-spyon for examples.  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 0/9  ❯ src/tests/integration/budget.integration.test.ts 20/20  Test Files 18 failed | 60 passed (242)  Tests 5 failed | 2014 passed | 225 skipped (2263)  Start at 07:51:47  Duration 156.20s [?2026l[?2026h  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 1/9  Test Files 18 failed | 60 passed (242)  Tests 5 failed | 2015 passed | 225 skipped (2263)  Start at 07:51:47  Duration 156.73s [?2026l[?2026hstdout | src/services/queueService.server.test.ts > Worker Service Lifecycle > gracefulShutdown > should close all workers, queues, the redis connection, and exit the process [DEBUG] queueService.server.test.ts: Restoring process.exit spy stdout | src/services/queueService.server.test.ts > Worker Service Lifecycle > gracefulShutdown > should log an error if a worker fails to close [DEBUG] queueService.server.test.ts: Restoring process.exit spy stdout | src/services/queueService.server.test.ts > Worker Service Lifecycle > gracefulShutdown > should log an error if Redis connection fails to close [DEBUG] queueService.server.test.ts: Restoring process.exit spy stdout | src/services/queueService.server.test.ts > Worker Service Lifecycle > gracefulShutdown > should timeout if shutdown takes too long [DEBUG] queueService.server.test.ts: Restoring process.exit spy  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.server.test.ts 4/9  Test Files 18 failed | 60 passed (242)  Tests 5 failed | 2018 passed | 225 skipped (2263)  Start at 07:51:47  Duration 156.99s [?2026l[?2026h ✓ src/services/queueService.server.test.ts (9 tests) 3405ms ✓ should log a success message when Redis connects  3094ms  ❯ src/features/shopping/WatchedItemsList.test.tsx [queued]  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2023 passed | 225 skipped (2263)  Start at 07:51:47  Duration 157.12s [?2026l[?2026h  ❯ src/features/shopping/WatchedItemsList.test.tsx 0/16  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2023 passed | 225 skipped (2279)  Start at 07:51:47  Duration 157.99s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 0/16  ❯ src/pages/VoiceLabPage.test.tsx 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2023 passed | 225 skipped (2279)  Start at 07:51:47  Duration 158.19s [?2026l[?2026hstdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > should render the initial state correctly [TEST DEBUG] Test: render initial state [TEST DEBUG] Test: render initial state passed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > should render the initial state correctly [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] Test: generateSpeechFromText success flow [TEST DEBUG] Clicking generate button [TEST DEBUG] Waiting for generateSpeechFromText call [TEST DEBUG] Mock response.json() called stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] Audio constructor called with URL: data:audio/mpeg;base64,mock-audio-data [TEST DEBUG] mockAudioPlay executed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] Waiting for Audio constructor call stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] Waiting for mockAudioPlay call  ❯ src/components/ErrorBoundary.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 0/16  ❯ src/pages/VoiceLabPage.test.tsx 1/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts [queued]  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2024 passed | 225 skipped (2279)  Start at 07:51:47  Duration 159.01s [?2026l[?2026hstdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] Waiting for UI update (button enabled, replay visible) stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] Test: generateSpeechFromText success flow passed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should call generateSpeechFromText and play audio on success [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if text is empty [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if text is empty [TEST DEBUG] Test: empty text validation [TEST DEBUG] Clicking generate button with empty text stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if text is empty [TEST DEBUG] Test: empty text validation passed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if text is empty [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if API call fails [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if API call fails [TEST DEBUG] Test: API failure [TEST DEBUG] Clicking generate button (expecting failure) stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error notification if API call fails [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error if API returns no audio data [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error if API returns no audio data [TEST DEBUG] Test: No audio data returned stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error if API returns no audio data [TEST DEBUG] Test: No audio data returned passed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should show an error if API returns no audio data [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should handle non-Error objects in catch block [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should handle non-Error objects in catch block [TEST DEBUG] Test: Non-error object rejection stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should handle non-Error objects in catch block [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] Test: Replay functionality [TEST DEBUG] Clicking generate button for replay test [TEST DEBUG] Waiting for replay button to appear stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] Audio constructor called with URL: data:audio/mpeg;base64,mock-audio-data [TEST DEBUG] mockAudioPlay executed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] Replay button found [TEST DEBUG] Verifying initial play count: 1 stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] Clicking replay button [TEST DEBUG] mockAudioPlay executed [TEST DEBUG] Verifying play count reaches 2. Current calls: 2 stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] Test: Replay functionality passed stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Text-to-Speech Generation > should allow replaying the generated audio [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should call startVoiceSession and show an error notification [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should call startVoiceSession and show an error notification [TEST DEBUG] Test: Real-time voice session error [TEST DEBUG] mocked startVoiceSession called stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should call startVoiceSession and show an error notification [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should handle unknown errors in startVoiceSession [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock  ❯ src/components/ErrorBoundary.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 0/16  ❯ src/pages/VoiceLabPage.test.tsx 2/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts [queued]  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2025 passed | 225 skipped (2279)  Start at 07:51:47  Duration 159.48s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 2/16  ❯ src/pages/VoiceLabPage.test.tsx 8/10  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts [queued]  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2033 passed | 225 skipped (2279)  Start at 07:51:47  Duration 160.74s [?2026l[?2026hstdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should handle unknown errors in startVoiceSession [TEST DEBUG] afterEach: unstubbing globals stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should handle successful startVoiceSession and log messages [TEST DEBUG] beforeEach: Cleaning mocks and setting up Audio mock stdout | src/pages/VoiceLabPage.test.tsx > VoiceLabPage > Real-time Voice Session > should handle successful startVoiceSession and log messages [TEST DEBUG] afterEach: unstubbing globals  ❯ src/components/ErrorBoundary.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 2/16  ❯ src/pages/VoiceLabPage.test.tsx 9/10  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts [queued]  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 61 passed (242)  Tests 5 failed | 2034 passed | 225 skipped (2279)  Start at 07:51:47  Duration 161.41s [?2026l[?2026h ✓ src/pages/VoiceLabPage.test.tsx (10 tests) 4987ms ✓ should render the initial state correctly  2300ms ✓ should call generateSpeechFromText and play audio on success  741ms ✓ should show an error notification if text is empty  387ms  ❯ src/components/ErrorBoundary.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 3/16  ❯ src/pages/VoiceLabPage.test.tsx 10/10  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts [queued]  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 62 passed (242)  Tests 5 failed | 2036 passed | 225 skipped (2279)  Start at 07:51:47  Duration 161.51s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 0/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 3/16  ❯ src/pages/VoiceLabPage.test.tsx 10/10  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts [queued]  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 62 passed (242)  Tests 5 failed | 2036 passed | 225 skipped (2301)  Start at 07:51:47  Duration 161.94s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 0/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 4/16  ❯ src/pages/VoiceLabPage.test.tsx 10/10  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts 0/29  ❯ src/services/workers.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 62 passed (242)  Tests 5 failed | 2037 passed | 225 skipped (2330)  Start at 07:51:47  Duration 162.19s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 3/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 4/16  ❯ src/pages/VoiceLabPage.test.tsx 10/10  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts 1/29  ❯ src/services/workers.server.test.ts 0/15  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 62 passed (242)  Tests 5 failed | 2041 passed | 225 skipped (2345)  Start at 07:51:47  Duration 162.43s [?2026l[?2026h ✓ src/services/cacheService.server.test.ts (29 tests) 84ms  ❯ src/components/ErrorBoundary.test.tsx 6/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 5/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts 29/29  ❯ src/services/workers.server.test.ts 0/15  ❯ src/tests/integration/public.routes.integration.test.ts [queued]  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2073 passed | 225 skipped (2345)  Start at 07:51:47  Duration 162.81s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 7/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 5/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts 29/29  ❯ src/services/workers.server.test.ts 0/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2074 passed | 225 skipped (2362)  Start at 07:51:47  Duration 163.06s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 12/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 6/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/cacheService.server.test.ts 29/29  ❯ src/services/workers.server.test.ts 0/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2080 passed | 225 skipped (2362)  Start at 07:51:47  Duration 163.27s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 13/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 7/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 0/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2082 passed | 225 skipped (2362)  Start at 07:51:47  Duration 163.37s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 14/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 8/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 0/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2084 passed | 225 skipped (2362)  Start at 07:51:47  Duration 163.57s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 16/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 8/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 1/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2087 passed | 225 skipped (2362)  Start at 07:51:47  Duration 163.67s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 18/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 8/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 3/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 63 passed (242)  Tests 5 failed | 2091 passed | 225 skipped (2362)  Start at 07:51:47  Duration 164.04s [?2026l[?2026h ✓ src/components/ErrorBoundary.test.tsx (22 tests) 2078ms ✓ should render reload button in default fallback  667ms ✓ should show report feedback button when Sentry is configured and eventId exists  338ms  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 8/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 7/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2099 passed | 225 skipped (2362)  Start at 07:51:47  Duration 164.14s [?2026l[?2026h  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 8/16  ❯ src/routes/budget.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 8/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2100 passed | 225 skipped (2362)  Start at 07:51:47  Duration 164.25s [?2026l[?2026hstdout | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > GET / > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/routes/budget.routes.test.ts 0/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 10/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2104 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.35s [?2026l[?2026hstderr | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > GET / > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/budget.routes.test.ts:95:68 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/routes/budget.routes.test.ts 0/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 10/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2104 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.35s [?2026l[?2026hstdout | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > POST / > should return 500 if a generic database error occurs [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/routes/budget.routes.test.ts 3/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 12/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2109 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.45s [?2026l[?2026hstderr | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > POST / > should return 500 if a generic database error occurs --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/budget.routes.test.ts:146:63 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/routes/budget.routes.test.ts 3/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 12/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2109 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.45s [?2026l[?2026hstdout | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > PUT /:id > should return 500 if a generic database error occurs [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/routes/budget.routes.test.ts 7/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 13/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2114 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.65s [?2026l[?2026hstderr | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > PUT /:id > should return 500 if a generic database error occurs --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/budget.routes.test.ts:204:63 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/ErrorBoundary.test.tsx 22/22  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/routes/budget.routes.test.ts 7/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 13/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 64 passed (242)  Tests 5 failed | 2114 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.65s [?2026l[?2026h ✓ src/services/workers.server.test.ts (15 tests) 2453ms ✓ should call flyerProcessingService.processJob with the job data  1277ms stdout | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > DELETE /:id > should return 500 if a generic database error occurs [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/budget.routes.test.ts 12/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 15/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 65 passed (242)  Tests 5 failed | 2121 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.76s [?2026l[?2026hstderr | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > DELETE /:id > should return 500 if a generic database error occurs --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/budget.routes.test.ts:250:63 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/budget.routes.test.ts 12/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 15/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 65 passed (242)  Tests 5 failed | 2121 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.76s [?2026l[?2026hstdout | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > GET /spending-analysis > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/budget.routes.test.ts 18/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 15/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 65 passed (242)  Tests 5 failed | 2127 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.86s [?2026l[?2026hstderr | src/routes/budget.routes.test.ts > Budget Routes (/api/budgets) > GET /spending-analysis > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/budget.routes.test.ts:281:72 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/budget.routes.test.ts 18/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 15/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 65 passed (242)  Tests 5 failed | 2127 passed | 225 skipped (2382)  Start at 07:51:47  Duration 164.86s [?2026l[?2026h ✓ src/routes/budget.routes.test.ts (20 tests) 622ms  ❯ src/features/shopping/WatchedItemsList.test.tsx 10/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/budget.routes.test.ts 20/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 15/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 66 passed (242)  Tests 5 failed | 2129 passed | 225 skipped (2382)  Start at 07:51:47  Duration 165.09s [?2026l[?2026h  ❯ src/features/shopping/WatchedItemsList.test.tsx 13/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/budget.routes.test.ts 20/20  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/workers.server.test.ts 15/15  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 66 passed (242)  Tests 5 failed | 2132 passed | 225 skipped (2382)  Start at 07:51:47  Duration 165.66s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 13/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 66 passed (242)  Tests 5 failed | 2132 passed | 225 skipped (2382)  Start at 07:51:47  Duration 166.29s [?2026l[?2026h ✓ src/features/shopping/WatchedItemsList.test.tsx (16 tests) 8079ms ✓ should render the form and item list when user is authenticated  1219ms ✓ should allow adding a new item  1048ms ✓ should show a loading spinner while adding an item  716ms ✓ should allow removing an item  729ms ✓ should filter items by category  301ms ✓ should sort items ascending and descending  945ms ✓ should disable the "Add" button if item name is empty or whitespace  761ms ✓ should disable the "Add" button if category is not selected  690ms ✓ should reset loading state and log an error if onAddItem rejects  629ms  ❯ src/features/flyer/ProcessingStatus.test.tsx [queued]  ❯ src/features/shopping/WatchedItemsList.test.tsx 16/16  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 67 passed (242)  Tests 5 failed | 2135 passed | 225 skipped (2382)  Start at 07:51:47  Duration 167.32s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx 0/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 67 passed (242)  Tests 5 failed | 2135 passed | 225 skipped (2399)  Start at 07:51:47  Duration 167.43s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx 0/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/services/sentry.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 67 passed (242)  Tests 5 failed | 2135 passed | 225 skipped (2399)  Start at 07:51:47  Duration 168.13s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx 1/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/services/sentry.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 67 passed (242)  Tests 5 failed | 2136 passed | 225 skipped (2399)  Start at 07:51:47  Duration 169.25s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx 9/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/services/queueService.workers.test.ts [queued]  ❯ src/services/sentry.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 67 passed (242)  Tests 5 failed | 2144 passed | 225 skipped (2399)  Start at 07:51:47  Duration 169.35s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx 10/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/services/queueService.workers.test.ts [queued]  ❯ src/services/sentry.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 67 passed (242)  Tests 5 failed | 2145 passed | 225 skipped (2399)  Start at 07:51:47  Duration 169.55s [?2026l[?2026h ✓ src/features/flyer/ProcessingStatus.test.tsx (17 tests) 2248ms ✓ should render the title and initial time remaining  874ms  ❯ src/features/flyer/ProcessingStatus.test.tsx 17/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 0/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/services/queueService.workers.test.ts [queued]  ❯ src/services/sentry.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 68 passed (242)  Tests 5 failed | 2152 passed | 225 skipped (2412)  Start at 07:51:47  Duration 169.91s [?2026l[?2026h  ❯ src/features/flyer/ProcessingStatus.test.tsx 17/17  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 0/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts [queued]  ❯ src/services/queueService.workers.test.ts [queued]  ❯ src/services/sentry.server.test.ts [queued]  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 68 passed (242)  Tests 5 failed | 2152 passed | 225 skipped (2412)  Start at 07:51:47  Duration 170.46s [?2026l[?2026h  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 0/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts 0/12  ❯ src/services/queueService.workers.test.ts [queued]  ❯ src/services/sentry.server.test.ts 0/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 68 passed (242)  Tests 5 failed | 2152 passed | 225 skipped (2452)  Start at 07:51:47  Duration 170.83s [?2026l[?2026h ✓ src/services/geocodingService.server.test.ts (12 tests) 136ms  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 1/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts 12/12  ❯ src/services/queueService.workers.test.ts [queued]  ❯ src/services/sentry.server.test.ts 0/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 69 passed (242)  Tests 5 failed | 2165 passed | 225 skipped (2452)  Start at 07:51:47  Duration 171.45s [?2026l[?2026h  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 7/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/geocodingService.server.test.ts 12/12  ❯ src/services/queueService.workers.test.ts 0/13  ❯ src/services/sentry.server.test.ts 1/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 69 passed (242)  Tests 5 failed | 2172 passed | 225 skipped (2465)  Start at 07:51:47  Duration 171.74s [?2026l[?2026h ✓ src/services/sentry.server.test.ts (28 tests) 792ms ✓ should not initialize Sentry when not configured  696ms  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 8/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 0/13  ❯ src/services/sentry.server.test.ts 28/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 70 passed (242)  Tests 5 failed | 2200 passed | 225 skipped (2465)  Start at 07:51:47  Duration 172.16s [?2026l[?2026h  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 9/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 0/13  ❯ src/services/sentry.server.test.ts 28/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 70 passed (242)  Tests 5 failed | 2201 passed | 225 skipped (2465)  Start at 07:51:47  Duration 172.26s [?2026l[?2026h  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 9/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 0/13  ❯ src/services/sentry.server.test.ts 28/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 70 passed (242)  Tests 5 failed | 2201 passed | 225 skipped (2465)  Start at 07:51:47  Duration 172.46s [?2026l[?2026h  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 10/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 0/13  ❯ src/services/sentry.server.test.ts 28/28  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 70 passed (242)  Tests 5 failed | 2202 passed | 225 skipped (2465)  Start at 07:51:47  Duration 172.69s [?2026l[?2026h  ❯ src/pages/admin/components/AdminBrandManager.test.tsx 11/13  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 0/13  ❯ src/tests/integration/public.routes.integration.test.ts 0/17  Test Files 18 failed | 70 passed (242)  Tests 5 failed | 2203 passed | 225 skipped (2465)  Start at 07:51:47  Duration 172.92s [?2026l[?2026h ✓ src/pages/admin/components/AdminBrandManager.test.tsx (13 tests) 2956ms ✓ should render the list of brands when data is fetched successfully  854ms ✓ should show an error toast for oversized file  602ms ✓ should render an empty table if no brands are found  332ms ❯ src/tests/integration/public.routes.integration.test.ts (17 tests | 17 skipped) 10019ms ↓ GET /api/health/ping should return "pong" ↓ GET /api/health/db-schema should return success ↓ GET /api/health/storage should return success ↓ GET /api/health/db-pool should return success ↓ GET /api/health/time should return the server time ↓ GET /api/flyers should return a list of flyers ↓ GET /api/flyers/:id/items should return items for a specific flyer ↓ POST /api/flyers/items/batch-fetch should return items for multiple flyers ↓ POST /api/flyers/items/batch-count should return a count for multiple flyers ↓ GET /api/personalization/master-items should return a list of master grocery items ↓ GET /api/recipes/by-sale-percentage should return recipes ↓ GET /api/recipes/by-ingredient-and-tag should return recipes ↓ GET /api/recipes/:recipeId/comments should return comments for a recipe ↓ GET /api/stats/most-frequent-sales should return frequent items ↓ GET /api/personalization/dietary-restrictions should return a list of restrictions ↓ GET /api/personalization/appliances should return a list of appliances ↓ should block requests to /api/personalization/master-items after exceeding the limit  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 1/13  ❯ src/tests/integration/public.routes.integration.test.ts 17/17  Test Files 19 failed | 71 passed (242)  Tests 5 failed | 2206 passed | 242 skipped (2465)  Start at 07:51:47  Duration 173.02s [?2026l[?2026h  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 1/13  ❯ src/tests/integration/public.routes.integration.test.ts 17/17  Test Files 19 failed | 71 passed (242)  Tests 5 failed | 2206 passed | 242 skipped (2465)  Start at 07:51:47  Duration 173.98s [?2026l[?2026h  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.workers.test.ts 11/13  Test Files 19 failed | 71 passed (242)  Tests 5 failed | 2216 passed | 242 skipped (2465)  Start at 07:51:47  Duration 174.09s [?2026l[?2026h ✓ src/services/queueService.workers.test.ts (13 tests) 2536ms ✓ should call flyerProcessingService.processJob with the job data  1365ms  ❯ src/features/flyer/BulkImporter.test.tsx [queued]  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts [queued]  Test Files 19 failed | 72 passed (242)  Tests 5 failed | 2218 passed | 242 skipped (2465)  Start at 07:51:47  Duration 175.13s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx [queued]  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts [queued]  ❯ src/services/emailService.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts [queued]  Test Files 19 failed | 72 passed (242)  Tests 5 failed | 2218 passed | 242 skipped (2465)  Start at 07:51:47  Duration 175.88s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx [queued]  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts [queued]  ❯ src/services/emailService.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts [queued]  Test Files 19 failed | 72 passed (242)  Tests 5 failed | 2218 passed | 242 skipped (2465)  Start at 07:51:47  Duration 176.24s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx [queued]  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts [queued]  ❯ src/services/emailService.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts [queued]  Test Files 19 failed | 72 passed (242)  Tests 5 failed | 2218 passed | 242 skipped (2465)  Start at 07:51:47  Duration 176.75s [?2026l[?2026hstdout | src/services/emailService.server.test.ts > Email Service (Server) > sendPasswordResetEmail > should call sendMail with the correct recipient, subject, and constructed link [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendPasswordResetEmail > should call sendMail with the correct recipient, subject, and constructed link [TEST DEBUG] mockSendMail (default) called with: test@example.com stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendWelcomeEmail > should send a personalized welcome email when a name is provided [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendWelcomeEmail > should send a generic welcome email when a name is not provided [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendDealNotificationEmail > should send a personalized email with a list of deals [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendDealNotificationEmail > should send a personalized email with a list of deals [TEST DEBUG] mockSendMail (default) called with: deal.hunter@example.com stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendDealNotificationEmail > should send a generic email when name is null [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendDealNotificationEmail > should send a generic email when name is null [TEST DEBUG] mockSendMail (default) called with: anonymous.user@example.com stdout | src/services/emailService.server.test.ts > Email Service (Server) > sendDealNotificationEmail > should log an error if sendMail fails [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > processEmailJob > should call sendMail with job data and log success [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > processEmailJob > should log an error and re-throw if sendMail fails [TEST SETUP] Setting up Email Service mocks stdout | src/services/emailService.server.test.ts > Email Service (Server) > processEmailJob > should handle non-Error objects thrown during processing [TEST SETUP] Setting up Email Service mocks  ❯ src/features/flyer/BulkImporter.test.tsx [queued]  ❯ src/providers/AuthProvider.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts [queued]  ❯ src/services/emailService.server.test.ts 1/9  ❯ src/tests/integration/user.routes.integration.test.ts [queued]  Test Files 19 failed | 72 passed (242)  Tests 5 failed | 2219 passed | 242 skipped (2474)  Start at 07:51:47  Duration 176.89s [?2026l[?2026h ✓ src/services/emailService.server.test.ts (9 tests) 80ms  ❯ src/features/flyer/BulkImporter.test.tsx [queued]  ❯ src/providers/AuthProvider.test.tsx 0/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts [queued]  ❯ src/services/emailService.server.test.ts 9/9  ❯ src/tests/integration/user.routes.integration.test.ts [queued]  Test Files 19 failed | 73 passed (242)  Tests 5 failed | 2227 passed | 242 skipped (2483)  Start at 07:51:47  Duration 177.18s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx 0/13  ❯ src/providers/AuthProvider.test.tsx 2/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts 0/9  ❯ src/services/emailService.server.test.ts 9/9  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 19 failed | 73 passed (242)  Tests 5 failed | 2229 passed | 242 skipped (2514)  Start at 07:51:47  Duration 177.67s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx 0/13  ❯ src/providers/AuthProvider.test.tsx 2/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts 1/9  ❯ src/services/emailService.server.test.ts 9/9  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 19 failed | 73 passed (242)  Tests 6 failed | 2229 passed | 242 skipped (2514)  Start at 07:51:47  Duration 178.02s [?2026l[?2026h ❯ src/services/db/storeLocation.db.test.ts (9 tests | 8 failed) 75ms  × should link a store to an address 23ms  × should prevent duplicate store-address pairs 3ms  × should retrieve all locations for a store 4ms  × should return empty array for store with no locations 3ms  × should retrieve store with all its locations 2ms  × should work for stores with no locations 2ms  × should delete a store location link 3ms ✓ should throw error for non-existent location 10ms  × should update a store location to point to a different address 3ms  ❯ src/features/flyer/BulkImporter.test.tsx 7/13  ❯ src/providers/AuthProvider.test.tsx 2/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts 9/9  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 73 passed (242)  Tests 13 failed | 2237 passed | 242 skipped (2514)  Start at 07:51:47  Duration 178.69s [?2026l[?2026h ✓ src/features/flyer/BulkImporter.test.tsx (13 tests) 1264ms  ❯ src/features/flyer/BulkImporter.test.tsx 13/13  ❯ src/providers/AuthProvider.test.tsx 5/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/storeLocation.db.test.ts 9/9  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2246 passed | 242 skipped (2514)  Start at 07:51:47  Duration 179.01s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx 13/13  ❯ src/providers/AuthProvider.test.tsx 5/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 0/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2246 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.11s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx 13/13  ❯ src/providers/AuthProvider.test.tsx 6/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 0/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2247 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.42s [?2026l[?2026hstdout | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > GET /users > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/flyer/BulkImporter.test.tsx 13/13  ❯ src/providers/AuthProvider.test.tsx 6/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 1/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2248 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.52s [?2026l[?2026hstderr | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > GET /users > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.users.routes.test.ts:133:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/flyer/BulkImporter.test.tsx 13/13  ❯ src/providers/AuthProvider.test.tsx 6/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 1/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2248 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.52s [?2026l[?2026h  ❯ src/features/flyer/BulkImporter.test.tsx 13/13  ❯ src/providers/AuthProvider.test.tsx 6/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 2/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2249 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.62s [?2026l[?2026hstdout | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > GET /users/:id > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 4/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2252 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.73s [?2026l[?2026hstderr | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > GET /users/:id > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.users.routes.test.ts:161:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 4/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2252 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.73s [?2026l[?2026h  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 5/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2253 passed | 242 skipped (2526)  Start at 07:51:47  Duration 179.83s [?2026l[?2026hstdout | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > PUT /users/:id > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 11/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2259 passed | 242 skipped (2526)  Start at 07:51:47  Duration 180.03s [?2026l[?2026hstderr | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > PUT /users/:id > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.users.routes.test.ts:201:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 11/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2259 passed | 242 skipped (2526)  Start at 07:51:47  Duration 180.03s [?2026l[?2026hstdout | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > DELETE /users/:id > should return 500 on a generic database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 11/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2259 passed | 242 skipped (2526)  Start at 07:51:47  Duration 180.03s [?2026l[?2026hstderr | src/routes/admin.users.routes.test.ts > Admin User Management Routes (/api/admin/users) > DELETE /users/:id > should return 500 on a generic database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.users.routes.test.ts:248:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/providers/AuthProvider.test.tsx 7/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 11/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 74 passed (242)  Tests 13 failed | 2259 passed | 242 skipped (2526)  Start at 07:51:47  Duration 180.03s [?2026l[?2026h ✓ src/routes/admin.users.routes.test.ts (12 tests) 850ms  ❯ src/providers/AuthProvider.test.tsx 8/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 12/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 75 passed (242)  Tests 13 failed | 2261 passed | 242 skipped (2526)  Start at 07:51:47  Duration 180.13s [?2026l[?2026h ✓ src/providers/AuthProvider.test.tsx (9 tests) 3003ms ✓ should log in a user with provided profile data  1148ms ✓ should log in a user and fetch profile if not provided  408ms ✓ should throw an error and log out if profile fetch fails after login  364ms ✓ should update the user profile  451ms  ❯ src/providers/AuthProvider.test.tsx 9/9  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/admin.users.routes.test.ts 12/12  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 180.65s [?2026l[?2026h  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 181.39s [?2026l[?2026h  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 181.65s [?2026l[?2026h  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 183.16s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 183.54s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 183.65s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 184.13s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2262 passed | 242 skipped (2526)  Start at 07:51:47  Duration 184.47s [?2026l[?2026hstdout | src/routes/admin.monitoring.routes.test.ts > Admin Monitoring Routes (/api/admin) > GET /activity-log > should return 500 if fetching activity log fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2263 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.27s [?2026l[?2026hstderr | src/routes/admin.monitoring.routes.test.ts > Admin Monitoring Routes (/api/admin) > GET /activity-log > should return 500 if fetching activity log fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.monitoring.routes.test.ts:158:61 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2263 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.27s [?2026l[?2026hstdout | src/routes/admin.monitoring.routes.test.ts > Admin Monitoring Routes (/api/admin) > GET /workers/status > should return 500 if fetching worker statuses fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2263 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.27s [?2026l[?2026hstderr | src/routes/admin.monitoring.routes.test.ts > Admin Monitoring Routes (/api/admin) > GET /workers/status > should return 500 if fetching worker statuses fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Worker Error at /app/src/routes/admin.monitoring.routes.test.ts:192:72 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2263 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.27s [?2026l[?2026hstdout | src/routes/admin.monitoring.routes.test.ts > Admin Monitoring Routes (/api/admin) > GET /queues/status > should return 500 if fetching queue counts fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2263 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.27s [?2026l[?2026hstderr | src/routes/admin.monitoring.routes.test.ts > Admin Monitoring Routes (/api/admin) > GET /queues/status > should return 500 if fetching queue counts fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Redis is down at /app/src/routes/admin.monitoring.routes.test.ts:256:71 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 76 passed (242)  Tests 13 failed | 2263 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.27s [?2026l[?2026h ✓ src/routes/admin.monitoring.routes.test.ts (8 tests) 207ms  ❯ src/middleware/multer.middleware.test.ts [queued]  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/admin.monitoring.routes.test.ts 8/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 77 passed (242)  Tests 13 failed | 2270 passed | 242 skipped (2534)  Start at 07:51:47  Duration 185.38s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts 0/12  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 77 passed (242)  Tests 13 failed | 2270 passed | 242 skipped (2546)  Start at 07:51:47  Duration 186.30s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts 0/12  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts [queued]  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 77 passed (242)  Tests 13 failed | 2270 passed | 242 skipped (2546)  Start at 07:51:47  Duration 186.96s [?2026l[?2026h ✓ src/middleware/multer.middleware.test.ts (12 tests) 79ms  ❯ src/middleware/multer.middleware.test.ts 12/12  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts 0/13  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 78 passed (242)  Tests 13 failed | 2282 passed | 242 skipped (2559)  Start at 07:51:47  Duration 187.06s [?2026l[?2026h  ❯ src/middleware/multer.middleware.test.ts 12/12  ❯ src/pages/admin/ActivityLog.test.tsx [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts 1/13  ❯ src/services/logger.server.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 0/9  Test Files 20 failed | 78 passed (242)  Tests 13 failed | 2283 passed | 242 skipped (2559)  Start at 07:51:47  Duration 187.28s [?2026l[?2026h ✓ src/services/db/reaction.db.test.ts (13 tests) 92ms  ❯ src/middleware/multer.middleware.test.ts 12/12  ❯ src/pages/admin/ActivityLog.test.tsx 0/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts 13/13  ❯ src/services/logger.server.test.ts 0/12  ❯ src/tests/integration/user.routes.integration.test.ts 1/9  Test Files 20 failed | 79 passed (242)  Tests 13 failed | 2295 passed | 243 skipped (2579)  Start at 07:51:47  Duration 187.68s [?2026l[?2026hstderr | src/services/logger.server.test.ts > Server Logger > createScopedLogger > should create a child logger with module name Failed to create log directory /app/logs: Error: Permission denied at Object. (/app/src/services/logger.server.test.ts:149:13) at Object.Mock [as mkdirSync] (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at ensureLogDirectory (/app/src/services/logger.server.ts:47:10) at createLogger (/app/src/services/logger.server.ts:74:18) at /app/src/services/logger.server.ts:126:23  at processTicksAndRejections (node:internal/process/task_queues:95:5) at VitestModuleEvaluator._runInlinedModule (file:///app/node_modules/vitest/dist/module-evaluator.js:197:4) at VitestModuleRunner.directRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1146:59) at VitestModuleRunner.cachedRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1053:73) at /app/src/services/logger.server.test.ts:176:38 stderr | src/services/logger.server.test.ts > Server Logger > createScopedLogger > should enable debug level when DEBUG_MODULES includes module name Failed to create log directory /app/logs: Error: Permission denied at Object. (/app/src/services/logger.server.test.ts:149:13) at Object.Mock [as mkdirSync] (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at ensureLogDirectory (/app/src/services/logger.server.ts:47:10) at createLogger (/app/src/services/logger.server.ts:74:18) at /app/src/services/logger.server.ts:126:23  at processTicksAndRejections (node:internal/process/task_queues:95:5) at VitestModuleEvaluator._runInlinedModule (file:///app/node_modules/vitest/dist/module-evaluator.js:197:4) at VitestModuleRunner.directRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1146:59) at VitestModuleRunner.cachedRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1053:73) at /app/src/services/logger.server.test.ts:189:38 stderr | src/services/logger.server.test.ts > Server Logger > createScopedLogger > should enable debug level when DEBUG_MODULES includes wildcard Failed to create log directory /app/logs: Error: Permission denied at Object. (/app/src/services/logger.server.test.ts:149:13) at Object.Mock [as mkdirSync] (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at ensureLogDirectory (/app/src/services/logger.server.ts:47:10) at createLogger (/app/src/services/logger.server.ts:74:18) at /app/src/services/logger.server.ts:126:23  at processTicksAndRejections (node:internal/process/task_queues:95:5) at VitestModuleEvaluator._runInlinedModule (file:///app/node_modules/vitest/dist/module-evaluator.js:197:4) at VitestModuleRunner.directRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1146:59) at VitestModuleRunner.cachedRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1053:73) at /app/src/services/logger.server.test.ts:204:38 stderr | src/services/logger.server.test.ts > Server Logger > createScopedLogger > should use default level when module not in DEBUG_MODULES Failed to create log directory /app/logs: Error: Permission denied at Object. (/app/src/services/logger.server.test.ts:149:13) at Object.Mock [as mkdirSync] (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at ensureLogDirectory (/app/src/services/logger.server.ts:47:10) at createLogger (/app/src/services/logger.server.ts:74:18) at /app/src/services/logger.server.ts:126:23  at processTicksAndRejections (node:internal/process/task_queues:95:5) at VitestModuleEvaluator._runInlinedModule (file:///app/node_modules/vitest/dist/module-evaluator.js:197:4) at VitestModuleRunner.directRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1146:59) at VitestModuleRunner.cachedRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1053:73) at /app/src/services/logger.server.test.ts:219:38 stderr | src/services/logger.server.test.ts > Server Logger > createScopedLogger > should handle empty DEBUG_MODULES Failed to create log directory /app/logs: Error: Permission denied at Object. (/app/src/services/logger.server.test.ts:149:13) at Object.Mock [as mkdirSync] (file:///app/node_modules/@vitest/spy/dist/index.js:285:34) at ensureLogDirectory (/app/src/services/logger.server.ts:47:10) at createLogger (/app/src/services/logger.server.ts:74:18) at /app/src/services/logger.server.ts:126:23  at processTicksAndRejections (node:internal/process/task_queues:95:5) at VitestModuleEvaluator._runInlinedModule (file:///app/node_modules/vitest/dist/module-evaluator.js:197:4) at VitestModuleRunner.directRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1146:59) at VitestModuleRunner.cachedRequest (file:///app/node_modules/vite/dist/node/module-runner.js:1053:73) at /app/src/services/logger.server.test.ts:234:38  ❯ src/middleware/multer.middleware.test.ts 12/12  ❯ src/pages/admin/ActivityLog.test.tsx 1/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts 13/13  ❯ src/services/logger.server.test.ts 12/12  ❯ src/tests/integration/user.routes.integration.test.ts 9/9  Test Files 20 failed | 80 passed (242)  Tests 13 failed | 2308 passed | 251 skipped (2579)  Start at 07:51:47  Duration 187.89s [?2026l[?2026h ✓ src/services/logger.server.test.ts (12 tests) 315ms  ❯ src/middleware/multer.middleware.test.ts 12/12  ❯ src/pages/admin/ActivityLog.test.tsx 1/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts 13/13  ❯ src/services/logger.server.test.ts 12/12  ❯ src/tests/integration/user.routes.integration.test.ts 9/9  Test Files 20 failed | 80 passed (242)  Tests 13 failed | 2308 passed | 251 skipped (2579)  Start at 07:51:47  Duration 187.89s [?2026l[?2026h ❯ src/tests/integration/user.routes.integration.test.ts (9 tests | 9 skipped) 10109ms ↓ should return the profile for the authenticated user ↓ should return 401 Unauthorized if no token is provided ↓ should update the user profile ↓ should update user preferences ↓ should create, retrieve, and delete a shopping list ↓ should prevent a user from modifying another user's shopping list ↓ should add an item to a shopping list ↓ should update an item in a shopping list ↓ should delete an item from a shopping list  ❯ src/pages/admin/ActivityLog.test.tsx 4/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/reaction.db.test.ts 13/13  ❯ src/services/logger.server.test.ts 12/12  ❯ src/tests/integration/notification.integration.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 9/9  Test Files 21 failed | 80 passed (242)  Tests 13 failed | 2311 passed | 251 skipped (2579)  Start at 07:51:47  Duration 188.00s [?2026l[?2026h  ❯ src/pages/admin/ActivityLog.test.tsx 5/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/logger.server.test.ts 12/12  ❯ src/tests/integration/notification.integration.test.ts [queued]  ❯ src/tests/integration/user.routes.integration.test.ts 9/9  Test Files 21 failed | 80 passed (242)  Tests 13 failed | 2312 passed | 251 skipped (2579)  Start at 07:51:47  Duration 188.52s [?2026l[?2026h  ❯ src/pages/admin/ActivityLog.test.tsx 6/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  Test Files 21 failed | 80 passed (242)  Tests 13 failed | 2313 passed | 251 skipped (2579)  Start at 07:51:47  Duration 188.94s [?2026l[?2026h  ❯ src/pages/admin/ActivityLog.test.tsx 7/8  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  Test Files 21 failed | 80 passed (242)  Tests 13 failed | 2314 passed | 251 skipped (2579)  Start at 07:51:47  Duration 189.67s [?2026l[?2026h ✓ src/pages/admin/ActivityLog.test.tsx (8 tests) 2131ms ✓ should render a list of activities successfully covering all types  445ms ✓ should handle missing details in logs gracefully (fallback values)  1080ms  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2579)  Start at 07:51:47  Duration 190.29s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2579)  Start at 07:51:47  Duration 190.70s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2579)  Start at 07:51:47  Duration 191.55s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 0/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2592)  Start at 07:51:47  Duration 191.67s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 0/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  ❯ src/utils/dateUtils.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2592)  Start at 07:51:47  Duration 191.95s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 0/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts [queued]  ❯ src/utils/dateUtils.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2592)  Start at 07:51:47  Duration 193.45s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 0/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts 0/1  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 13 failed | 2315 passed | 251 skipped (2604)  Start at 07:51:47  Duration 193.55s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 0/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts 1/1  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts [queued]  Test Files 21 failed | 81 passed (242)  Tests 14 failed | 2315 passed | 251 skipped (2604)  Start at 07:51:47  Duration 194.30s [?2026l[?2026h ❯ src/tests/e2e/upc-journey.e2e.test.ts (1 test | 1 failed) 281ms  × should complete full UPC scanning journey: Register -> Scan -> Lookup -> History -> Stats 260ms  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 4/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/upc-journey.e2e.test.ts 1/1  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts [queued]  Test Files 22 failed | 81 passed (242)  Tests 14 failed | 2319 passed | 251 skipped (2604)  Start at 07:51:47  Duration 194.45s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 4/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts [queued]  Test Files 22 failed | 81 passed (242)  Tests 14 failed | 2319 passed | 251 skipped (2604)  Start at 07:51:47  Duration 195.39s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 7/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts [queued]  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts 1/38  Test Files 22 failed | 81 passed (242)  Tests 14 failed | 2323 passed | 251 skipped (2642)  Start at 07:51:47  Duration 196.18s [?2026l[?2026h ✓ src/utils/dateUtils.test.ts (38 tests) 118ms  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 8/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts 38/38  Test Files 22 failed | 82 passed (242)  Tests 14 failed | 2361 passed | 251 skipped (2652)  Start at 07:51:47  Duration 196.85s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 10/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts 38/38  Test Files 22 failed | 82 passed (242)  Tests 14 failed | 2363 passed | 251 skipped (2652)  Start at 07:51:47  Duration 197.17s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 11/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/utils/dateUtils.test.ts 38/38  Test Files 22 failed | 82 passed (242)  Tests 14 failed | 2364 passed | 251 skipped (2652)  Start at 07:51:47  Duration 197.28s [?2026l[?2026h ✓ src/pages/UserProfilePage.test.tsx (13 tests) 5666ms ✓ should display a loading message initially  327ms ✓ should render the profile and achievements on successful fetch  1951ms ✓ should allow editing and saving the user name  1280ms ✓ should allow canceling the name edit  612ms ✓ should show an error if saving the name fails with a non-ok response  1007ms  ❯ src/config/swagger.test.ts [queued]  ❯ src/pages/UserProfilePage.test.tsx 13/13  ❯ src/routes/reactions.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2366 passed | 251 skipped (2652)  Start at 07:51:47  Duration 197.92s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 0/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2366 passed | 251 skipped (2665)  Start at 07:51:47  Duration 198.73s [?2026l[?2026h  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 0/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2366 passed | 251 skipped (2665)  Start at 07:51:47  Duration 198.94s [?2026l[?2026hstdout | src/routes/reactions.routes.test.ts > Reaction Routes (/api/reactions) > GET / > should return 500 on database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 5/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2371 passed | 251 skipped (2665)  Start at 07:51:47  Duration 199.14s [?2026l[?2026hstderr | src/routes/reactions.routes.test.ts > Reaction Routes (/api/reactions) > GET / > should return 500 on database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/reactions.routes.test.ts:85:21 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 5/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2371 passed | 251 skipped (2665)  Start at 07:51:47  Duration 199.14s [?2026l[?2026hstdout | src/routes/reactions.routes.test.ts > Reaction Routes (/api/reactions) > GET /summary > should return 500 on database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 5/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2371 passed | 251 skipped (2665)  Start at 07:51:47  Duration 199.14s [?2026l[?2026hstderr | src/routes/reactions.routes.test.ts > Reaction Routes (/api/reactions) > GET /summary > should return 500 on database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/reactions.routes.test.ts:121:21 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 5/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2371 passed | 251 skipped (2665)  Start at 07:51:47  Duration 199.14s [?2026l[?2026hstdout | src/routes/reactions.routes.test.ts > Reaction Routes (/api/reactions) > POST /toggle > should return 500 on database error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 10/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2376 passed | 251 skipped (2665)  Start at 07:51:47  Duration 199.24s [?2026l[?2026hstderr | src/routes/reactions.routes.test.ts > Reaction Routes (/api/reactions) > POST /toggle > should return 500 on database error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/reactions.routes.test.ts:192:21 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/config/swagger.test.ts [queued]  ❯ src/routes/reactions.routes.test.ts 10/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 83 passed (242)  Tests 14 failed | 2376 passed | 251 skipped (2665)  Start at 07:51:47  Duration 199.24s [?2026l[?2026h ✓ src/routes/reactions.routes.test.ts (13 tests) 501ms  ❯ src/config/swagger.test.ts 0/34  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/sentry.client.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  Test Files 22 failed | 84 passed (242)  Tests 14 failed | 2379 passed | 251 skipped (2699)  Start at 07:51:47  Duration 199.88s [?2026l[?2026h  ❯ src/config/swagger.test.ts 1/34  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/sentry.client.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts [queued]  Test Files 22 failed | 84 passed (242)  Tests 14 failed | 2380 passed | 251 skipped (2699)  Start at 07:51:47  Duration 200.00s [?2026l[?2026h ✓ src/config/swagger.test.ts (34 tests) 137ms  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/sentry.client.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts [queued]  Test Files 22 failed | 85 passed (242)  Tests 14 failed | 2413 passed | 251 skipped (2699)  Start at 07:51:47  Duration 200.47s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/sentry.client.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts [queued]  Test Files 22 failed | 85 passed (242)  Tests 14 failed | 2413 passed | 251 skipped (2699)  Start at 07:51:47  Duration 201.16s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts [queued]  ❯ src/services/sentry.client.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts [queued]  Test Files 22 failed | 85 passed (242)  Tests 14 failed | 2413 passed | 251 skipped (2699)  Start at 07:51:47  Duration 201.45s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts [queued]  ❯ src/services/sentry.client.test.ts 0/18  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts [queued]  Test Files 22 failed | 85 passed (242)  Tests 14 failed | 2413 passed | 251 skipped (2717)  Start at 07:51:47  Duration 202.20s [?2026l[?2026h ✓ src/services/sentry.client.test.ts (18 tests) 507ms ✓ should have isSentryConfigured as false in test environment  426ms  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts [queued]  ❯ src/services/sentry.client.test.ts 18/18  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts [queued]  Test Files 22 failed | 86 passed (242)  Tests 14 failed | 2431 passed | 251 skipped (2717)  Start at 07:51:47  Duration 203.26s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 0/11  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 22 failed | 86 passed (242)  Tests 14 failed | 2431 passed | 251 skipped (2730)  Start at 07:51:47  Duration 203.36s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 1/11  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 22 failed | 86 passed (242)  Tests 14 failed | 2431 passed | 252 skipped (2730)  Start at 07:51:47  Duration 203.93s [?2026l[?2026h ❯ src/tests/integration/notification.integration.test.ts (11 tests | 11 skipped) 10014ms ↓ should fetch unread notifications for the authenticated user by default ↓ should fetch all notifications when includeRead=true ↓ should respect pagination with limit and offset ↓ should return 401 if user is not authenticated ↓ should mark a single notification as read ↓ should mark all unread notifications as read ↓ should return 404 for non-existent job ↓ should be accessible without authentication (public endpoint) ↓ should delete a specific notification ↓ should return 404 for non-existent notification ↓ should prevent deleting another user's notification  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 11/11  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 86 passed (242)  Tests 14 failed | 2431 passed | 262 skipped (2730)  Start at 07:51:47  Duration 204.04s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts 1/10  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 11/11  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 86 passed (242)  Tests 14 failed | 2432 passed | 262 skipped (2740)  Start at 07:51:47  Duration 204.14s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx [queued]  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts 9/10  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 11/11  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 86 passed (242)  Tests 14 failed | 2440 passed | 262 skipped (2740)  Start at 07:51:47  Duration 204.24s [?2026l[?2026h ✓ src/services/db/connection.db.test.ts (10 tests) 246ms  ❯ src/hooks/useUserData.test.tsx 0/6  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts 10/10  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/notification.integration.test.ts 11/11  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 87 passed (242)  Tests 14 failed | 2441 passed | 262 skipped (2746)  Start at 07:51:47  Duration 204.76s [?2026l[?2026h  ❯ src/hooks/useUserData.test.tsx 1/6  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/connection.db.test.ts 10/10  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 87 passed (242)  Tests 14 failed | 2442 passed | 262 skipped (2746)  Start at 07:51:47  Duration 205.11s [?2026l[?2026h ✓ src/hooks/useUserData.test.tsx (6 tests) 287ms  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 262 skipped (2746)  Start at 07:51:47  Duration 205.69s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 0/10  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 262 skipped (2746)  Start at 07:51:47  Duration 206.49s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 1/10  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 23 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 263 skipped (2746)  Start at 07:51:47  Duration 206.69s [?2026l[?2026h ❯ src/tests/integration/ai.integration.test.ts (10 tests | 10 skipped) 10095ms ↓ POST /api/ai/check-flyer should return a boolean ↓ POST /api/ai/extract-address should return a stubbed address ↓ POST /api/ai/extract-logo should return a stubbed response ↓ POST /api/ai/quick-insights should return a stubbed insight ↓ POST /api/ai/deep-dive should return a stubbed analysis ↓ POST /api/ai/search-web should return a stubbed search result ↓ POST /api/ai/plan-trip should return an error as the feature is disabled ↓ POST /api/ai/generate-image should reject because it is not implemented ↓ POST /api/ai/generate-speech should reject because it is not implemented ↓ should block requests to /api/ai/quick-insights after exceeding the limit  ❯ src/pages/ResetPasswordPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 10/10  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 272 skipped (2746)  Start at 07:51:47  Duration 207.74s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 0/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts [queued]  ❯ src/tests/integration/ai.integration.test.ts 10/10  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 272 skipped (2754)  Start at 07:51:47  Duration 207.84s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 0/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 272 skipped (2754)  Start at 07:51:47  Duration 208.14s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 0/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts 0/10  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 88 passed (242)  Tests 14 failed | 2447 passed | 272 skipped (2764)  Start at 07:51:47  Duration 208.63s [?2026l[?2026hstderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > should convert a PDF and return image paths [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.pdf [WORKER DEBUG] FlyerFileHandler: Detected extension: .pdf stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > should throw PdfConversionError if PDF conversion yields no images [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.pdf [WORKER DEBUG] FlyerFileHandler: Detected extension: .pdf stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > should convert convertible image types to PNG [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.gif [WORKER DEBUG] FlyerFileHandler: Detected extension: .gif stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > should throw UnsupportedFileTypeError for unsupported types [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/document.txt [WORKER DEBUG] FlyerFileHandler: Detected extension: .txt stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > Image Processing > should process a JPEG to strip EXIF data [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.jpg [WORKER DEBUG] FlyerFileHandler: Detected extension: .jpg  ❯ src/pages/ResetPasswordPage.test.tsx 0/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts 1/10  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 88 passed (242)  Tests 14 failed | 2448 passed | 272 skipped (2764)  Start at 07:51:47  Duration 208.73s [?2026l[?2026hstderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > Image Processing > should process a PNG to strip metadata [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.png [WORKER DEBUG] FlyerFileHandler: Detected extension: .png stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > Image Processing > should handle other supported image types (e.g. webp) directly without processing [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.webp [WORKER DEBUG] FlyerFileHandler: Detected extension: .webp stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > Image Processing > should throw ImageConversionError if sharp fails during JPEG processing [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.jpg [WORKER DEBUG] FlyerFileHandler: Detected extension: .jpg stderr | src/services/flyerFileHandler.server.test.ts > FlyerFileHandler > Image Processing > should throw ImageConversionError if sharp fails during PNG processing [WORKER DEBUG] FlyerFileHandler: prepareImageInputs called for /tmp/flyer.png [WORKER DEBUG] FlyerFileHandler: Detected extension: .png  ❯ src/pages/ResetPasswordPage.test.tsx 0/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts 10/10  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts [queued]  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 88 passed (242)  Tests 14 failed | 2457 passed | 272 skipped (2764)  Start at 07:51:47  Duration 210.05s [?2026l[?2026h ✓ src/services/flyerFileHandler.server.test.ts (10 tests) 137ms  ❯ src/pages/ResetPasswordPage.test.tsx 2/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts 10/10  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files [22m24 failed | 89 passed (242)  Tests 14 failed | 2459 passed | 272 skipped (2769)  Start at 07:51:47  Duration 210.15s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 3/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts 10/10  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 89 passed (242)  Tests 14 failed | 2460 passed | 272 skipped (2769)  Start at 07:51:47  Duration 210.65s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 3/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/flyerFileHandler.server.test.ts 10/10  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 89 passed (242)  Tests 14 failed | 2460 passed | 272 skipped (2769)  Start at 07:51:47  Duration 211.06s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 4/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 89 passed (242)  Tests 14 failed | 2461 passed | 272 skipped (2769)  Start at 07:51:47  Duration 211.17s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 4/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts [queued]  ❯ src/services/monitoringService.server.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts 0/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 89 passed (242)  Tests 14 failed | 2461 passed | 272 skipped (2779)  Start at 07:51:47  Duration 211.41s [?2026l[?2026h ✓ src/services/monitoringService.server.test.ts (8 tests) 66ms  ❯ src/pages/ResetPasswordPage.test.tsx 4/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts 1/18  ❯ src/services/monitoringService.server.test.ts 8/8  ❯ src/tests/e2e/error-reporting.e2e.test.ts 0/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 24 failed | 90 passed (242)  Tests 15 failed | 2469 passed | 272 skipped (2805)  Start at 07:51:47  Duration 211.61s [?2026l[?2026h ❯ src/services/db/store.db.test.ts (18 tests | 14 failed) 114ms  × should create a store with just a name 41ms  × should create a store with name and logo URL 9ms  × should create a store with created_by user ID 2ms  × should reject duplicate store names 3ms  × should retrieve a store by ID 3ms ✓ should throw NotFoundError for non-existent store 9ms  × should retrieve all stores 1ms ✓ should return empty array when no stores exist 3ms  × should update store name 3ms  × should update store logo URL 2ms  × should update both name and logo 2ms ✓ should throw error for non-existent store 6ms  × should delete a store 3ms ✓ should throw error when deleting non-existent store 7ms  × should find stores by partial name match 3ms  × should be case-insensitive 2ms  × should return empty array for no matches 2ms  × should limit results to 10 by default 3ms  ❯ src/pages/ResetPasswordPage.test.tsx 5/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts 18/18  ❯ src/services/monitoringService.server.test.ts 8/8  ❯ src/tests/e2e/error-reporting.e2e.test.ts 3/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 25 failed | 90 passed (242)  Tests 28 failed | 2477 passed | 272 skipped (2805)  Start at 07:51:47  Duration 211.82s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 5/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts 18/18  ❯ src/services/monitoringService.server.test.ts 8/8  ❯ src/tests/e2e/error-reporting.e2e.test.ts 3/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 25 failed | 90 passed (242)  Tests 28 failed | 2477 passed | 272 skipped (2805)  Start at 07:51:47  Duration 212.02s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 5/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/store.db.test.ts 18/18  ❯ src/services/monitoringService.server.test.ts 8/8  ❯ src/tests/e2e/error-reporting.e2e.test.ts 9/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 25 failed | 90 passed (242)  Tests 28 failed | 2483 passed | 272 skipped (2805)  Start at 07:51:47  Duration 212.23s [?2026l[?2026h ✓ src/tests/e2e/error-reporting.e2e.test.ts (10 tests) 850ms ✓ should export initSentry function  443ms  ❯ src/pages/ResetPasswordPage.test.tsx 7/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts 10/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 25 failed | 91 passed (242)  Tests 28 failed | 2486 passed | 272 skipped (2805)  Start at 07:51:47  Duration 212.73s [?2026l[?2026h ✓ src/pages/ResetPasswordPage.test.tsx (8 tests) 4916ms ✓ should render the form with password fields and a submit button  1264ms ✓ should call resetPassword and show success message on valid submission  581ms ✓ should show an error message if passwords do not match  407ms ✓ should show an error message if the API call fails  589ms ✓ should show an error message if API returns a non-JSON error response  465ms ✓ should show a loading spinner while submitting  687ms ✓ should show an error if no token is provided  468ms ✓ should handle unknown errors  437ms  ❯ src/pages/ResetPasswordPage.test.tsx 8/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/error-reporting.e2e.test.ts 10/10  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 0/13  Test Files 25 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 272 skipped (2805)  Start at 07:51:47  Duration 213.04s [?2026l[?2026h  ❯ src/pages/ResetPasswordPage.test.tsx 8/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 1/13  Test Files 25 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 273 skipped (2805)  Start at 07:51:47  Duration 213.45s [?2026l[?2026h ❯ src/tests/integration/reactions.integration.test.ts (13 tests | 13 skipped) 10024ms ↓ should return reactions (public endpoint) ↓ should filter reactions by entityType ↓ should filter reactions by entityId ↓ should return reaction summary for an entity ↓ should return 400 when entityType is missing ↓ should return 400 when entityId is missing ↓ should require authentication ↓ should add a reaction when none exists ↓ should remove the reaction when toggled again ↓ should return 400 for missing entity_type ↓ should return 400 for missing entity_id ↓ should return 400 for missing reaction_type ↓ should accept entity_id as string (required format)  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 13/13  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 213.75s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  ❯ src/tests/integration/reactions.integration.test.ts 13/13  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 214.21s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 215.13s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 215.23s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 216.15s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/features/charts/TopDeals.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 216.52s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/features/charts/TopDeals.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/processingErrors.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 217.79s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/features/charts/TopDeals.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx [queued]  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/processingErrors.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 92 passed (242)  Tests 28 failed | 2487 passed | 285 skipped (2805)  Start at 07:51:47  Duration 218.80s [?2026l[?2026h ✓ src/services/processingErrors.test.ts (13 tests) 45ms  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/features/charts/TopDeals.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx [queued]  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/processingErrors.test.ts 13/13  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 93 passed (242)  Tests 28 failed | 2500 passed | 285 skipped (2818)  Start at 07:51:47  Duration 218.94s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx [queued]  ❯ src/features/charts/TopDeals.test.tsx [queued]  ❯ src/hooks/useFlyers.test.tsx 0/6  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/processingErrors.test.ts 13/13  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 93 passed (242)  Tests 28 failed | 2500 passed | 285 skipped (2824)  Start at 07:51:47  Duration 219.29s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 0/8  ❯ src/features/charts/TopDeals.test.tsx 0/5  ❯ src/hooks/useFlyers.test.tsx 1/6  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/processingErrors.test.ts 13/13  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 93 passed (242)  Tests 28 failed | 2501 passed | 285 skipped (2837)  Start at 07:51:47  Duration 219.49s [?2026l[?2026h ✓ src/hooks/useFlyers.test.tsx (6 tests) 161ms  ❯ src/components/RecipeSuggester.test.tsx 0/8  ❯ src/features/charts/TopDeals.test.tsx 0/5  ❯ src/hooks/useFlyers.test.tsx 6/6  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/processingErrors.test.ts 13/13  ❯ src/tests/integration/price.integration.test.ts 0/5  Test Files 26 failed | 94 passed (242)  Tests 28 failed | 2506 passed | 285 skipped (2837)  Start at 07:51:47  Duration 219.73s [?2026l[?2026h ❯ src/tests/integration/price.integration.test.ts (5 tests | 5 skipped) 10021ms ↓ should return the correct price history for a given master item ID ↓ should respect the limit parameter ↓ should respect the offset parameter ↓ should return price history sorted by date in ascending order ↓ should return an empty array for a master item ID with no price history stdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > renders correctly with initial state TEST: Verifying initial render state  ❯ src/components/RecipeSuggester.test.tsx 0/8  ❯ src/features/charts/TopDeals.test.tsx 1/5  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 5/5  Test Files 27 failed | 94 passed (242)  Tests 28 failed | 2507 passed | 290 skipped (2837)  Start at 07:51:47  Duration 220.90s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 0/8  ❯ src/features/charts/TopDeals.test.tsx 2/5  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/price.integration.test.ts 5/5  Test Files 27 failed | 94 passed (242)  Tests 28 failed | 2508 passed | 290 skipped (2837)  Start at 07:51:47  Duration 221.17s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > shows validation error if no ingredients are entered TEST: Verifying validation for empty input stdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > shows validation error if no ingredients are entered TEST: Validation error displayed correctly  ❯ src/components/RecipeSuggester.test.tsx 1/8  ❯ src/features/charts/TopDeals.test.tsx 2/5  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 94 passed (242)  Tests 28 failed | 2509 passed | 290 skipped (2843)  Start at 07:51:47  Duration 221.37s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > calls suggestRecipe and displays suggestion on success TEST: Verifying successful recipe suggestion flow ✓ src/features/charts/TopDeals.test.tsx (5 tests) 2074ms ✓ should render the correct heading  1114ms ✓ should display up to 10 items, sorted by price_in_cents ascending  811ms  ❯ src/components/RecipeSuggester.test.tsx 2/8  ❯ src/features/charts/TopDeals.test.tsx 5/5  ❯ src/pages/admin/AdminStatsPage.test.tsx [queued]  ❯ src/pages/admin/CorrectionsPage.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2513 passed | 290 skipped (2843)  Start at 07:51:47  Duration 221.64s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 2/8  ❯ src/features/charts/TopDeals.test.tsx 5/5  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2513 passed | 290 skipped (2850)  Start at 07:51:47  Duration 221.95s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 2/8  ❯ src/features/charts/TopDeals.test.tsx 5/5  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2513 passed | 290 skipped (2850)  Start at 07:51:47  Duration 222.16s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > calls suggestRecipe and displays suggestion on success TEST: Suggestion displayed and API called with correct args  ❯ src/components/RecipeSuggester.test.tsx 2/8  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 1/6  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2514 passed | 290 skipped (2850)  Start at 07:51:47  Duration 222.78s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > handles API errors (non-200 response) gracefully TEST: Verifying API error handling (400/500 responses)  ❯ src/components/RecipeSuggester.test.tsx 2/8  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 2/6  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2515 passed | 290 skipped (2850)  Start at 07:51:47  Duration 222.88s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 3/8  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 3/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2517 passed | 290 skipped (2850)  Start at 07:51:47  Duration 223.08s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 3/8  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 5/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 95 passed (242)  Tests 28 failed | 2519 passed | 290 skipped (2850)  Start at 07:51:47  Duration 223.18s [?2026l[?2026h ✓ src/pages/admin/CorrectionsPage.test.tsx (6 tests) 1791ms ✓ should render a loading spinner while fetching data  1295ms  ❯ src/components/RecipeSuggester.test.tsx 3/8  ❯ src/pages/admin/AdminStatsPage.test.tsx 0/7  ❯ src/pages/admin/CorrectionsPage.test.tsx 6/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 96 passed (242)  Tests 28 failed | 2520 passed | 290 skipped (2850)  Start at 07:51:47  Duration 224.43s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > handles API errors (non-200 response) gracefully TEST: API error message displayed to user stdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > handles network exceptions and logs them TEST: Verifying network exception handling stdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > handles network exceptions and logs them TEST: Network error caught and logged  ❯ src/components/RecipeSuggester.test.tsx 4/8  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/pages/admin/AdminStatsPage.test.tsx 4/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 96 passed (242)  Tests 28 failed | 2525 passed | 290 skipped (2850)  Start at 07:51:47  Duration 224.53s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > clears previous errors when submitting again TEST: Verifying error clearing on re-submit  ❯ src/components/RecipeSuggester.test.tsx 5/8  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/pages/admin/AdminStatsPage.test.tsx 4/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 96 passed (242)  Tests 28 failed | 2526 passed | 290 skipped (2850)  Start at 07:51:47  Duration 225.89s [?2026l[?2026hstdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > clears previous errors when submitting again TEST: Previous error cleared successfully stdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > uses default error message when API error response has no message TEST: Verifying default error message for API failure stdout | src/components/RecipeSuggester.test.tsx > RecipeSuggester Component > handles non-Error objects thrown during fetch TEST: Verifying handling of non-Error exceptions ✓ src/pages/admin/AdminStatsPage.test.tsx (7 tests) 2856ms ✓ should render a loading spinner while fetching stats  1539ms ✓ should display stats cards when data is fetched successfully  426ms ✓ should render a link back to the admin dashboard  485ms  ❯ src/components/RecipeSuggester.test.tsx 7/8  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 97 passed (242)  Tests 28 failed | 2531 passed | 290 skipped (2850)  Start at 07:51:47  Duration 226.02s [?2026l[?2026h  ❯ src/components/RecipeSuggester.test.tsx 8/8  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  Test Files 27 failed | 97 passed (242)  Tests 28 failed | 2532 passed | 290 skipped (2850)  Start at 07:51:47  Duration 226.69s [?2026l[?2026h ✓ src/components/RecipeSuggester.test.tsx (8 tests) 6943ms ✓ renders correctly with initial state  1100ms ✓ shows validation error if no ingredients are entered  847ms ✓ calls suggestRecipe and displays suggestion on success  1461ms ✓ handles API errors (non-200 response) gracefully  896ms ✓ handles network exceptions and logs them  596ms ✓ clears previous errors when submitting again  941ms ✓ uses default error message when API error response has no message  560ms ✓ handles non-Error objects thrown during fetch  530ms  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  ❯ src/utils/unitConverter.test.ts [queued]  Test Files 27 failed | 98 passed (242)  Tests 28 failed | 2532 passed | 290 skipped (2850)  Start at 07:51:47  Duration 226.80s [?2026l[?2026h  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  ❯ src/utils/unitConverter.test.ts [queued]  Test Files 27 failed | 98 passed (242)  Tests 28 failed | 2532 passed | 290 skipped (2850)  Start at 07:51:47  Duration 227.56s [?2026l[?2026h  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts [queued]  ❯ src/utils/unitConverter.test.ts [queued]  Test Files 27 failed | 98 passed (242)  Tests 28 failed | 2532 passed | 290 skipped (2850)  Start at 07:51:47  Duration 228.35s [?2026l[?2026h  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts 1/13  ❯ src/utils/unitConverter.test.ts [queued]  Test Files 27 failed | 98 passed (242)  Tests 28 failed | 2533 passed | 290 skipped (2863)  Start at 07:51:47  Duration 228.61s [?2026l[?2026h ✓ src/services/aiAnalysisService.test.ts (13 tests) 98ms  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts 13/13  ❯ src/utils/unitConverter.test.ts 0/22  Test Files 27 failed | 99 passed (242)  Tests 28 failed | 2545 passed | 290 skipped (2885)  Start at 07:51:47  Duration 229.13s [?2026l[?2026h  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts 13/13  ❯ src/utils/unitConverter.test.ts 1/22  Test Files 27 failed | 99 passed (242)  Tests 28 failed | 2546 passed | 290 skipped (2885)  Start at 07:51:47  Duration 229.23s [?2026l[?2026h  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/aiAnalysisService.test.ts 13/13  ❯ src/utils/unitConverter.test.ts 2/22  Test Files 27 failed | 99 passed (242)  Tests 28 failed | 2547 passed | 290 skipped (2885)  Start at 07:51:47  Duration 229.33s [?2026l[?2026h ✓ src/utils/unitConverter.test.ts (22 tests) 174ms  ❯ src/features/flyer/FlyerDisplay.test.tsx [queued]  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/useFlyerSelection.test.tsx 0/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  ❯ src/utils/unitConverter.test.ts 22/22  Test Files 27 failed | 100 passed (242)  Tests 28 failed | 2567 passed | 290 skipped (2898)  Start at 07:51:47  Duration 229.99s [?2026l[?2026h  ❯ src/config.test.ts [queued]  ❯ src/features/flyer/FlyerDisplay.test.tsx 0/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 0/10  ❯ src/hooks/useFlyerSelection.test.tsx 1/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 100 passed (242)  Tests 28 failed | 2568 passed | 290 skipped (2926)  Start at 07:51:47  Duration 230.09s [?2026l[?2026h  ❯ src/config.test.ts [queued]  ❯ src/features/flyer/FlyerDisplay.test.tsx 0/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 0/10  ❯ src/hooks/useFlyerSelection.test.tsx 1/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 100 passed (242)  Tests 28 failed | 2568 passed | 290 skipped (2926)  Start at 07:51:47  Duration 230.71s [?2026l[?2026h ✓ src/hooks/useFlyerSelection.test.tsx (13 tests) 288ms  ❯ src/config.test.ts [queued]  ❯ src/features/flyer/FlyerDisplay.test.tsx 0/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 8/10  ❯ src/hooks/useFlyerSelection.test.tsx 13/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 101 passed (242)  Tests 28 failed | 2588 passed | 290 skipped (2926)  Start at 07:51:47  Duration 230.81s [?2026l[?2026h  ❯ src/config.test.ts [queued]  ❯ src/features/flyer/FlyerDisplay.test.tsx 2/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 10/10  ❯ src/hooks/useFlyerSelection.test.tsx 13/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 101 passed (242)  Tests 28 failed | 2592 passed | 290 skipped (2926)  Start at 07:51:47  Duration 231.08s [?2026l[?2026h ✓ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx (10 tests) 794ms  ❯ src/config.test.ts [queued]  ❯ src/features/flyer/FlyerDisplay.test.tsx 3/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 10/10  ❯ src/hooks/useFlyerSelection.test.tsx 13/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 102 passed (242)  Tests 28 failed | 2593 passed | 290 skipped (2926)  Start at 07:51:47  Duration 231.22s [?2026l[?2026h  ❯ src/config.test.ts 0/30  ❯ src/features/flyer/FlyerDisplay.test.tsx 7/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 10/10  ❯ src/hooks/useFlyerSelection.test.tsx 13/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 102 passed (242)  Tests 28 failed | 2597 passed | 290 skipped (2956)  Start at 07:51:47  Duration 231.43s [?2026l[?2026h ✓ src/config.test.ts (30 tests) 74ms  ❯ src/config.test.ts 30/30  ❯ src/features/flyer/FlyerDisplay.test.tsx 9/18  ❯ src/hooks/mutations/useUpdateShoppingListItemMutation.test.tsx 10/10  ❯ src/hooks/useFlyerSelection.test.tsx 13/13  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  Test Files 27 failed | 103 passed (242)  Tests 28 failed | 2629 passed | 290 skipped (2956)  Start at 07:51:47  Duration 231.63s [?2026l[?2026h  ❯ src/config.test.ts 30/30  ❯ src/features/flyer/FlyerDisplay.test.tsx 11/18  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  ❯ src/services/analyticsService.server.test.ts [queued]  Test Files 27 failed | 103 passed (242)  Tests 28 failed | 2631 passed | 290 skipped (2956)  Start at 07:51:47  Duration 231.83s [?2026l[?2026h ✓ src/features/flyer/FlyerDisplay.test.tsx (18 tests) 1826ms ✓ should render all elements when all props are provided  764ms  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts [queued]  ❯ src/services/analyticsService.server.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2638 passed | 290 skipped (2956)  Start at 07:51:47  Duration 232.64s [?2026l[?2026h  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 0/10  ❯ src/services/analyticsService.server.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2638 passed | 290 skipped (2966)  Start at 07:51:47  Duration 233.48s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 0/10  ❯ src/services/analyticsService.server.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2638 passed | 290 skipped (2966)  Start at 07:51:47  Duration 233.97s [?2026l[?2026hstdout | src/routes/system.routes.test.ts > System Routes (/api/system) > GET /pm2-status > should return 500 if pm2 command produces stderr output [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 10/10  ❯ src/services/analyticsService.server.test.ts 1/6  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2649 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.19s [?2026l[?2026hstderr | src/routes/system.routes.test.ts > System Routes (/api/system) > GET /pm2-status > should return 500 if pm2 command produces stderr output --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: PM2 command produced an error: A non-fatal warning occurred. at /app/src/routes/system.routes.test.ts:95:28 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 10/10  ❯ src/services/analyticsService.server.test.ts 1/6  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2649 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.19s [?2026l[?2026hstdout | src/routes/system.routes.test.ts > System Routes (/api/system) > GET /pm2-status > should return 500 on a generic exec error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 10/10  ❯ src/services/analyticsService.server.test.ts 1/6  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2649 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.19s [?2026l[?2026hstderr | src/routes/system.routes.test.ts > System Routes (/api/system) > GET /pm2-status > should return 500 on a generic exec error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: System error at /app/src/routes/system.routes.test.ts:106:28 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 10/10  ❯ src/services/analyticsService.server.test.ts 1/6  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2649 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.19s [?2026l[?2026hstdout | src/routes/system.routes.test.ts > System Routes (/api/system) > POST /geocode > should return 500 if the geocoding service throws an error [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 10/10  ❯ src/services/analyticsService.server.test.ts 1/6  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2649 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.19s [?2026l[?2026hstderr | src/routes/system.routes.test.ts > System Routes (/api/system) > POST /geocode > should return 500 if the geocoding service throws an error --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Geocoding service unavailable at /app/src/routes/system.routes.test.ts:144:28 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/routes/system.routes.test.ts 10/10  ❯ src/services/analyticsService.server.test.ts 1/6  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 104 passed (242)  Tests 28 failed | 2649 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.19s [?2026l[?2026h ✓ src/routes/system.routes.test.ts (10 tests) 362ms ✓ src/services/analyticsService.server.test.ts (6 tests) 71ms  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 106 passed (242)  Tests 28 failed | 2654 passed | 290 skipped (2972)  Start at 07:51:47  Duration 234.46s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 106 passed (242)  Tests 28 failed | 2654 passed | 290 skipped (2972)  Start at 07:51:47  Duration 235.08s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts [queued]  Test Files 27 failed | 106 passed (242)  Tests 28 failed | 2654 passed | 290 skipped (2972)  Start at 07:51:47  Duration 236.07s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts 0/9  Test Files 27 failed | 106 passed (242)  Tests 28 failed | 2654 passed | 290 skipped (2981)  Start at 07:51:47  Duration 236.25s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts 1/9  Test Files 27 failed | 106 passed (242)  Tests 28 failed | 2655 passed | 290 skipped (2981)  Start at 07:51:47  Duration 236.53s [?2026l[?2026h ✓ src/services/db/gamification.db.test.ts (9 tests) 59ms  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/gamification.db.test.ts 9/9  Test Files 27 failed | 107 passed (242)  Tests 28 failed | 2663 passed | 290 skipped (2981)  Start at 07:51:47  Duration 237.02s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx [queued]  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useDataExtraction.test.ts [queued]  ❯ src/hooks/useWatchedItems.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 107 passed (242)  Tests 28 failed | 2663 passed | 290 skipped (2981)  Start at 07:51:47  Duration 238.32s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx 0/8  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useDataExtraction.test.ts [queued]  ❯ src/hooks/useWatchedItems.test.tsx 0/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 107 passed (242)  Tests 28 failed | 2663 passed | 290 skipped (2998)  Start at 07:51:47  Duration 238.42s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx 0/8  ❯ src/hooks/useAppInitialization.test.tsx [queued]  ❯ src/hooks/useDataExtraction.test.ts [queued]  ❯ src/hooks/useWatchedItems.test.tsx 2/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 107 passed (242)  Tests 28 failed | 2665 passed | 290 skipped (2998)  Start at 07:51:47  Duration 238.52s [?2026l[?2026h ✓ src/hooks/useWatchedItems.test.tsx (9 tests) 243ms  ❯ src/features/charts/PriceChart.test.tsx 0/8  ❯ src/hooks/useAppInitialization.test.tsx 1/10  ❯ src/hooks/useDataExtraction.test.ts [queued]  ❯ src/hooks/useWatchedItems.test.tsx 9/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 108 passed (242)  Tests 28 failed | 2673 passed | 290 skipped (3008)  Start at 07:51:47  Duration 238.97s [?2026l[?2026h ✓ src/hooks/useAppInitialization.test.tsx (10 tests) 294ms  ❯ src/features/charts/PriceChart.test.tsx 0/8  ❯ src/hooks/useAppInitialization.test.tsx 10/10  ❯ src/hooks/useDataExtraction.test.ts [queued]  ❯ src/hooks/useWatchedItems.test.tsx 9/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 109 passed (242)  Tests 28 failed | 2682 passed | 290 skipped (3008)  Start at 07:51:47  Duration 239.43s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx 0/8  ❯ src/hooks/useAppInitialization.test.tsx 10/10  ❯ src/hooks/useDataExtraction.test.ts [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts 0/10  ❯ src/routes/store.routes.test.ts [queued]  Test Files 27 failed | 109 passed (242)  Tests 28 failed | 2682 passed | 290 skipped (3018)  Start at 07:51:47  Duration 239.96s [?2026l[?2026h  ❯ src/features/charts/PriceChart.test.tsx 1/8  ❯ src/hooks/useDataExtraction.test.ts 1/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts 0/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/gamificationService.test.ts [queued]  Test Files 27 failed | 109 passed (242)  Tests 28 failed | 2684 passed | 290 skipped (3027)  Start at 07:51:47  Duration 240.06s [?2026l[?2026hstdout | src/routes/price.routes.test.ts > Price Routes (/api/price-history) > POST / > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/features/charts/PriceChart.test.tsx 1/8  ❯ src/hooks/useDataExtraction.test.ts 1/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts 10/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/gamificationService.test.ts [queued]  Test Files 27 failed | 109 passed (242)  Tests 28 failed | 2694 passed | 290 skipped (3027)  Start at 07:51:47  Duration 240.66s [?2026l[?2026hstderr | src/routes/price.routes.test.ts > Price Routes (/api/price-history) > POST / > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Database connection failed at /app/src/routes/price.routes.test.ts:90:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/features/charts/PriceChart.test.tsx 1/8  ❯ src/hooks/useDataExtraction.test.ts 1/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/price.routes.test.ts 10/10  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/gamificationService.test.ts [queued]  Test Files 27 failed | 109 passed (242)  Tests 28 failed | 2694 passed | 290 skipped (3027)  Start at 07:51:47  Duration 240.66s [?2026l[?2026h ✓ src/routes/price.routes.test.ts (10 tests) 432ms ✓ src/hooks/useDataExtraction.test.ts (9 tests) 280ms ✓ src/features/charts/PriceChart.test.tsx (8 tests) 2231ms ✓ should render a login prompt when user is not authenticated  1096ms ✓ should render the table with deal items when data is provided  854ms  ❯ src/features/charts/PriceChart.test.tsx 8/8  ❯ src/hooks/useDataExtraction.test.ts 9/9  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/gamificationService.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts [queued]  Test Files 27 failed | 112 passed (242)  Tests 28 failed | 2709 passed | 290 skipped (3027)  Start at 07:51:47  Duration 241.58s [?2026l[?2026h  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts [queued]  ❯ src/services/gamificationService.test.ts 1/9  ❯ src/tests/integration/flyer.integration.test.ts [queued]  Test Files 27 failed | 112 passed (242)  Tests 28 failed | 2710 passed | 290 skipped (3036)  Start at 07:51:47  Duration 241.70s [?2026l[?2026h ✓ src/services/gamificationService.test.ts (9 tests) 52ms  ❯ src/pages/HomePage.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts [queued]  Test Files 27 failed | 113 passed (242)  Tests 28 failed | 2718 passed | 290 skipped (3036)  Start at 07:51:47  Duration 242.64s [?2026l[?2026h  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts [queued]  Test Files 27 failed | 113 passed (242)  Tests 28 failed | 2718 passed | 290 skipped (3036)  Start at 07:51:47  Duration 243.17s [?2026l[?2026h  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts [queued]  ❯ src/utils/checksum.test.ts [queued]  Test Files 27 failed | 113 passed (242)  Tests 28 failed | 2718 passed | 290 skipped (3036)  Start at 07:51:47  Duration 244.03s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts [queued]  ❯ src/utils/checksum.test.ts [queued]  Test Files 27 failed | 113 passed (242)  Tests 28 failed | 2718 passed | 290 skipped (3036)  Start at 07:51:47  Duration 244.25s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts 0/18  ❯ src/tests/integration/flyer.integration.test.ts [queued]  ❯ src/utils/checksum.test.ts [queued]  Test Files 27 failed | 113 passed (242)  Tests 28 failed | 2718 passed | 290 skipped (3054)  Start at 07:51:47  Duration 244.87s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx [queued]  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts 0/18  ❯ src/tests/integration/flyer.integration.test.ts [queued]  ❯ src/utils/checksum.test.ts [queued]  Test Files 27 failed | 113 passed (242)  Tests 28 failed | 2718 passed | 290 skipped (3054)  Start at 07:51:47  Duration 245.08s [?2026l[?2026h ✓ src/schemas/flyer.schemas.test.ts (18 tests) 51ms  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx 0/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts 18/18  ❯ src/tests/integration/flyer.integration.test.ts [queued]  ❯ src/utils/checksum.test.ts [queued]  Test Files 27 failed | 114 passed (242)  Tests 28 failed | 2736 passed | 290 skipped (3059)  Start at 07:51:47  Duration 245.57s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx 0/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts 18/18  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/checksum.test.ts 1/8  Test Files 27 failed | 114 passed (242)  Tests 28 failed | 2737 passed | 290 skipped (3071)  Start at 07:51:47  Duration 245.93s [?2026l[?2026h ✓ src/utils/checksum.test.ts (8 tests) 119ms  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx [queued]  ❯ src/pages/HomePage.test.tsx 0/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/schemas/flyer.schemas.test.ts 18/18  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/checksum.test.ts 8/8  Test Files 27 failed | 115 passed (242)  Tests 28 failed | 2744 passed | 290 skipped (3071)  Start at 07:51:47  Duration 246.10s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 0/8  ❯ src/pages/HomePage.test.tsx 0/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/checksum.test.ts 8/8  Test Files 27 failed | 115 passed (242)  Tests 28 failed | 2744 passed | 290 skipped (3079)  Start at 07:51:47  Duration 246.61s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 0/8  ❯ src/pages/HomePage.test.tsx 1/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/checksum.test.ts 8/8  Test Files 27 failed | 115 passed (242)  Tests 28 failed | 2745 passed | 290 skipped (3079)  Start at 07:51:47  Duration 246.72s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 0/8  ❯ src/pages/HomePage.test.tsx 3/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/checksum.test.ts 8/8  Test Files 27 failed | 115 passed (242)  Tests 28 failed | 2747 passed | 290 skipped (3079)  Start at 07:51:47  Duration 246.82s [?2026l[?2026h ✓ src/pages/HomePage.test.tsx (5 tests) 1308ms ✓ should render the welcome message when no flyer is selected  1097ms  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 2/8  ❯ src/pages/HomePage.test.tsx 5/5  ❯ src/routes/admin.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 116 passed (242)  Tests 28 failed | 2751 passed | 290 skipped (3079)  Start at 07:51:47  Duration 247.03s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 4/8  ❯ src/pages/HomePage.test.tsx 5/5  ❯ src/routes/admin.routes.test.ts 0/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 116 passed (242)  Tests 28 failed | 2753 passed | 290 skipped (3083)  Start at 07:51:47  Duration 247.14s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx [queued]  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 7/8  ❯ src/pages/HomePage.test.tsx 5/5  ❯ src/routes/admin.routes.test.ts 0/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 116 passed (242)  Tests 28 failed | 2756 passed | 290 skipped (3083)  Start at 07:51:47  Duration 247.34s [?2026l[?2026h ✓ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx (8 tests) 738ms  ❯ src/components/Leaderboard.test.tsx 0/7  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 8/8  ❯ src/pages/HomePage.test.tsx 5/5  ❯ src/routes/admin.routes.test.ts 0/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 117 passed (242)  Tests 28 failed | 2757 passed | 290 skipped (3090)  Start at 07:51:47  Duration 247.46s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx 0/7  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 8/8  ❯ src/pages/HomePage.test.tsx 5/5  ❯ src/routes/admin.routes.test.ts 1/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 117 passed (242)  Tests 28 failed | 2758 passed | 290 skipped (3090)  Start at 07:51:47  Duration 247.67s [?2026l[?2026hstdout | src/routes/admin.routes.test.ts > Admin Routes Rate Limiting > POST /system/clear-cache > should return 500 if cache clear fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/Leaderboard.test.tsx 0/7  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 8/8  ❯ src/routes/admin.routes.test.ts 2/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 117 passed (242)  Tests 28 failed | 2759 passed | 290 skipped (3090)  Start at 07:51:47  Duration 248.07s [?2026l[?2026hstderr | src/routes/admin.routes.test.ts > Admin Routes Rate Limiting > POST /system/clear-cache > should return 500 if cache clear fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Redis connection failed at /app/src/routes/admin.routes.test.ts:168:26 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/Leaderboard.test.tsx 0/7  ❯ src/hooks/mutations/useAddShoppingListItemMutation.test.tsx 8/8  ❯ src/routes/admin.routes.test.ts 2/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 117 passed (242)  Tests 28 failed | 2759 passed | 290 skipped (3090)  Start at 07:51:47  Duration 248.07s [?2026l[?2026h ✓ src/routes/admin.routes.test.ts (4 tests) 996ms ✓ should block requests to /trigger/daily-deal-check after exceeding limit  568ms ✓ should block requests to /brands/:id/logo after exceeding limit  358ms  ❯ src/components/Leaderboard.test.tsx 1/7  ❯ src/routes/admin.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 118 passed (242)  Tests 28 failed | 2762 passed | 290 skipped (3090)  Start at 07:51:47  Duration 248.78s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx 2/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/worker.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 118 passed (242)  Tests 28 failed | 2763 passed | 290 skipped (3090)  Start at 07:51:47  Duration 248.99s [?2026l[?2026h  ❯ src/components/Leaderboard.test.tsx 3/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/worker.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 118 passed (242)  Tests 28 failed | 2764 passed | 290 skipped (3090)  Start at 07:51:47  Duration 249.84s [?2026l[?2026h ✓ src/components/Leaderboard.test.tsx (7 tests) 1954ms ✓ should display a loading message initially  340ms ✓ should display a generic error for unknown error types  856ms ✓ should render the leaderboard with user data on successful fetch  486ms  ❯ src/components/Leaderboard.test.tsx 7/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/worker.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3090)  Start at 07:51:47  Duration 250.05s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/worker.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3090)  Start at 07:51:47  Duration 250.64s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/worker.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3090)  Start at 07:51:47  Duration 251.21s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3090)  Start at 07:51:47  Duration 251.79s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts 0/7  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3097)  Start at 07:51:47  Duration 252.02s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts 0/7  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3097)  Start at 07:51:47  Duration 252.30s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts 0/7  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2768 passed | 290 skipped (3097)  Start at 07:51:47  Duration 252.44s [?2026l[?2026hstdout | src/services/worker.test.ts > Worker Entry Point > Error Handling > should log unhandled promise rejections Handled expected test rejection to prevent test runner error: Promise rejected  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts 1/7  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 119 passed (242)  Tests 28 failed | 2769 passed | 290 skipped (3097)  Start at 07:51:47  Duration 253.14s [?2026l[?2026h ✓ src/services/worker.test.ts (7 tests) 591ms ✓ should log initialization messages on import  525ms  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts 1/8  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts 7/7  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts [queued]  Test Files 27 failed | 120 passed (242)  Tests 28 failed | 2776 passed | 290 skipped (3105)  Start at 07:51:47  Duration 253.26s [?2026l[?2026h ✓ src/services/db/conversion.db.test.ts (8 tests) 65ms stdout | src/utils/imageProcessor.test.ts > generateFlyerIcon > should process the image and return the correct icon filename [DEBUG] generateFlyerIcon returning: icon-flyer-image-1.webp stdout | src/utils/imageProcessor.test.ts > processAndSaveImage > should process the image, strip metadata, and return the new filename [DEBUG] processAndSaveImage returning: original-1768809360882.jpg  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/conversion.db.test.ts 8/8  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/services/worker.test.ts 7/7  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts 1/4  Test Files 27 failed | 121 passed (242)  Tests 28 failed | 2784 passed | 290 skipped (3109)  Start at 07:51:47  Duration 253.57s [?2026l[?2026h ✓ src/utils/imageProcessor.test.ts (4 tests) 99ms  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 0/4  ❯ src/utils/imageProcessor.test.ts 4/4  Test Files 27 failed | 122 passed (242)  Tests 28 failed | 2787 passed | 290 skipped (3109)  Start at 07:51:47  Duration 254.08s [?2026l[?2026h ✓ src/services/flyerPersistenceService.server.test.ts (3 tests) 65ms  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts 3/3  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 123 passed (242)  Tests 28 failed | 2790 passed | 290 skipped (3112)  Start at 07:51:47  Duration 254.99s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts 3/3  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 123 passed (242)  Tests 28 failed | 2790 passed | 290 skipped (3112)  Start at 07:51:47  Duration 255.29s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx 0/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/flyerPersistenceService.server.test.ts 3/3  ❯ src/tests/integration/flyer.integration.test.ts 0/4  Test Files 27 failed | 123 passed (242)  Tests 28 failed | 2790 passed | 290 skipped (3118)  Start at 07:51:47  Duration 255.90s [?2026l[?2026h ❯ src/tests/integration/flyer.integration.test.ts (4 tests | 4 skipped) 10329ms ↓ should return a list of flyers ↓ should return items for a specific flyer ↓ should return items for multiple flyer IDs ↓ should return the total count of items for multiple flyer IDs  ❯ src/pages/admin/FlyerReviewPage.test.tsx 0/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/flyer.integration.test.ts 4/4  Test Files 28 failed | 123 passed (242)  Tests 28 failed | 2790 passed | 294 skipped (3118)  Start at 07:51:47  Duration 256.31s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx 0/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 123 passed (242)  Tests 28 failed | 2790 passed | 294 skipped (3118)  Start at 07:51:47  Duration 257.32s [?2026l[?2026h  ❯ src/pages/admin/FlyerReviewPage.test.tsx 1/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 123 passed (242)  Tests 28 failed | 2791 passed | 294 skipped (3118)  Start at 07:51:47  Duration 257.52s [?2026l[?2026h  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/pages/admin/FlyerReviewPage.test.tsx 1/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 123 passed (242)  Tests 28 failed | 2791 passed | 294 skipped (3118)  Start at 07:51:47  Duration 257.62s [?2026l[?2026h  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/pages/admin/FlyerReviewPage.test.tsx 2/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 123 passed (242)  Tests 28 failed | 2792 passed | 294 skipped (3118)  Start at 07:51:47  Duration 257.72s [?2026l[?2026h  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/pages/admin/FlyerReviewPage.test.tsx 2/6  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 123 passed (242)  Tests 28 failed | 2792 passed | 294 skipped (3118)  Start at 07:51:47  Duration 258.97s [?2026l[?2026h ✓ src/pages/admin/FlyerReviewPage.test.tsx (6 tests) 2523ms ✓ renders loading spinner initially  1206ms ✓ renders empty state when no flyers are returned  401ms ✓ renders a list of flyers when API returns data  595ms  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/logger.client.test.ts [queued]  Test Files 28 failed | 124 passed (242)  Tests 28 failed | 2796 passed | 294 skipped (3118)  Start at 07:51:47  Duration 259.07s [?2026l[?2026h  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts [queued]  ❯ src/services/logger.client.test.ts [queued]  Test Files 28 failed | 124 passed (242)  Tests 28 failed | 2796 passed | 294 skipped (3118)  Start at 07:51:47  Duration 259.71s [?2026l[?2026h  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts [queued]  ❯ src/services/logger.client.test.ts [queued]  Test Files 28 failed | 124 passed (242)  Tests 28 failed | 2796 passed | 294 skipped (3118)  Start at 07:51:47  Duration 260.23s [?2026l[?2026h  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts [queued]  ❯ src/services/logger.client.test.ts [queued]  Test Files 28 failed | 124 passed (242)  Tests 28 failed | 2796 passed | 294 skipped (3118)  Start at 07:51:47  Duration 260.47s [?2026l[?2026hstdout | src/services/logger.client.test.ts Logger implementation: { info: [Function: info], warn: [Function: warn], error: [Function: error], debug: [Function: debug] }  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts [queued]  ❯ src/services/logger.client.test.ts 0/12  Test Files 28 failed | 124 passed (242)  Tests 28 failed | 2796 passed | 294 skipped (3130)  Start at 07:51:47  Duration 260.88s [?2026l[?2026h ✓ src/services/logger.client.test.ts (12 tests) 56ms  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts [queued]  ❯ src/services/logger.client.test.ts 12/12  Test Files 28 failed | 125 passed (242)  Tests 28 failed | 2808 passed | 294 skipped (3130)  Start at 07:51:47  Duration 261.15s [?2026l[?2026h  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 1/7  ❯ src/services/logger.client.test.ts 12/12  Test Files 28 failed | 125 passed (242)  Tests 28 failed | 2809 passed | 294 skipped (3137)  Start at 07:51:47  Duration 261.46s [?2026l[?2026h ✓ src/services/db/address.db.test.ts (7 tests) 64ms  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 1/7  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  ❯ src/services/logger.client.test.ts 12/12  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2816 passed | 294 skipped (3144)  Start at 07:51:47  Duration 261.70s [?2026l[?2026h  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 2/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2817 passed | 294 skipped (3144)  Start at 07:51:47  Duration 261.80s [?2026l[?2026hstdout | src/routes/personalization.routes.test.ts > Personalization Routes (/api/personalization) > GET /master-items > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 3/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts 1/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2819 passed | 294 skipped (3151)  Start at 07:51:47  Duration 262.02s [?2026l[?2026hstderr | src/routes/personalization.routes.test.ts > Personalization Routes (/api/personalization) > GET /master-items > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/personalization.routes.test.ts:55:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 3/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts 1/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2819 passed | 294 skipped (3151)  Start at 07:51:47  Duration 262.02s [?2026l[?2026hstdout | src/routes/personalization.routes.test.ts > Personalization Routes (/api/personalization) > GET /dietary-restrictions > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 3/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts 1/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2819 passed | 294 skipped (3151)  Start at 07:51:47  Duration 262.02s [?2026l[?2026hstderr | src/routes/personalization.routes.test.ts > Personalization Routes (/api/personalization) > GET /dietary-restrictions > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/personalization.routes.test.ts:81:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 3/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts 1/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2819 passed | 294 skipped (3151)  Start at 07:51:47  Duration 262.02s [?2026l[?2026hstdout | src/routes/personalization.routes.test.ts > Personalization Routes (/api/personalization) > GET /appliances > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 3/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts 1/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2819 passed | 294 skipped (3151)  Start at 07:51:47  Duration 262.02s [?2026l[?2026hstderr | src/routes/personalization.routes.test.ts > Personalization Routes (/api/personalization) > GET /appliances > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/personalization.routes.test.ts:105:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 3/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts [queued]  ❯ src/routes/personalization.routes.test.ts 1/7  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/address.db.test.ts 7/7  Test Files 28 failed | 126 passed (242)  Tests 28 failed | 2819 passed | 294 skipped (3151)  Start at 07:51:47  Duration 262.02s [?2026l[?2026h ✓ src/routes/personalization.routes.test.ts (7 tests) 222ms ✓ src/hooks/queries/useFlyerItemsQuery.test.tsx (7 tests) 563ms  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 0/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 0/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 128 passed (242)  Tests 28 failed | 2829 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.53s [?2026l[?2026h  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 2/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 1/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 128 passed (242)  Tests 28 failed | 2832 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.64s [?2026l[?2026hstdout | src/routes/admin.stats.routes.test.ts > Admin Stats Routes (/api/admin/stats) > GET /stats > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 4/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 129 passed (242)  Tests 28 failed | 2837 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.84s [?2026l[?2026hstderr | src/routes/admin.stats.routes.test.ts > Admin Stats Routes (/api/admin/stats) > GET /stats > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.stats.routes.test.ts:119:66 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 4/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 129 passed (242)  Tests 28 failed | 2837 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.84s [?2026l[?2026hstdout | src/routes/admin.stats.routes.test.ts > Admin Stats Routes (/api/admin/stats) > GET /stats/daily > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 4/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 129 passed (242)  Tests 28 failed | 2837 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.84s [?2026l[?2026hstderr | src/routes/admin.stats.routes.test.ts > Admin Stats Routes (/api/admin/stats) > GET /stats/daily > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/admin.stats.routes.test.ts:139:73 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 4/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 129 passed (242)  Tests 28 failed | 2837 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.84s [?2026l[?2026h ✓ src/routes/admin.stats.routes.test.ts (4 tests) 181ms  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 4/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 129 passed (242)  Tests 28 failed | 2837 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.84s [?2026l[?2026h  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 5/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts [queued]  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/personalization.routes.test.ts 7/7  ❯ src/routes/store.routes.test.ts [queued]  Test Files 28 failed | 129 passed (242)  Tests 28 failed | 2838 passed | 294 skipped (3162)  Start at 07:51:47  Duration 262.94s [?2026l[?2026h ✓ src/hooks/mutations/useAddWatchedItemMutation.test.tsx (7 tests) 597ms  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 7/7  ❯ src/hooks/queries/useFlyerItemsQuery.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts 0/8  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  Test Files 28 failed | 130 passed (242)  Tests 28 failed | 2840 passed | 294 skipped (3170)  Start at 07:51:47  Duration 263.16s [?2026l[?2026h  ❯ src/hooks/mutations/useAddWatchedItemMutation.test.tsx 7/7  ❯ src/hooks/useDragAndDrop.test.ts 1/8  ❯ src/routes/admin.stats.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  Test Files 28 failed | 130 passed (242)  Tests 28 failed | 2841 passed | 294 skipped (3170)  Start at 07:51:47  Duration 263.76s [?2026l[?2026h  ❯ src/hooks/useDragAndDrop.test.ts 2/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queues.server.test.ts [queued]  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  Test Files 28 failed | 130 passed (242)  Tests 28 failed | 2842 passed | 294 skipped (3170)  Start at 07:51:47  Duration 263.86s [?2026l[?2026h ✓ src/hooks/useDragAndDrop.test.ts (8 tests) 212ms  ❯ src/hooks/useDragAndDrop.test.ts 8/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queues.server.test.ts [queued]  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  Test Files 28 failed | 131 passed (242)  Tests 28 failed | 2848 passed | 294 skipped (3170)  Start at 07:51:47  Duration 264.60s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queues.server.test.ts [queued]  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  ❯ src/utils/serverUtils.test.ts [queued]  Test Files 28 failed | 131 passed (242)  Tests 28 failed | 2848 passed | 294 skipped (3170)  Start at 07:51:47  Duration 265.43s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queues.server.test.ts 0/10  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  ❯ src/utils/serverUtils.test.ts [queued]  Test Files 28 failed | 131 passed (242)  Tests 28 failed | 2848 passed | 294 skipped (3180)  Start at 07:51:47  Duration 265.57s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queues.server.test.ts 0/10  ❯ src/tests/e2e/flyer-upload.e2e.test.ts [queued]  ❯ src/utils/serverUtils.test.ts [queued]  Test Files 28 failed | 131 passed (242)  Tests 28 failed | 2848 passed | 294 skipped (3180)  Start at 07:51:47  Duration 266.11s [?2026l[?2026h ✓ src/services/queues.server.test.ts (10 tests) 580ms ✓ should create flyerQueue with the correct name and options  510ms  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queues.server.test.ts 10/10  ❯ src/tests/e2e/flyer-upload.e2e.test.ts 0/1  ❯ src/utils/serverUtils.test.ts [queued]  Test Files 28 failed | 132 passed (242)  Tests 28 failed | 2858 passed | 294 skipped (3181)  Start at 07:51:47  Duration 267.13s [?2026l[?2026h ❯ src/tests/e2e/flyer-upload.e2e.test.ts (1 test | 1 failed) 209ms  × should allow a user to upload a flyer and wait for processing to complete 201ms  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/serverUtils.test.ts 0/8  Test Files 29 failed | 132 passed (242)  Tests 29 failed | 2858 passed | 294 skipped (3189)  Start at 07:51:47  Duration 267.26s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/serverUtils.test.ts 1/8  Test Files 29 failed | 132 passed (242)  Tests 29 failed | 2859 passed | 294 skipped (3189)  Start at 07:51:47  Duration 267.37s [?2026l[?2026h ✓ src/utils/serverUtils.test.ts (8 tests) 76ms  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/serverUtils.test.ts 8/8  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3189)  Start at 07:51:47  Duration 268.15s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3189)  Start at 07:51:47  Duration 269.42s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts [queued]  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3189)  Start at 07:51:47  Duration 269.79s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx [queued]  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts [queued]  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3189)  Start at 07:51:47  Duration 270.50s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts [queued]  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3192)  Start at 07:51:47  Duration 270.69s [?2026l[?2026h  ❯ src/components/Header.test.tsx [queued]  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts [queued]  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3192)  Start at 07:51:47  Duration 271.46s [?2026l[?2026h  ❯ src/components/Header.test.tsx 0/12  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts [queued]  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3204)  Start at 07:51:47  Duration 271.59s [?2026l[?2026h  ❯ src/components/Header.test.tsx 0/12  ❯ src/components/PasswordStrengthIndicator.test.tsx [queued]  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts 0/4  Test Files 29 failed | 133 passed (242)  Tests 29 failed | 2866 passed | 294 skipped (3208)  Start at 07:51:47  Duration 272.04s [?2026l[?2026h ✓ src/services/notificationService.test.ts (4 tests) 62ms  ❯ src/components/Header.test.tsx 0/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 0/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 0/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts 4/4  ❯ src/services/queueService.test.ts [queued]  Test Files 29 failed | 134 passed (242)  Tests 29 failed | 2870 passed | 294 skipped (3223)  Start at 07:51:47  Duration 272.68s [?2026l[?2026hstdout | src/routes/deals.routes.test.ts > Deals Routes (/api/users/deals) > GET /best-watched-prices > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/Header.test.tsx 3/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts 4/4  ❯ src/services/queueService.test.ts [queued]  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2888 passed | 294 skipped (3223)  Start at 07:51:47  Duration 272.88s [?2026l[?2026hstderr | src/routes/deals.routes.test.ts > Deals Routes (/api/users/deals) > GET /best-watched-prices > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/deals.routes.test.ts:98:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/Header.test.tsx 3/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts 4/4  ❯ src/services/queueService.test.ts [queued]  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2888 passed | 294 skipped (3223)  Start at 07:51:47  Duration 272.88s [?2026l[?2026h ✓ src/routes/deals.routes.test.ts (4 tests) 179ms ✓ src/components/PasswordStrengthIndicator.test.tsx (11 tests) 605ms  ❯ src/components/Header.test.tsx 3/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/notificationService.test.ts 4/4  ❯ src/services/queueService.test.ts [queued]  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2888 passed | 294 skipped (3223)  Start at 07:51:47  Duration 272.88s [?2026l[?2026h  ❯ src/components/Header.test.tsx 4/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts [queued]  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2889 passed | 294 skipped (3223)  Start at 07:51:47  Duration 273.11s [?2026l[?2026h  ❯ src/components/Header.test.tsx 5/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts [queued]  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2890 passed | 294 skipped (3223)  Start at 07:51:47  Duration 273.21s [?2026l[?2026h  ❯ src/components/Header.test.tsx 6/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 0/4  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2891 passed | 294 skipped (3227)  Start at 07:51:47  Duration 273.53s [?2026l[?2026h  ❯ src/components/Header.test.tsx 6/12  ❯ src/components/PasswordStrengthIndicator.test.tsx 11/11  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/deals.routes.test.ts 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 0/4  Test Files 29 failed | 136 passed (242)  Tests 29 failed | 2891 passed | 294 skipped (3227)  Start at 07:51:47  Duration 273.69s [?2026l[?2026h ✓ src/services/queueService.test.ts (4 tests) 204ms  ❯ src/components/Header.test.tsx 12/12  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx [queued]  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 4/4  Test Files 29 failed | 137 passed (242)  Tests 29 failed | 2901 passed | 294 skipped (3227)  Start at 07:51:47  Duration 273.79s [?2026l[?2026h ✓ src/components/Header.test.tsx (12 tests) 2102ms ✓ should render the application title  752ms ✓ should call onSignOut when Logout button is clicked  312ms  ❯ src/components/Header.test.tsx 12/12  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx 0/6  ❯ src/hooks/useFlyerUploader.test.tsx 0/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 4/4  Test Files 29 failed | 138 passed (242)  Tests 29 failed | 2901 passed | 294 skipped (3233)  Start at 07:51:47  Duration 273.99s [?2026l[?2026h ✓ src/hooks/useFlyerUploader.test.tsx (3 tests) 3323ms ✓ should handle a successful upload and polling flow  3162ms  ❯ src/components/Header.test.tsx 12/12  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx 1/6  ❯ src/hooks/useFlyerUploader.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 4/4  Test Files 29 failed | 139 passed (242)  Tests 29 failed | 2905 passed | 294 skipped (3233)  Start at 07:51:47  Duration 274.30s [?2026l[?2026h  ❯ src/components/Header.test.tsx 12/12  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx 3/6  ❯ src/hooks/useFlyerUploader.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 4/4  Test Files 29 failed | 139 passed (242)  Tests 29 failed | 2907 passed | 294 skipped (3233)  Start at 07:51:47  Duration 274.50s [?2026l[?2026h  ❯ src/components/Header.test.tsx 12/12  ❯ src/hooks/mutations/useCreateShoppingListMutation.test.tsx 5/6  ❯ src/hooks/useFlyerUploader.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/queueService.test.ts 4/4  Test Files 29 failed | 139 passed (242)  Tests 29 failed | 2909 passed | 294 skipped (3233)  Start at 07:51:47  Duration 274.60s [?2026l[?2026h ✓ src/hooks/mutations/useCreateShoppingListMutation.test.tsx (6 tests) 567ms  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 275.66s [?2026l[?2026h  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 276.60s [?2026l[?2026h  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 278.45s [?2026l[?2026h  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 278.66s [?2026l[?2026h  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 278.81s [?2026l[?2026h  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 280.24s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/audioUtils.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 280.42s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts [queued]  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts [queued]  ❯ src/utils/audioUtils.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 282.21s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts [queued]  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts [queued]  ❯ src/utils/audioUtils.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3233)  Start at 07:51:47  Duration 283.18s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts 0/6  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts [queued]  ❯ src/utils/audioUtils.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2910 passed | 294 skipped (3239)  Start at 07:51:47  Duration 283.69s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts 1/6  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts [queued]  ❯ src/utils/audioUtils.test.ts [queued]  Test Files 29 failed | 140 passed (242)  Tests 29 failed | 2911 passed | 294 skipped (3239)  Start at 07:51:47  Duration 284.02s [?2026l[?2026h ✓ src/hooks/useDebounce.test.ts (6 tests) 200ms  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts [queued]  ❯ src/utils/audioUtils.test.ts 0/7  Test Files 29 failed | 141 passed (242)  Tests 29 failed | 2916 passed | 294 skipped (3246)  Start at 07:51:47  Duration 284.12s [?2026l[?2026h ✓ src/utils/audioUtils.test.ts (7 tests) 41ms  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx 0/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts 1/5  ❯ src/utils/audioUtils.test.ts 7/7  Test Files 29 failed | 142 passed (242)  Tests 29 failed | 2924 passed | 294 skipped (3257)  Start at 07:51:47  Duration 284.23s [?2026l[?2026h ✓ src/services/googleGeocodingService.server.test.ts (5 tests) 48ms  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx 1/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx [queued]  ❯ src/hooks/useDebounce.test.ts 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts 5/5  ❯ src/utils/audioUtils.test.ts 7/7  Test Files 29 failed | 143 passed (242)  Tests 29 failed | 2929 passed | 294 skipped (3257)  Start at 07:51:47  Duration 284.44s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx 3/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx 0/6  ❯ src/hooks/useDebounce.test.ts 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts 5/5  ❯ src/utils/audioUtils.test.ts 7/7  Test Files 29 failed | 143 passed (242)  Tests 29 failed | 2931 passed | 294 skipped (3263)  Start at 07:51:47  Duration 284.55s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx 4/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx 0/6  ❯ src/hooks/useDebounce.test.ts 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts 5/5  ❯ src/utils/audioUtils.test.ts 7/7  Test Files 29 failed | 143 passed (242)  Tests 29 failed | 2932 passed | 294 skipped (3269)  Start at 07:51:47  Duration 284.75s [?2026l[?2026h ✓ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx (6 tests) 532ms  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx [queued]  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx 6/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx 1/6  ❯ src/pages/admin/components/AddressForm.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts 5/5  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts [queued]  ❯ src/utils/audioUtils.test.ts 7/7  Test Files 29 failed | 144 passed (242)  Tests 29 failed | 2935 passed | 294 skipped (3269)  Start at 07:51:47  Duration 284.85s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx 0/6  ❯ src/hooks/mutations/useRemoveShoppingListItemMutation.test.tsx 6/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx 3/6  ❯ src/pages/admin/components/AddressForm.test.tsx 0/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/googleGeocodingService.server.test.ts 5/5  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts [queued]  Test Files 29 failed | 144 passed (242)  Tests 29 failed | 2937 passed | 294 skipped (3275)  Start at 07:51:47  Duration 284.95s [?2026l[?2026h ✓ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx (6 tests) 504ms ✓ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx (6 tests) 490ms  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx 6/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx 1/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts [queued]  Test Files 29 failed | 146 passed (242)  Tests 29 failed | 2947 passed | 294 skipped (3275)  Start at 07:51:47  Duration 286.27s [?2026l[?2026h  ❯ src/hooks/mutations/useDeleteShoppingListMutation.test.tsx 6/6  ❯ src/hooks/mutations/useRemoveWatchedItemMutation.test.tsx 6/6  ❯ src/pages/admin/components/AddressForm.test.tsx 1/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts [queued]  Test Files 29 failed | 146 passed (242)  Tests 29 failed | 2947 passed | 294 skipped (3275)  Start at 07:51:47  Duration 286.47s [?2026l[?2026h  ❯ src/pages/admin/components/AddressForm.test.tsx 3/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts [queued]  Test Files 29 failed | 146 passed (242)  Tests 29 failed | 2949 passed | 294 skipped (3275)  Start at 07:51:47  Duration 286.92s [?2026l[?2026h  ❯ src/pages/admin/components/AddressForm.test.tsx 4/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts [queued]  Test Files 29 failed | 146 passed (242)  Tests 29 failed | 2950 passed | 294 skipped (3275)  Start at 07:51:47  Duration 287.32s [?2026l[?2026h ✓ src/pages/admin/components/AddressForm.test.tsx (6 tests) 2685ms ✓ should render all address fields correctly  1437ms ✓ should call onGeocode when the "Re-Geocode" button is clicked  379ms ✓ should disable the button and show a loading spinner  347ms  ❯ src/pages/admin/components/AddressForm.test.tsx 6/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts 0/1  Test Files 29 failed | 147 passed (242)  Tests 29 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 287.62s [?2026l[?2026h  ❯ src/pages/admin/components/AddressForm.test.tsx 6/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts 1/1  Test Files 29 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 287.94s [?2026l[?2026h ❯ src/tests/e2e/admin-dashboard.e2e.test.ts (1 test | 1 failed) 361ms  × should allow an admin to log in and access dashboard features 338ms  ❯ src/hooks/queries/useFlyersQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts 1/1  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 288.85s [?2026l[?2026h  ❯ src/hooks/queries/useFlyersQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts [queued]  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 288.99s [?2026l[?2026h  ❯ src/hooks/queries/useFlyersQuery.test.tsx [queued]  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts [queued]  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 290.60s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx [queued]  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts [queued]  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 290.71s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx [queued]  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts [queued]  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 291.61s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx [queued]  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts [queued]  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3276)  Start at 07:51:47  Duration 292.58s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx 0/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts [queued]  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2952 passed | 294 skipped (3282)  Start at 07:51:47  Duration 293.39s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx 1/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 0/1  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2953 passed | 294 skipped (3283)  Start at 07:51:47  Duration 293.62s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx 2/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 0/1  Test Files 30 failed | 147 passed (242)  Tests 30 failed | 2954 passed | 294 skipped (3283)  Start at 07:51:47  Duration 293.74s [?2026l[?2026h ❯ src/tests/e2e/user-journey.e2e.test.ts (1 test | 1 failed) 338ms  × should complete a full user lifecycle: Register -> Login -> Manage List -> Delete Account 321ms  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx 3/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx [queued]  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx [queued]  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 1/1  Test Files 31 failed | 147 passed (242)  Tests 31 failed | 2955 passed | 294 skipped (3283)  Start at 07:51:47  Duration 293.98s [?2026l[?2026h ✓ src/hooks/queries/useFlyersQuery.test.tsx (6 tests) 615ms  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 0/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 0/6  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 1/1  Test Files 31 failed | 148 passed (242)  Tests 31 failed | 2958 passed | 294 skipped (3295)  Start at 07:51:47  Duration 294.09s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx [queued]  ❯ src/hooks/queries/useFlyersQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 1/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 0/6  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 1/1  Test Files 31 failed | 148 passed (242)  Tests 31 failed | 2959 passed | 294 skipped (3295)  Start at 07:51:47  Duration 294.24s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 0/6  ❯ src/hooks/queries/useFlyersQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 2/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 2/6  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 1/1  Test Files 31 failed | 148 passed (242)  Tests 31 failed | 2962 passed | 294 skipped (3301)  Start at 07:51:47  Duration 294.44s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 0/6  ❯ src/hooks/queries/useFlyersQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 4/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 4/6  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 1/1  Test Files 31 failed | 148 passed (242)  Tests 31 failed | 2966 passed | 294 skipped (3301)  Start at 07:51:47  Duration 294.54s [?2026l[?2026h ✓ src/hooks/queries/useShoppingListsQuery.test.tsx (6 tests) 587ms ✓ src/hooks/queries/useWatchedItemsQuery.test.tsx (6 tests) 576ms  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 1/6  ❯ src/hooks/queries/useFlyersQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 6/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 6/6  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/user-journey.e2e.test.ts 1/1  Test Files 31 failed | 150 passed (242)  Tests 31 failed | 2971 passed | 294 skipped (3301)  Start at 07:51:47  Duration 294.84s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 6/6  ❯ src/hooks/queries/useFlyersQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 6/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 6/6  ❯ src/pages/MyDealsPage.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 150 passed (242)  Tests 31 failed | 2976 passed | 294 skipped (3301)  Start at 07:51:47  Duration 294.94s [?2026l[?2026h ✓ src/hooks/queries/useActivityLogQuery.test.tsx (6 tests) 619ms  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 6/6  ❯ src/hooks/queries/useShoppingListsQuery.test.tsx 6/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 6/6  ❯ src/pages/MyDealsPage.test.tsx 0/6  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 151 passed (242)  Tests 31 failed | 2976 passed | 294 skipped (3307)  Start at 07:51:47  Duration 295.18s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 6/6  ❯ src/hooks/queries/useWatchedItemsQuery.test.tsx 6/6  ❯ src/pages/MyDealsPage.test.tsx 1/6  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 151 passed (242)  Tests 31 failed | 2977 passed | 294 skipped (3307)  Start at 07:51:47  Duration 295.59s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 6/6  ❯ src/pages/MyDealsPage.test.tsx 2/6  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 151 passed (242)  Tests 31 failed | 2978 passed | 294 skipped (3307)  Start at 07:51:47  Duration 295.80s [?2026l[?2026h  ❯ src/hooks/queries/useActivityLogQuery.test.tsx 6/6  ❯ src/pages/MyDealsPage.test.tsx 3/6  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 151 passed (242)  Tests 31 failed | 2979 passed | 294 skipped (3307)  Start at 07:51:47  Duration 295.90s [?2026l[?2026h ✓ src/pages/MyDealsPage.test.tsx (6 tests) 674ms  ❯ src/pages/MyDealsPage.test.tsx 6/6  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2982 passed | 294 skipped (3307)  Start at 07:51:47  Duration 296.83s [?2026l[?2026h  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2982 passed | 294 skipped (3307)  Start at 07:51:47  Duration 297.85s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2982 passed | 294 skipped (3307)  Start at 07:51:47  Duration 297.95s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2982 passed | 294 skipped (3307)  Start at 07:51:47  Duration 299.01s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2982 passed | 294 skipped (3307)  Start at 07:51:47  Duration 299.16s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts 0/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2982 passed | 294 skipped (3309)  Start at 07:51:47  Duration 299.71s [?2026l[?2026hstdout | src/routes/admin.system.routes.test.ts > Admin System Routes (/api/admin/system) > POST /system/clear-geocode-cache > should return 500 if clearing the cache fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts 1/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2983 passed | 294 skipped (3309)  Start at 07:51:47  Duration 301.63s [?2026l[?2026hstderr | src/routes/admin.system.routes.test.ts > Admin System Routes (/api/admin/system) > POST /system/clear-geocode-cache > should return 500 if clearing the cache fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: Redis is down at /app/src/routes/admin.system.routes.test.ts:117:71 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts 1/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts [queued]  Test Files 31 failed | 152 passed (242)  Tests 31 failed | 2983 passed | 294 skipped (3309)  Start at 07:51:47  Duration 301.63s [?2026l[?2026h ✓ src/routes/admin.system.routes.test.ts (2 tests) 238ms  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts 2/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts [queued]  Test Files 31 failed | 153 passed (242)  Tests 31 failed | 2984 passed | 294 skipped (3309)  Start at 07:51:47  Duration 302.29s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts 2/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts 0/8  Test Files 31 failed | 153 passed (242)  Tests 31 failed | 2984 passed | 294 skipped (3317)  Start at 07:51:47  Duration 302.85s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/admin.system.routes.test.ts 2/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts 1/8  Test Files 31 failed | 153 passed (242)  Tests 31 failed | 2985 passed | 294 skipped (3317)  Start at 07:51:47  Duration 302.97s [?2026l[?2026h ✓ src/services/tokenStorage.test.ts (8 tests) 52ms  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx [queued]  ❯ src/middleware/validation.middleware.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts 8/8  Test Files 31 failed | 154 passed (242)  Tests 31 failed | 2992 passed | 294 skipped (3317)  Start at 07:51:47  Duration 303.39s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx 0/6  ❯ src/middleware/validation.middleware.test.ts 0/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts 8/8  Test Files 31 failed | 154 passed (242)  Tests 31 failed | 2992 passed | 294 skipped (3326)  Start at 07:51:47  Duration 303.50s [?2026l[?2026h ✓ src/middleware/validation.middleware.test.ts (3 tests) 75ms  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts [queued]  ❯ src/hooks/useMasterItems.test.tsx [queued]  ❯ src/hooks/useModal.test.tsx 1/6  ❯ src/middleware/validation.middleware.test.ts 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/tokenStorage.test.ts 8/8  Test Files 31 failed | 155 passed (242)  Tests 31 failed | 2996 passed | 294 skipped (3326)  Start at 07:51:47  Duration 303.81s [?2026l[?2026h ✓ src/hooks/useModal.test.tsx (6 tests) 356ms  ❯ src/components/PasswordInput.test.tsx [queued]  ❯ src/hooks/useFlyerItems.test.ts 0/5  ❯ src/hooks/useMasterItems.test.tsx 0/4  ❯ src/hooks/useModal.test.tsx 6/6  ❯ src/middleware/validation.middleware.test.ts 3/3  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 156 passed (242)  Tests 31 failed | 3001 passed | 294 skipped (3335)  Start at 07:51:47  Duration 304.02s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx 0/9  ❯ src/hooks/useFlyerItems.test.ts 0/5  ❯ src/hooks/useMasterItems.test.tsx 1/4  ❯ src/hooks/useModal.test.tsx 6/6  ❯ src/middleware/validation.middleware.test.ts 3/3  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 156 passed (242)  Tests 31 failed | 3002 passed | 294 skipped (3344)  Start at 07:51:47  Duration 304.22s [?2026l[?2026h ✓ src/hooks/useMasterItems.test.tsx (4 tests) 236ms  ❯ src/components/PasswordInput.test.tsx 0/9  ❯ src/hooks/useFlyerItems.test.ts 1/5  ❯ src/hooks/useMasterItems.test.tsx 4/4  ❯ src/hooks/useModal.test.tsx 6/6  ❯ src/middleware/validation.middleware.test.ts 3/3  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 157 passed (242)  Tests 31 failed | 3006 passed | 294 skipped (3344)  Start at 07:51:47  Duration 304.33s [?2026l[?2026h ✓ src/hooks/useFlyerItems.test.ts (5 tests) 233ms  ❯ src/components/PasswordInput.test.tsx 0/9  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 158 passed (242)  Tests 31 failed | 3010 passed | 294 skipped (3344)  Start at 07:51:47  Duration 305.38s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx 1/9  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 158 passed (242)  Tests 31 failed | 3011 passed | 294 skipped (3344)  Start at 07:51:47  Duration 306.21s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx 2/9  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 158 passed (242)  Tests 31 failed | 3012 passed | 294 skipped (3344)  Start at 07:51:47  Duration 306.42s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx 3/9  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 158 passed (242)  Tests 31 failed | 3013 passed | 294 skipped (3344)  Start at 07:51:47  Duration 306.52s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx 5/9  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 158 passed (242)  Tests 31 failed | 3015 passed | 294 skipped (3344)  Start at 07:51:47  Duration 306.62s [?2026l[?2026h  ❯ src/components/PasswordInput.test.tsx 7/9  ❯ src/routes/store.routes.test.ts [queued]  Test Files 31 failed | 158 passed (242)  Tests 31 failed | 3017 passed | 294 skipped (3344)  Start at 07:51:47  Duration 306.73s [?2026l[?2026h ✓ src/components/PasswordInput.test.tsx (9 tests) 2688ms ✓ should render as a password input by default  421ms ✓ should toggle input type between password and text when the eye icon is clicked  1763ms  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3344)  Start at 07:51:47  Duration 307.90s [?2026l[?2026h  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3344)  Start at 07:51:47  Duration 309.19s [?2026l[?2026h  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3344)  Start at 07:51:47  Duration 309.29s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts [queued]  ❯ src/services/db/price.db.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3344)  Start at 07:51:47  Duration 310.33s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts [queued]  ❯ src/services/db/price.db.test.ts [queued]  ❯ src/services/nominatimGeocodingService.server.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3344)  Start at 07:51:47  Duration 310.99s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts [queued]  ❯ src/services/db/price.db.test.ts [queued]  ❯ src/services/nominatimGeocodingService.server.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3344)  Start at 07:51:47  Duration 311.28s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts [queued]  ❯ src/services/db/price.db.test.ts 0/6  ❯ src/services/nominatimGeocodingService.server.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts [queued]  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 31 failed | 159 passed (242)  Tests 31 failed | 3019 passed | 294 skipped (3350)  Start at 07:51:47  Duration 312.57s [?2026l[?2026h ❯ src/tests/integration/shopping-list.integration.test.ts (2 tests | 2 failed) 23ms  × should create and retrieve a shopping list for a user 15ms  × should not retrieve shopping lists belonging to another user 2ms ✓ src/services/db/price.db.test.ts (6 tests) 44ms  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts 0/1  ❯ src/services/db/price.db.test.ts 6/6  ❯ src/services/nominatimGeocodingService.server.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts 2/2  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 32 failed | 160 passed (242)  Tests 33 failed | 3025 passed | 294 skipped (3353)  Start at 07:51:47  Duration 312.78s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts 1/1  ❯ src/services/db/price.db.test.ts 6/6  ❯ src/services/nominatimGeocodingService.server.test.ts [queued]  ❯ src/tests/integration/shopping-list.integration.test.ts 2/2  ❯ src/utils/processingTimer.test.ts [queued]  Test Files 32 failed | 160 passed (242)  Tests 33 failed | 3026 passed | 294 skipped (3353)  Start at 07:51:47  Duration 312.93s [?2026l[?2026h ✓ src/services/db/index.db.test.ts (1 test) 16ms  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx [queued]  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts 1/1  ❯ src/services/db/price.db.test.ts 6/6  ❯ src/services/nominatimGeocodingService.server.test.ts 1/4  ❯ src/tests/integration/shopping-list.integration.test.ts 2/2  ❯ src/utils/processingTimer.test.ts 0/9  Test Files 32 failed | 161 passed (242)  Tests 33 failed | 3027 passed | 294 skipped (3366)  Start at 07:51:47  Duration 313.03s [?2026l[?2026h ✓ src/services/nominatimGeocodingService.server.test.ts (4 tests) 49ms ✓ src/utils/processingTimer.test.ts (9 tests) 112ms  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx 0/5  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts 1/1  ❯ src/services/db/price.db.test.ts 6/6  ❯ src/services/nominatimGeocodingService.server.test.ts 4/4  ❯ src/tests/integration/shopping-list.integration.test.ts 2/2  ❯ src/utils/processingTimer.test.ts 9/9  Test Files 32 failed | 163 passed (242)  Tests 33 failed | 3039 passed | 294 skipped (3371)  Start at 07:51:47  Duration 313.47s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx 0/5  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts 1/1  ❯ src/services/nominatimGeocodingService.server.test.ts 4/4  ❯ src/utils/processingTimer.test.ts 9/9  Test Files 32 failed | 163 passed (242)  Tests 33 failed | 3039 passed | 294 skipped (3376)  Start at 07:51:47  Duration 313.67s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx 2/5  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/index.db.test.ts 1/1  ❯ src/services/nominatimGeocodingService.server.test.ts 4/4  ❯ src/utils/processingTimer.test.ts 9/9  Test Files 32 failed | 163 passed (242)  Tests 33 failed | 3041 passed | 294 skipped (3376)  Start at 07:51:47  Duration 313.88s [?2026l[?2026h  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx 4/5  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/nominatimGeocodingService.server.test.ts 4/4  ❯ src/utils/processingTimer.test.ts 9/9  Test Files 32 failed | 163 passed (242)  Tests 33 failed | 3043 passed | 294 skipped (3376)  Start at 07:51:47  Duration 313.99s [?2026l[?2026h ✓ src/hooks/queries/useMasterItemsQuery.test.tsx (5 tests) 494ms  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx 5/5  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx 4/5  ❯ src/routes/store.routes.test.ts [queued]  Test Files 32 failed | 164 passed (242)  Tests 33 failed | 3048 passed | 294 skipped (3376)  Start at 07:51:47  Duration 314.19s [?2026l[?2026h ✓ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx (5 tests) 517ms  ❯ src/hooks/queries/useMasterItemsQuery.test.tsx 5/5  ❯ src/hooks/queries/useSuggestedCorrectionsQuery.test.tsx 5/5  ❯ src/routes/store.routes.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 314.91s [?2026l[?2026h  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 315.30s [?2026l[?2026h  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 317.38s [?2026l[?2026h  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts [queued]  ❯ src/utils/authUtils.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 318.53s [?2026l[?2026h  ❯ src/hooks/queries/useCategoriesQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts [queued]  ❯ src/utils/authUtils.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 319.34s [?2026l[?2026h  ❯ src/hooks/queries/useCategoriesQuery.test.tsx [queued]  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts [queued]  ❯ src/utils/authUtils.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 319.44s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx [queued]  ❯ src/hooks/queries/useCategoriesQuery.test.tsx [queued]  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts [queued]  ❯ src/utils/authUtils.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3376)  Start at 07:51:47  Duration 320.38s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx [queued]  ❯ src/hooks/queries/useCategoriesQuery.test.tsx [queued]  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts [queued]  ❯ src/utils/fileUtils.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3381)  Start at 07:51:47  Duration 321.71s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx [queued]  ❯ src/hooks/queries/useCategoriesQuery.test.tsx [queued]  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts 0/5  ❯ src/utils/fileUtils.test.ts [queued]  Test Files 32 failed | 165 passed (242)  Tests 33 failed | 3049 passed | 294 skipped (3386)  Start at 07:51:47  Duration 322.03s [?2026l[?2026h ✓ src/utils/authUtils.test.ts (5 tests) 21ms  ❯ src/components/ConfirmationModal.test.tsx [queued]  ❯ src/hooks/queries/useCategoriesQuery.test.tsx [queued]  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 0/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts 5/5  ❯ src/utils/fileUtils.test.ts 0/7  Test Files 32 failed | 166 passed (242)  Tests 33 failed | 3054 passed | 294 skipped (3397)  Start at 07:51:47  Duration 322.13s [?2026l[?2026h ✓ src/utils/fileUtils.test.ts (7 tests) 61ms ✓ src/services/systemService.test.ts (4 tests) 79ms  ❯ src/components/ConfirmationModal.test.tsx [queued]  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 0/5  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 4/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts 5/5  ❯ src/utils/fileUtils.test.ts 7/7  Test Files 32 failed | 168 passed (242)  Tests 33 failed | 3065 passed | 294 skipped (3402)  Start at 07:51:47  Duration 322.53s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx [queued]  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 0/5  ❯ src/routes/stats.routes.test.ts [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 4/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts 5/5  ❯ src/utils/fileUtils.test.ts 7/7  Test Files 32 failed | 168 passed (242)  Tests 33 failed | 3065 passed | 294 skipped (3402)  Start at 07:51:47  Duration 322.83s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 0/8  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 3/5  ❯ src/routes/stats.routes.test.ts 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 4/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts 5/5  ❯ src/utils/fileUtils.test.ts 7/7  Test Files 32 failed | 168 passed (242)  Tests 33 failed | 3068 passed | 294 skipped (3415)  Start at 07:51:47  Duration 322.93s [?2026l[?2026h ✓ src/hooks/queries/useCategoriesQuery.test.tsx (5 tests) 451ms  ❯ src/components/ConfirmationModal.test.tsx 0/8  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 5/5  ❯ src/routes/stats.routes.test.ts 1/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 4/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/authUtils.test.ts 5/5  ❯ src/utils/fileUtils.test.ts 7/7  Test Files 32 failed | 169 passed (242)  Tests 33 failed | 3071 passed | 294 skipped (3415)  Start at 07:51:47  Duration 323.03s [?2026l[?2026hstdout | src/routes/stats.routes.test.ts > Stats Routes (/api/stats) > GET /most-frequent-sales > should return 500 if the database call fails [DEBUG] tests-setup-unit.ts: crypto.randomBytes mock returning "mocked_random_id" for encoding "hex"  ❯ src/components/ConfirmationModal.test.tsx 0/8  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 5/5  ❯ src/routes/stats.routes.test.ts 2/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 4/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/fileUtils.test.ts 7/7  Test Files 32 failed | 169 passed (242)  Tests 33 failed | 3072 passed | 294 skipped (3415)  Start at 07:51:47  Duration 323.13s [?2026l[?2026hstderr | src/routes/stats.routes.test.ts > Stats Routes (/api/stats) > GET /most-frequent-sales > should return 500 if the database call fails --- [TEST] UNHANDLED ERROR (ID: mocked_random_id) --- Error: DB Error at /app/src/routes/stats.routes.test.ts:51:23 at file:///app/node_modules/@vitest/runner/dist/index.js:145:11 at file:///app/node_modules/@vitest/runner/dist/index.js:915:26 at file:///app/node_modules/@vitest/runner/dist/index.js:1243:20 at new Promise () at runWithTimeout (file:///app/node_modules/@vitest/runner/dist/index.js:1209:10) at file:///app/node_modules/@vitest/runner/dist/index.js:1653:37 at Traces.$ (file:///app/node_modules/vitest/dist/chunks/traces.U4xDYhzZ.js:115:27) at trace (file:///app/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21) at runTest (file:///app/node_modules/@vitest/runner/dist/index.js:1653:12)  ❯ src/components/ConfirmationModal.test.tsx 0/8  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 5/5  ❯ src/routes/stats.routes.test.ts 2/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/systemService.test.ts 4/4  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/fileUtils.test.ts 7/7  Test Files 32 failed | 169 passed (242)  Tests 33 failed | 3072 passed | 294 skipped (3415)  Start at 07:51:47  Duration 323.13s [?2026l[?2026h ✓ src/routes/stats.routes.test.ts (5 tests) 221ms  ❯ src/components/ConfirmationModal.test.tsx 0/8  ❯ src/hooks/queries/useCategoriesQuery.test.tsx 5/5  ❯ src/routes/stats.routes.test.ts 5/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3075 passed | 294 skipped (3415)  Start at 07:51:47  Duration 323.74s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 1/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3076 passed | 294 skipped (3415)  Start at 07:51:47  Duration 324.66s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 2/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3077 passed | 294 skipped (3415)  Start at 07:51:47  Duration 325.27s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 3/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3078 passed | 294 skipped (3415)  Start at 07:51:47  Duration 325.57s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 4/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3079 passed | 294 skipped (3415)  Start at 07:51:47  Duration 325.67s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 5/8  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3080 passed | 294 skipped (3415)  Start at 07:51:47  Duration 325.88s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 6/8  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3081 passed | 294 skipped (3415)  Start at 07:51:47  Duration 326.09s [?2026l[?2026h  ❯ src/components/ConfirmationModal.test.tsx 6/8  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/eventBus.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 170 passed (242)  Tests 33 failed | 3081 passed | 294 skipped (3415)  Start at 07:51:47  Duration 326.31s [?2026l[?2026h ✓ src/components/ConfirmationModal.test.tsx (8 tests) 3585ms ✓ should render correctly when isOpen is true  1724ms ✓ should call onConfirm when the confirm button is clicked  568ms ✓ should call onClose when the cancel button is clicked  329ms ✓ should render custom button text and classes  448ms  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx [queued]  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/eventBus.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  Test Files 32 failed | 171 passed (242)  Tests 33 failed | 3083 passed | 294 skipped (3415)  Start at 07:51:47  Duration 327.38s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx [queued]  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/eventBus.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts [queued]  Test Files 32 failed | 171 passed (242)  Tests 33 failed | 3083 passed | 294 skipped (3415)  Start at 07:51:47  Duration 327.64s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx [queued]  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/eventBus.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts [queued]  Test Files 32 failed | 171 passed (242)  Tests 33 failed | 3083 passed | 294 skipped (3415)  Start at 07:51:47  Duration 328.59s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx [queued]  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/eventBus.test.ts 0/8  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts [queued]  Test Files 32 failed | 171 passed (242)  Tests 33 failed | 3083 passed | 294 skipped (3423)  Start at 07:51:47  Duration 329.29s [?2026l[?2026h ✓ src/services/eventBus.test.ts (8 tests) 59ms  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx [queued]  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/eventBus.test.ts 8/8  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts [queued]  Test Files 32 failed | 172 passed (242)  Tests 33 failed | 3091 passed | 294 skipped (3423)  Start at 07:51:47  Duration 329.77s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx [queued]  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx 0/4  ❯ src/pages/admin/AdminPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts [queued]  Test Files 32 failed | 172 passed (242)  Tests 33 failed | 3091 passed | 294 skipped (3427)  Start at 07:51:47  Duration 330.42s [?2026l[?2026h ✓ src/utils/priceParser.test.ts (11 tests) 33ms  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx 0/4  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx 0/4  ❯ src/pages/admin/AdminPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts 11/11  Test Files 32 failed | 173 passed (242)  Tests 33 failed | 3102 passed | 294 skipped (3442)  Start at 07:51:47  Duration 330.53s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx 0/4  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx 1/4  ❯ src/pages/admin/AdminPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 0/5  ❯ src/utils/priceParser.test.ts 11/11  Test Files 32 failed | 173 passed (242)  Tests 33 failed | 3103 passed | 294 skipped (3442)  Start at 07:51:47  Duration 330.76s [?2026l[?2026h ❯ src/tests/integration/server.integration.test.ts (5 tests | 5 skipped) 10023ms ↓ should import the server app without crashing ↓ should respond with 200 OK and "pong" for GET /api/health/ping ↓ should respond with 200 OK for GET /api/health/db-schema ↓ should respond with 200 OK for GET /api/health/storage ↓ should respond with 200 OK for GET /api/health/redis ✓ src/hooks/queries/useApplicationStatsQuery.test.tsx (4 tests) 382ms  ❯ src/components/AppGuard.test.tsx [queued]  ❯ src/features/flyer/BulkImportSummary.test.tsx 0/4  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx 4/4  ❯ src/pages/admin/AdminPage.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/server.integration.test.ts 5/5  Test Files 33 failed | 174 passed (242)  Tests 33 failed | 3106 passed | 299 skipped (3442)  Start at 07:51:47  Duration 331.51s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx 0/4  ❯ src/features/flyer/BulkImportSummary.test.tsx 0/4  ❯ src/hooks/queries/useApplicationStatsQuery.test.tsx 4/4  ❯ src/pages/admin/AdminPage.test.tsx 0/4  ❯ src/routes/store.routes.test.ts [queued]  Test Files 33 failed | 174 passed (242)  Tests 33 failed | 3106 passed | 299 skipped (3450)  Start at 07:51:47  Duration 331.90s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx 1/4  ❯ src/features/flyer/BulkImportSummary.test.tsx 0/4  ❯ src/pages/admin/AdminPage.test.tsx 0/4  ❯ src/routes/store.routes.test.ts [queued]  Test Files 33 failed | 174 passed (242)  Tests 33 failed | 3107 passed | 299 skipped (3450)  Start at 07:51:47  Duration 332.00s [?2026l[?2026h ✓ src/components/AppGuard.test.tsx (4 tests) 347ms  ❯ src/components/AppGuard.test.tsx 4/4  ❯ src/features/flyer/BulkImportSummary.test.tsx 1/4  ❯ src/pages/admin/AdminPage.test.tsx 0/4  ❯ src/routes/store.routes.test.ts [queued]  Test Files 33 failed | 175 passed (242)  Tests 33 failed | 3111 passed | 299 skipped (3450)  Start at 07:51:47  Duration 332.20s [?2026l[?2026h  ❯ src/components/AppGuard.test.tsx 4/4  ❯ src/features/flyer/BulkImportSummary.test.tsx 2/4  ❯ src/pages/admin/AdminPage.test.tsx 0/4  ❯ src/routes/store.routes.test.ts [queued]  Test Files 33 failed | 175 passed (242)  Tests 33 failed | 3112 passed | 299 skipped (3450)  Start at 07:51:47  Duration 332.40s [?2026l[?2026h ✓ src/features/flyer/BulkImportSummary.test.tsx (4 tests) 1930ms ✓ should render all sections when data is provided for each  1381ms ✓ should not render sections with no data  334ms  ❯ src/features/flyer/BulkImportSummary.test.tsx 4/4  ❯ src/pages/admin/AdminPage.test.tsx 0/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 176 passed (242)  Tests 33 failed | 3114 passed | 299 skipped (3450)  Start at 07:51:47  Duration 332.51s [?2026l[?2026h  ❯ src/features/flyer/BulkImportSummary.test.tsx 4/4  ❯ src/pages/admin/AdminPage.test.tsx 1/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 176 passed (242)  Tests 33 failed | 3115 passed | 299 skipped (3450)  Start at 07:51:47  Duration 333.25s [?2026l[?2026h  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/pages/admin/AdminPage.test.tsx 1/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 176 passed (242)  Tests 33 failed | 3115 passed | 299 skipped (3450)  Start at 07:51:47  Duration 333.56s [?2026l[?2026h  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/pages/admin/AdminPage.test.tsx 1/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 176 passed (242)  Tests 33 failed | 3115 passed | 299 skipped (3450)  Start at 07:51:47  Duration 334.22s [?2026l[?2026h  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/pages/admin/AdminPage.test.tsx 2/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 176 passed (242)  Tests 33 failed | 3116 passed | 299 skipped (3450)  Start at 07:51:47  Duration 334.33s [?2026l[?2026h  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/pages/admin/AdminPage.test.tsx 3/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 176 passed (242)  Tests 33 failed | 3117 passed | 299 skipped (3450)  Start at 07:51:47  Duration 335.12s [?2026l[?2026h ✓ src/pages/admin/AdminPage.test.tsx (4 tests) 2465ms ✓ should render the main heading and description  966ms ✓ should render navigation links to other admin sections  1169ms  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/pages/admin/AdminPage.test.tsx 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts [queued]  Test Files 33 failed | 177 passed (242)  Tests 33 failed | 3118 passed | 299 skipped (3450)  Start at 07:51:47  Duration 335.25s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts 0/3  ❯ src/utils/rateLimit.test.ts [queued]  Test Files 33 failed | 177 passed (242)  Tests 33 failed | 3118 passed | 299 skipped (3453)  Start at 07:51:47  Duration 335.37s [?2026l[?2026h ✓ src/services/db/deals.db.test.ts (3 tests) 50ms  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts 3/3  ❯ src/utils/rateLimit.test.ts [queued]  Test Files 33 failed | 178 passed (242)  Tests 33 failed | 3121 passed | 299 skipped (3453)  Start at 07:51:47  Duration 336.07s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/db/deals.db.test.ts 3/3  ❯ src/utils/rateLimit.test.ts [queued]  Test Files 33 failed | 178 passed (242)  Tests 33 failed | 3121 passed | 299 skipped (3453)  Start at 07:51:47  Duration 336.39s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/rateLimit.test.ts [queued]  Test Files 33 failed | 178 passed (242)  Tests 33 failed | 3121 passed | 299 skipped (3453)  Start at 07:51:47  Duration 337.38s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx 0/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/rateLimit.test.ts 1/7  Test Files 33 failed | 178 passed (242)  Tests 33 failed | 3122 passed | 299 skipped (3464)  Start at 07:51:47  Duration 337.48s [?2026l[?2026h ✓ src/utils/rateLimit.test.ts (7 tests) 39ms  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx [queued]  ❯ src/config/queryClient.test.tsx 3/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/rateLimit.test.ts 7/7  Test Files 33 failed | 179 passed (242)  Tests 33 failed | 3131 passed | 299 skipped (3464)  Start at 07:51:47  Duration 337.68s [?2026l[?2026h ✓ src/config/queryClient.test.tsx (4 tests) 251ms  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx [queued]  ❯ src/components/MapView.test.tsx 0/3  ❯ src/config/queryClient.test.tsx 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/rateLimit.test.ts 7/7  Test Files 33 failed | 180 passed (242)  Tests 33 failed | 3132 passed | 299 skipped (3467)  Start at 07:51:47  Duration 337.98s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx [queued]  ❯ src/components/FlyerCountDisplay.test.tsx 0/3  ❯ src/components/MapView.test.tsx 0/3  ❯ src/config/queryClient.test.tsx 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/rateLimit.test.ts 7/7  Test Files 33 failed | 180 passed (242)  Tests 33 failed | 3132 passed | 299 skipped (3470)  Start at 07:51:47  Duration 338.18s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx 0/2  ❯ src/components/FlyerCountDisplay.test.tsx 0/3  ❯ src/components/MapView.test.tsx 0/3  ❯ src/config/queryClient.test.tsx 4/4  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/utils/rateLimit.test.ts 7/7  Test Files 33 failed | 180 passed (242)  Tests 33 failed | 3132 passed | 299 skipped (3472)  Start at 07:51:47  Duration 338.28s [?2026l[?2026h  ❯ src/components/AchievementsList.test.tsx 0/2  ❯ src/components/FlyerCountDisplay.test.tsx 0/3  ❯ src/components/MapView.test.tsx 2/3  ❯ src/config/queryClient.test.tsx 4/4  ❯ src/routes/store.routes.test.ts [queued]  Test Files 33 failed | 180 passed (242)  Tests 33 failed | 3134 passed | 299 skipped (3472)  Start at 07:51:47  Duration 338.60s [?2026l[?2026h ✓ src/components/MapView.test.tsx (3 tests) 550ms  ❯ src/components/AchievementsList.test.tsx 0/2  ❯ src/components/FlyerCountDisplay.test.tsx 0/3  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts [queued]  Test Files 33 failed | 181 passed (242)  Tests 33 failed | 3135 passed | 299 skipped (3472)  Start at 07:51:47  Duration 339.97s [?2026l[?2026h ✓ src/components/FlyerCountDisplay.test.tsx (3 tests) 1174ms ✓ should render an error message when an error is present  810ms ✓ src/components/AchievementsList.test.tsx (2 tests) 1504ms ✓ should render the list of achievements with correct details  1449ms  ❯ src/components/AchievementsList.test.tsx 2/2  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3472)  Start at 07:51:47  Duration 340.08s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3472)  Start at 07:51:47  Duration 340.80s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3472)  Start at 07:51:47  Duration 341.22s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/middleware/fileUpload.middleware.test.ts [queued]  ❯ src/providers/AppProviders.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3472)  Start at 07:51:47  Duration 341.86s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/middleware/fileUpload.middleware.test.ts [queued]  ❯ src/providers/AppProviders.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3472)  Start at 07:51:47  Duration 342.19s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/middleware/fileUpload.middleware.test.ts [queued]  ❯ src/providers/AppProviders.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts 0/6  ❯ src/tests/integration/deals.integration.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3478)  Start at 07:51:47  Duration 342.43s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/middleware/fileUpload.middleware.test.ts [queued]  ❯ src/providers/AppProviders.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts 0/6  ❯ src/tests/integration/db.integration.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts [queued]  Test Files 33 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 299 skipped (3478)  Start at 07:51:47  Duration 342.54s [?2026l[?2026h ❯ src/tests/e2e/admin-authorization.e2e.test.ts (6 tests | 6 skipped) 168ms ↓ should return 403 Forbidden for a regular user trying to access 'GET' '/admin/stats' ↓ should return 403 Forbidden for a regular user trying to access 'GET' '/admin/users' ↓ should return 403 Forbidden for a regular user trying to access 'GET' '/admin/corrections' ↓ should return 403 Forbidden for a regular user trying to access 'POST' '/admin/corrections/1/approve' ↓ should return 403 Forbidden for a regular user trying to access 'POST' '/admin/trigger/daily-deal-check' ↓ should return 403 Forbidden for a regular user trying to access 'GET' '/admin/queues/status'  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx [queued]  ❯ src/middleware/fileUpload.middleware.test.ts [queued]  ❯ src/providers/AppProviders.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts 6/6  ❯ src/tests/integration/db.integration.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 34 failed | 183 passed (242)  Tests 33 failed | 3140 passed | 305 skipped (3482)  Start at 07:51:47  Duration 343.17s [?2026l[?2026h ✓ src/middleware/fileUpload.middleware.test.ts (3 tests) 32ms  ❯ src/components/Dashboard.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx 0/6  ❯ src/middleware/fileUpload.middleware.test.ts 3/3  ❯ src/providers/AppProviders.test.tsx 0/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts 6/6  ❯ src/tests/integration/db.integration.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 34 failed | 184 passed (242)  Tests 33 failed | 3143 passed | 305 skipped (3493)  Start at 07:51:47  Duration 343.27s [?2026l[?2026h ✓ src/providers/AppProviders.test.tsx (2 tests) 165ms  ❯ src/components/Dashboard.test.tsx 0/5  ❯ src/components/WhatsNewModal.test.tsx 0/6  ❯ src/middleware/fileUpload.middleware.test.ts 3/3  ❯ src/providers/AppProviders.test.tsx 2/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/e2e/admin-authorization.e2e.test.ts 6/6  ❯ src/tests/integration/db.integration.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 34 failed | 185 passed (242)  Tests 33 failed | 3145 passed | 305 skipped (3498)  Start at 07:51:47  Duration 343.47s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx 0/5  ❯ src/components/WhatsNewModal.test.tsx 0/6  ❯ src/middleware/fileUpload.middleware.test.ts 3/3  ❯ src/providers/AppProviders.test.tsx 2/2  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/db.integration.test.ts 0/2  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 34 failed | 185 passed (242)  Tests 33 failed | 3145 passed | 305 skipped (3500)  Start at 07:51:47  Duration 344.18s [?2026l[?2026h ❯ src/tests/integration/db.integration.test.ts (2 tests | 2 failed) 35ms  × should create a new user and have a corresponding profile 24ms  × should be able to find the created user by email 3ms stdout | src/components/Dashboard.test.tsx > Dashboard Component > renders the dashboard title TEST: Verifying dashboard title render  ❯ src/components/Dashboard.test.tsx 0/5  ❯ src/components/WhatsNewModal.test.tsx 1/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/db.integration.test.ts 2/2  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 185 passed (242)  Tests 35 failed | 3146 passed | 305 skipped (3500)  Start at 07:51:47  Duration 344.48s [?2026l[?2026hstdout | src/components/Dashboard.test.tsx > Dashboard Component > renders the RecipeSuggester widget TEST: Verifying RecipeSuggester presence stdout | src/components/Dashboard.test.tsx > Dashboard Component > renders the FlyerCountDisplay widget within the "Your Flyers" section TEST: Verifying FlyerCountDisplay presence and section title  ❯ src/components/Dashboard.test.tsx 1/5  ❯ src/components/WhatsNewModal.test.tsx 1/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/db.integration.test.ts 2/2  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 185 passed (242)  Tests 35 failed | 3147 passed | 305 skipped (3500)  Start at 07:51:47  Duration 344.78s [?2026l[?2026hstdout | src/components/Dashboard.test.tsx > Dashboard Component > renders the Leaderboard widget in the sidebar area TEST: Verifying Leaderboard presence stdout | src/components/Dashboard.test.tsx > Dashboard Component > renders with the correct grid layout classes TEST: Verifying layout classes  ❯ src/components/Dashboard.test.tsx 3/5  ❯ src/components/WhatsNewModal.test.tsx 2/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/db.integration.test.ts 2/2  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 185 passed (242)  Tests 35 failed | 3150 passed | 305 skipped (3500)  Start at 07:51:47  Duration 344.88s [?2026l[?2026h ✓ src/components/Dashboard.test.tsx (5 tests) 1454ms ✓ renders the dashboard title  968ms ✓ renders the FlyerCountDisplay widget within the "Your Flyers" section  317ms  ❯ src/components/Dashboard.test.tsx 5/5  ❯ src/components/WhatsNewModal.test.tsx 3/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/db.integration.test.ts 2/2  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 186 passed (242)  Tests 35 failed | 3153 passed | 305 skipped (3500)  Start at 07:51:47  Duration 345.09s [?2026l[?2026h  ❯ src/components/Dashboard.test.tsx 5/5  ❯ src/components/WhatsNewModal.test.tsx 3/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 186 passed (242)  Tests 35 failed | 3153 passed | 305 skipped (3500)  Start at 07:51:47  Duration 345.29s [?2026l[?2026h ✓ src/components/WhatsNewModal.test.tsx (6 tests) 2162ms ✓ should render correctly when isOpen is true  1191ms ✓ should call onClose when the "Got it!" button is clicked  366ms  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx 6/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 345.69s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/WhatsNewModal.test.tsx 6/6  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 345.95s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/timeout.test.ts [queued]  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 346.70s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts [queued]  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 346.91s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts [queued]  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 348.16s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts [queued]  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 348.83s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts [queued]  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 348.96s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts [queued]  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3500)  Start at 07:51:47  Duration 349.78s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts 0/3  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3156 passed | 305 skipped (3503)  Start at 07:51:47  Duration 349.99s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts [queued]  ❯ src/utils/timeout.test.ts 1/3  Test Files 35 failed | 187 passed (242)  Tests 35 failed | 3157 passed | 305 skipped (3503)  Start at 07:51:47  Duration 350.20s [?2026l[?2026h ✓ src/utils/timeout.test.ts (3 tests) 44ms  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts 0/7  ❯ src/utils/timeout.test.ts 3/3  Test Files 35 failed | 188 passed (242)  Tests 35 failed | 3159 passed | 305 skipped (3510)  Start at 07:51:47  Duration 350.43s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx [queued]  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts 1/7  ❯ src/utils/timeout.test.ts 3/3  Test Files 35 failed | 188 passed (242)  Tests 35 failed | 3160 passed | 305 skipped (3510)  Start at 07:51:47  Duration 350.58s [?2026l[?2026h ✓ src/utils/objectUtils.test.ts (7 tests) 36ms  ❯ src/components/AdminRoute.test.tsx 0/3  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/utils/objectUtils.test.ts 7/7  ❯ src/utils/timeout.test.ts 3/3  Test Files 35 failed | 189 passed (242)  Tests 35 failed | 3166 passed | 305 skipped (3513)  Start at 07:51:47  Duration 350.79s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx 0/3  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts [queued]  ❯ src/utils/objectUtils.test.ts 7/7  Test Files 35 failed | 189 passed (242)  Tests 35 failed | 3166 passed | 305 skipped (3513)  Start at 07:51:47  Duration 350.96s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx 1/3  ❯ src/components/AnonymousUserBanner.test.tsx [queued]  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts [queued]  ❯ src/utils/objectUtils.test.ts 7/7  Test Files 35 failed | 189 passed (242)  Tests 35 failed | 3167 passed | 305 skipped (3513)  Start at 07:51:47  Duration 351.50s [?2026l[?2026h ✓ src/components/AdminRoute.test.tsx (3 tests) 327ms  ❯ src/components/AdminRoute.test.tsx 3/3  ❯ src/components/AnonymousUserBanner.test.tsx 0/2  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx 1/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts [queued]  ❯ src/utils/objectUtils.test.ts 7/7  Test Files 35 failed | 190 passed (242)  Tests 35 failed | 3170 passed | 305 skipped (3518)  Start at 07:51:47  Duration 351.60s [?2026l[?2026h ✓ src/providers/ApiProvider.test.tsx (3 tests) 136ms  ❯ src/components/AdminRoute.test.tsx 3/3  ❯ src/components/AnonymousUserBanner.test.tsx 0/2  ❯ src/components/DarkModeToggle.test.tsx [queued]  ❯ src/providers/ApiProvider.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts [queued]  Test Files 35 failed | 191 passed (242)  Tests 35 failed | 3172 passed | 305 skipped (3518)  Start at 07:51:47  Duration 351.75s [?2026l[?2026h  ❯ src/components/AdminRoute.test.tsx 3/3  ❯ src/components/AnonymousUserBanner.test.tsx 0/2  ❯ src/components/DarkModeToggle.test.tsx 0/3  ❯ src/providers/ApiProvider.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts [queued]  Test Files 35 failed | 191 passed (242)  Tests 35 failed | 3172 passed | 305 skipped (3521)  Start at 07:51:47  Duration 351.95s [?2026l[?2026h  ❯ src/components/AnonymousUserBanner.test.tsx 0/2  ❯ src/components/DarkModeToggle.test.tsx 0/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 35 failed | 191 passed (242)  Tests 35 failed | 3172 passed | 305 skipped (3522)  Start at 07:51:47  Duration 352.69s [?2026l[?2026h  ❯ src/components/AnonymousUserBanner.test.tsx 0/2  ❯ src/components/DarkModeToggle.test.tsx 0/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 0/4  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 35 failed | 191 passed (242)  Tests 35 failed | 3172 passed | 305 skipped (3522)  Start at 07:51:47  Duration 352.87s [?2026l[?2026h ✓ src/components/AnonymousUserBanner.test.tsx (2 tests) 1314ms ✓ should render the banner with the correct text content and accessibility role  975ms ✓ should call onOpenProfile when the "sign up or log in" button is clicked  328ms  ❯ src/components/AnonymousUserBanner.test.tsx 2/2  ❯ src/components/DarkModeToggle.test.tsx 0/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 1/4  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 35 failed | 192 passed (242)  Tests 35 failed | 3174 passed | 306 skipped (3522)  Start at 07:51:47  Duration 353.30s [?2026l[?2026h ❯ src/tests/integration/deals.integration.test.ts (4 tests | 4 skipped) 10013ms ↓ should require authentication ↓ should return empty array for authenticated user with no watched items ↓ should reject invalid JWT token ↓ should reject missing Bearer prefix ✓ src/components/DarkModeToggle.test.tsx (3 tests) 1324ms ✓ should render in light mode state  919ms ✓ should render in dark mode state  310ms  ❯ src/components/DarkModeToggle.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 4/4  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/stringUtils.test.ts [queued]  Test Files 36 failed | 193 passed (242)  Tests 35 failed | 3177 passed | 309 skipped (3522)  Start at 07:51:47  Duration 353.51s [?2026l[?2026h  ❯ src/components/DarkModeToggle.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/deals.integration.test.ts 4/4  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/stringUtils.test.ts [queued]  Test Files 36 failed | 193 passed (242)  Tests 35 failed | 3177 passed | 309 skipped (3522)  Start at 07:51:47  Duration 354.23s [?2026l[?2026h  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/stringUtils.test.ts [queued]  Test Files 36 failed | 193 passed (242)  Tests 35 failed | 3177 passed | 309 skipped (3522)  Start at 07:51:47  Duration 354.94s [?2026l[?2026h  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/stringUtils.test.ts [queued]  Test Files 36 failed | 193 passed (242)  Tests 35 failed | 3177 passed | 309 skipped (3522)  Start at 07:51:47  Duration 355.17s [?2026l[?2026h  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/stringUtils.test.ts 0/9  Test Files 36 failed | 193 passed (242)  Tests 35 failed | 3177 passed | 309 skipped (3531)  Start at 07:51:47  Duration 356.02s [?2026l[?2026h ✓ src/utils/stringUtils.test.ts (9 tests) 39ms  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/stringUtils.test.ts 9/9  Test Files 36 failed | 194 passed (242)  Tests 35 failed | 3186 passed | 309 skipped (3531)  Start at 07:51:47  Duration 356.33s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 194 passed (242)  Tests 35 failed | 3186 passed | 309 skipped (3531)  Start at 07:51:47  Duration 357.01s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 194 passed (242)  Tests 35 failed | 3186 passed | 309 skipped (3531)  Start at 07:51:47  Duration 358.04s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx [queued]  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts 0/2  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 194 passed (242)  Tests 35 failed | 3186 passed | 309 skipped (3533)  Start at 07:51:47  Duration 358.16s [?2026l[?2026h ✓ src/services/brandService.test.ts (2 tests) 46ms  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 0/3  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/services/brandService.test.ts 2/2  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 195 passed (242)  Tests 35 failed | 3188 passed | 309 skipped (3536)  Start at 07:51:47  Duration 358.76s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 0/3  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts [queued]  Test Files 36 failed | 195 passed (242)  Tests 35 failed | 3188 passed | 309 skipped (3536)  Start at 07:51:47  Duration 358.86s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 0/3  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts [queued]  Test Files 36 failed | 195 passed (242)  Tests 35 failed | 3188 passed | 309 skipped (3536)  Start at 07:51:47  Duration 358.96s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 0/3  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts [queued]  Test Files 36 failed | 195 passed (242)  Tests 35 failed | 3188 passed | 309 skipped (3536)  Start at 07:51:47  Duration 359.96s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 2/3  ❯ src/components/UserMenuSkeleton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts [queued]  Test Files 36 failed | 195 passed (242)  Tests 35 failed | 3190 passed | 309 skipped (3536)  Start at 07:51:47  Duration 360.38s [?2026l[?2026h ✓ src/components/UnitSystemToggle.test.tsx (3 tests) 1609ms ✓ should render correctly for imperial system  864ms ✓ should render correctly for metric system  424ms ✓ should call onToggle when the toggle is clicked  311ms  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 3/3  ❯ src/components/UserMenuSkeleton.test.tsx 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts [queued]  Test Files 36 failed | 196 passed (242)  Tests 35 failed | 3191 passed | 309 skipped (3541)  Start at 07:51:47  Duration 360.58s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx [queued]  ❯ src/components/UnitSystemToggle.test.tsx 3/3  ❯ src/components/UserMenuSkeleton.test.tsx 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts 0/7  Test Files 36 failed | 196 passed (242)  Tests 35 failed | 3191 passed | 309 skipped (3548)  Start at 07:51:47  Duration 360.78s [?2026l[?2026h ✓ src/utils/formatUtils.test.ts (7 tests) 72ms  ❯ src/components/ErrorDisplay.test.tsx [queued]  ❯ src/components/Footer.test.tsx 0/1  ❯ src/components/UnitSystemToggle.test.tsx 3/3  ❯ src/components/UserMenuSkeleton.test.tsx 0/5  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts 7/7  Test Files 36 failed | 197 passed (242)  Tests 35 failed | 3198 passed | 309 skipped (3549)  Start at 07:51:47  Duration 360.88s [?2026l[?2026h ✓ src/components/UserMenuSkeleton.test.tsx (5 tests) 335ms  ❯ src/components/ErrorDisplay.test.tsx 0/3  ❯ src/components/Footer.test.tsx 0/1  ❯ src/components/UnitSystemToggle.test.tsx 3/3  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  ❯ src/utils/formatUtils.test.ts 7/7  Test Files 36 failed | 198 passed (242)  Tests 35 failed | 3203 passed | 309 skipped (3552)  Start at 07:51:47  Duration 360.98s [?2026l[?2026h ✓ src/components/Footer.test.tsx (1 test) 166ms  ❯ src/components/ErrorDisplay.test.tsx 0/3  ❯ src/components/StatCard.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 199 passed (242)  Tests 35 failed | 3204 passed | 309 skipped (3552)  Start at 07:51:47  Duration 361.49s [?2026l[?2026h  ❯ src/components/ErrorDisplay.test.tsx 0/3  ❯ src/components/StatCard.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 199 passed (242)  Tests 35 failed | 3204 passed | 309 skipped (3552)  Start at 07:51:47  Duration 362.12s [?2026l[?2026h ✓ src/components/ErrorDisplay.test.tsx (3 tests) 795ms ✓ should render the error message when provided  651ms  ❯ src/components/StatCard.test.tsx [queued]  ❯ src/features/flyer/SampleDataButton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 0/1  Test Files 36 failed | 200 passed (242)  Tests 35 failed | 3207 passed | 309 skipped (3552)  Start at 07:51:47  Duration 362.97s [?2026l[?2026hstdout | src/tests/integration/system.integration.test.ts > System API Routes Integration Tests ┌─────────┐ │ (index) │ ├─────────┤ └─────────┘  ❯ src/components/StatCard.test.tsx [queued]  ❯ src/features/flyer/SampleDataButton.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  ❯ src/tests/integration/system.integration.test.ts 1/1  Test Files 36 failed | 200 passed (242)  Tests 35 failed | 3207 passed | 310 skipped (3552)  Start at 07:51:47  Duration 363.51s [?2026l[?2026h ❯ src/tests/integration/system.integration.test.ts (1 test | 1 skipped) 10744ms ↓ should return a status for PM2  ❯ src/components/LoadingSpinner.test.tsx [queued]  ❯ src/components/StatCard.test.tsx 0/2  ❯ src/features/flyer/SampleDataButton.test.tsx [queued]  ❯ src/pages/admin/components/StatCard.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 37 failed | 200 passed (242)  Tests 35 failed | 3207 passed | 310 skipped (3554)  Start at 07:51:47  Duration 364.26s [?2026l[?2026h ✓ src/components/StatCard.test.tsx (2 tests) 179ms  ❯ src/components/LoadingSpinner.test.tsx [queued]  ❯ src/features/flyer/SampleDataButton.test.tsx 0/2  ❯ src/pages/admin/components/StatCard.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 37 failed | 201 passed (242)  Tests 35 failed | 3209 passed | 310 skipped (3556)  Start at 07:51:47  Duration 364.46s [?2026l[?2026h  ❯ src/components/LoadingSpinner.test.tsx [queued]  ❯ src/features/flyer/SampleDataButton.test.tsx 1/2  ❯ src/pages/admin/components/StatCard.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 37 failed | 201 passed (242)  Tests 35 failed | 3210 passed | 310 skipped (3556)  Start at 07:51:47  Duration 365.09s [?2026l[?2026h ✓ src/features/flyer/SampleDataButton.test.tsx (2 tests) 618ms ✓ should render the button with the correct text  455ms  ❯ src/components/LoadingSpinner.test.tsx 0/2  ❯ src/pages/admin/components/StatCard.test.tsx [queued]  ❯ src/routes/store.routes.test.ts [queued]  Test Files 37 failed | 202 passed (242)  Tests 35 failed | 3211 passed | 310 skipped (3558)  Start at 07:51:47  Duration 365.19s [?2026l[?2026h  ❯ src/components/LoadingSpinner.test.tsx 1/2  ❯ src/pages/admin/components/StatCard.test.tsx 0/2  ❯ src/routes/store.routes.test.ts [queued]  Test Files 37 failed | 202 passed (242)  Tests 35 failed | 3212 passed | 310 skipped (3560)  Start at 07:51:47  Duration 365.29s [?2026l ✓ src/components/LoadingSpinner.test.tsx (2 tests) 114ms ✓ src/pages/admin/components/StatCard.test.tsx (2 tests) 127ms ⎯⎯⎯⎯⎯⎯ Failed Suites 25 ⎯⎯⎯⎯⎯⎯  FAIL  src/routes/store.routes.test.ts [ src/routes/store.routes.test.ts ] TypeError: () => ({ getAllStores: __vite_ssr_import_0__.vi.fn(), getStoreById: __vite_ssr_import_0__.vi.fn(), ......}) is not a constructor  ❯ src/routes/store.routes.ts:18:19  16|   17| // Initialize repositories  18| const storeRepo = new StoreRepository();  |  ^  19| const storeLocationRepo = new StoreLocationRepository();  20| const addressRepo = new AddressRepository();  ❯ src/routes/store.routes.test.ts:45:1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/63]⎯  FAIL  src/tests/e2e/admin-authorization.e2e.test.ts > Admin Route Authorization TypeError: Failed to parse URL from /api/auth/register  ❯ createAndLoginUser src/tests/utils/testHelpers.ts:76:5  74|  } else {  75|  // Use apiClient for E2E tests (hits the external URL via fetch)  76|  await apiClient.registerUser(email, password, fullName);  |  ^  77|   78|  if (options.role === 'admin') {  ❯ src/tests/e2e/admin-authorization.e2e.test.ts:17:29 Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ createAndLoginUser src/tests/utils/testHelpers.ts:76:21  ❯ src/tests/e2e/admin-authorization.e2e.test.ts:17:35 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/63]⎯  FAIL  src/tests/e2e/auth.e2e.test.ts > Authentication E2E Flow TypeError: Failed to parse URL from /api/auth/register  ❯ createAndLoginUser src/tests/utils/testHelpers.ts:76:5  74|  } else {  75|  // Use apiClient for E2E tests (hits the external URL via fetch)  76|  await apiClient.registerUser(email, password, fullName);  |  ^  77|   78|  if (options.role === 'admin') {  ❯ src/tests/e2e/auth.e2e.test.ts:21:31 Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ createAndLoginUser src/tests/utils/testHelpers.ts:76:21  ❯ src/tests/e2e/auth.e2e.test.ts:21:37 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/63]⎯  FAIL  src/tests/integration/admin.integration.test.ts > Admin API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/admin.integration.test.ts:25:3  23|  const createdFlyerIds: number[] = [];  24|   25|  beforeAll(async () => {  |  ^  26|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  27|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/63]⎯  FAIL  src/tests/integration/ai.integration.test.ts > AI API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/ai.integration.test.ts:30:3  28|  let testUserId: string;  29|   30|  beforeAll(async () => {  |  ^  31|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  32|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/63]⎯  FAIL  src/tests/integration/auth.integration.test.ts > Authentication API Integration Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/auth.integration.test.ts:24:3  22|  const createdUserIds: string[] = [];  23|   24|  beforeAll(async () => {  |  ^  25|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  26|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/63]⎯  FAIL  src/tests/integration/budget.integration.test.ts > Budget API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/budget.integration.test.ts:21:3  19|  const createdBudgetIds: number[] = [];  20|   21|  beforeAll(async () => {  |  ^  22|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  23|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/63]⎯  FAIL  src/tests/integration/data-integrity.integration.test.ts > Data Integrity Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/data-integrity.integration.test.ts:20:3  18|  let adminUser: UserProfile;  19|   20|  beforeAll(async () => {  |  ^  21|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  22|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/63]⎯  FAIL  src/tests/integration/data-integrity.integration.test.ts > Data Integrity Integration Tests TypeError: Cannot read properties of undefined (reading 'user')  ❯ src/tests/integration/data-integrity.integration.test.ts:39:85  37|  vi.unstubAllEnvs();  38|  // Clean up admin user  39|  await getPool().query('DELETE FROM public.users WHERE user_id = $1…  |  ^  40|  });  41|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/63]⎯  FAIL  src/tests/integration/deals.integration.test.ts > Deals API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/deals.integration.test.ts:19:3  17|  const createdUserIds: string[] = [];  18|   19|  beforeAll(async () => {  |  ^  20|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  21|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/63]⎯  FAIL  src/tests/integration/edge-cases.integration.test.ts > Edge Cases Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/edge-cases.integration.test.ts:24:3  22|  const createdShoppingListIds: number[] = [];  23|   24|  beforeAll(async () => {  |  ^  25|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  26|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/63]⎯  FAIL  src/tests/integration/flyer-processing.integration.test.ts > Flyer Processing Background Job Integration Test Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/flyer-processing.integration.test.ts:130:3 128|  const originalFrontendUrl = process.env.FRONTEND_URL; 129|  130|  beforeAll(async () => {  |  ^ 131|  // FIX: Stub FRONTEND_URL to ensure valid absolute URLs (http://..… 132|  // for the database, satisfying the 'url_check' constraint. ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/63]⎯  FAIL  src/tests/integration/flyer-processing.integration.test.ts > Flyer Processing Background Job Integration Test Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/flyer-processing.integration.test.ts:209:3 207|  }); 208|  209|  afterAll(async () => {  |  ^ 210|  // Restore original value 211|  process.env.FRONTEND_URL = originalFrontendUrl; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/63]⎯  FAIL  src/tests/integration/flyer.integration.test.ts > Public Flyer API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/flyer.integration.test.ts:27:3  25|   26|  // Fetch flyers once before all tests in this suite to use in subseq…  27|  beforeAll(async () => {  |  ^  28|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  29|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/63]⎯  FAIL  src/tests/integration/gamification.integration.test.ts > Gamification Flow Integration Test Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/gamification.integration.test.ts:45:3  43|  let workersModule: typeof import('../../services/workers.server');  44|   45|  beforeAll(async () => {  |  ^  46|  // Stub environment variables for URL generation in the background…  47|  // This needs to be in beforeAll to ensure it's set before any cod… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/63]⎯  FAIL  src/tests/integration/inventory.integration.test.ts > Inventory/Expiry Integration Tests (/api/inventory) Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/inventory.integration.test.ts:30:3  28|  const getUniqueUnit = () => `test-unit-${Date.now()}-${unitCounter++…  29|   30|  beforeAll(async () => {  |  ^  31|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  32|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/63]⎯  FAIL  src/tests/integration/inventory.integration.test.ts > Inventory/Expiry Integration Tests (/api/inventory) TypeError: Cannot read properties of undefined (reading 'user')  ❯ src/tests/integration/inventory.integration.test.ts:80:16  78|  // Clean up user alert settings (correct table: expiry_alerts)  79|  await pool.query('DELETE FROM public.expiry_alerts WHERE user_id =…  80|  testUser.user.user_id,  |  ^  81|  ]);  82|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/63]⎯  FAIL  src/tests/integration/notification.integration.test.ts > Notification API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/notification.integration.test.ts:19:3  17|  const createdUserIds: string[] = [];  18|   19|  beforeAll(async () => {  |  ^  20|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  21|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/63]⎯  FAIL  src/tests/integration/price.integration.test.ts > Price History API Integration Test (/api/price-history) Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/price.integration.test.ts:30:3  28|  const createdStoreLocations: CreatedStoreLocation[] = [];  29|   30|  beforeAll(async () => {  |  ^  31|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  32|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/63]⎯  FAIL  src/tests/integration/public.routes.integration.test.ts > Public API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/public.routes.integration.test.ts:38:3  36|  const createdStoreLocations: CreatedStoreLocation[] = [];  37|   38|  beforeAll(async () => {  |  ^  39|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  40|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/63]⎯  FAIL  src/tests/integration/reactions.integration.test.ts > Reactions API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/reactions.integration.test.ts:22:3  20|  const createdReactionIds: number[] = [];  21|   22|  beforeAll(async () => {  |  ^  23|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  24|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/63]⎯  FAIL  src/tests/integration/receipt.integration.test.ts > Receipt Processing Integration Tests (/api/receipts) Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/receipt.integration.test.ts:71:3  69|  const createdStoreLocations: CreatedStoreLocation[] = [];  70|   71|  beforeAll(async () => {  |  ^  72|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  73|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/63]⎯  FAIL  src/tests/integration/recipe.integration.test.ts > Recipe API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/recipe.integration.test.ts:23:3  21|  const createdRecipeIds: number[] = [];  22|   23|  beforeAll(async () => {  |  ^  24|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  25|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/63]⎯  FAIL  src/tests/integration/server.integration.test.ts > Server Initialization Smoke Test Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/server.integration.test.ts:12:3  10|  let app: any;  11|   12|  beforeAll(async () => {  |  ^  13|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  14|  app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/63]⎯  FAIL  src/tests/integration/system.integration.test.ts > System API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/system.integration.test.ts:12:3  10|  let app: any;  11|   12|  beforeAll(async () => {  |  ^  13|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  14|  app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/63]⎯  FAIL  src/tests/integration/upc.integration.test.ts > UPC Scanning Integration Tests (/api/upc) Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/upc.integration.test.ts:27:3  25|  const createdProductIds: number[] = [];  26|   27|  beforeAll(async () => {  |  ^  28|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  29|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/63]⎯  FAIL  src/tests/integration/user.integration.test.ts > User API Routes Integration Tests Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/user.integration.test.ts:24:3  22|  // Before any tests run, create a new user and log them in.  23|  // The token will be used for all subsequent API calls in this test …  24|  beforeAll(async () => {  |  ^  25|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  26|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/63]⎯  FAIL  src/tests/integration/user.routes.integration.test.ts > User Routes Integration Tests (/api/users) Error: Hook timed out in 10000ms. If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".  ❯ src/tests/integration/user.routes.integration.test.ts:19:3  17|   18|  // Authenticate once before all tests in this suite to get a JWT.  19|  beforeAll(async () => {  |  ^  20|  vi.stubEnv('FRONTEND_URL', 'https://example.com');  21|  const app = (await import('../../../server')).default; ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/63]⎯ ⎯⎯⎯⎯⎯⎯ Failed Tests 35 ⎯⎯⎯⎯⎯⎯⎯  FAIL  src/tests/e2e/admin-dashboard.e2e.test.ts > E2E Admin Dashboard Flow > should allow an admin to log in and access dashboard features TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts:29:30  27|  it('should allow an admin to log in and access dashboard features', …  28|  // 1. Register a new user (initially a regular user)  29|  const registerResponse = await apiClient.registerUser(  |  ^  30|  adminEmail,  31|  adminPassword, Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/admin-dashboard.e2e.test.ts:29:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/63]⎯  FAIL  src/tests/e2e/budget-journey.e2e.test.ts > E2E Budget Management Journey > should complete budget journey: Register -> Create Budget -> Track Spending -> Update -> Delete TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/budget-journey.e2e.test.ts:86:30  84|  it('should complete budget journey: Register -> Create Budget -> Tra…  85|  // Step 1: Register a new user  86|  const registerResponse = await apiClient.registerUser(  |  ^  87|  userEmail,  88|  userPassword, Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/budget-journey.e2e.test.ts:86:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/63]⎯  FAIL  src/tests/e2e/deals-journey.e2e.test.ts > E2E Deals and Price Tracking Journey > should complete deals journey: Register -> Watch Items -> View Prices -> Check Deals TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/deals-journey.e2e.test.ts:96:30  94|  it('should complete deals journey: Register -> Watch Items -> View P…  95|  // Step 1: Register a new user  96|  const registerResponse = await apiClient.registerUser(  |  ^  97|  userEmail,  98|  userPassword, Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/deals-journey.e2e.test.ts:96:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/63]⎯  FAIL  src/tests/e2e/flyer-upload.e2e.test.ts > E2E Flyer Upload and Processing Workflow > should allow a user to upload a flyer and wait for processing to complete TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/flyer-upload.e2e.test.ts:36:30  34|  it('should allow a user to upload a flyer and wait for processing to…  35|  // 1. Register a new user  36|  const registerResponse = await apiClient.registerUser(  |  ^  37|  userEmail,  38|  userPassword, Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/flyer-upload.e2e.test.ts:36:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/63]⎯  FAIL  src/tests/e2e/inventory-journey.e2e.test.ts > E2E Inventory/Expiry Management Journey > should complete inventory journey: Register -> Add Items -> Track Expiry -> Consume -> Configure Alerts TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/inventory-journey.e2e.test.ts:79:30  77|  it('should complete inventory journey: Register -> Add Items -> Trac…  78|  // Step 1: Register a new user  79|  const registerResponse = await apiClient.registerUser(  |  ^  80|  userEmail,  81|  userPassword, Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/inventory-journey.e2e.test.ts:79:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/63]⎯  FAIL  src/tests/e2e/receipt-journey.e2e.test.ts > E2E Receipt Processing Journey > should complete receipt journey: Register -> Upload -> View -> Manage Items -> Add to Inventory TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/receipt-journey.e2e.test.ts:95:30  93|  it('should complete receipt journey: Register -> Upload -> View -> M…  94|  // Step 1: Register a new user  95|  const registerResponse = await apiClient.registerUser(  |  ^  96|  userEmail,  97|  userPassword, Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/receipt-journey.e2e.test.ts:95:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/63]⎯  FAIL  src/tests/e2e/upc-journey.e2e.test.ts > E2E UPC Scanning Journey > should complete full UPC scanning journey: Register -> Scan -> Lookup -> History -> Stats TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/upc-journey.e2e.test.ts:74:30  72|  it('should complete full UPC scanning journey: Register -> Scan -> L…  73|  // Step 1: Register a new user  74|  const registerResponse = await apiClient.registerUser(userEmail, u…  |  ^  75|  expect(registerResponse.status).toBe(201);  76|  Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/upc-journey.e2e.test.ts:74:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/63]⎯  FAIL  src/tests/e2e/user-journey.e2e.test.ts > E2E User Journey > should complete a full user lifecycle: Register -> Login -> Manage List -> Delete Account TypeError: Failed to parse URL from /api/auth/register  ❯ src/tests/e2e/user-journey.e2e.test.ts:31:30  29|  it('should complete a full user lifecycle: Register -> Login -> Mana…  30|  // 1. Register a new user  31|  const registerResponse = await apiClient.registerUser(userEmail, u…  |  ^  32|   33|  expect(registerResponse.status).toBe(201); Caused by: TypeError: Invalid URL  ❯ publicPost src/services/apiClient.ts:186:10  ❯ Module.registerUser src/services/apiClient.ts:829:10  ❯ src/tests/e2e/user-journey.e2e.test.ts:31:46 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_INVALID_URL', input: '/api/auth/register' } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/63]⎯  FAIL  src/services/db/flyer.db.test.ts > Flyer DB Service > getFlyerById > should return a flyer if found AssertionError: expected "vi.fn()" to be called with arguments: [ …(2) ] Received:  1st vi.fn() call:  [ - "SELECT * FROM public.flyers WHERE flyer_id = $1", + " + SELECT + f.*, + json_build_object( + 'store_id', s.store_id, + 'name', s.name, + 'logo_url', s.logo_url, + 'locations', COALESCE( + (SELECT json_agg( + json_build_object( + 'address_line_1', a.address_line_1, + 'city', a.city, + 'province_state', a.province_state, + 'postal_code', a.postal_code + ) + ) + FROM public.store_locations sl + JOIN public.addresses a ON sl.address_id = a.address_id + WHERE sl.store_id = s.store_id), + '[]'::json + ) + ) as store + FROM public.flyers f + LEFT JOIN public.stores s ON f.store_id = s.store_id + WHERE f.flyer_id = $1 + ",  [  123,  ],  ]  Number of calls: 1   ❯ src/services/db/flyer.db.test.ts:644:38 642|  643|  expect(result).toEqual(mockFlyer); 644|  expect(mockPoolInstance.query).toHaveBeenCalledWith(  |  ^ 645|  'SELECT * FROM public.flyers WHERE flyer_id = $1', 646|  [123], ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > createStore > should create a store with just a name DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:41:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > createStore > should create a store with name and logo URL DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:56:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[39/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > createStore > should create a store with created_by user ID TypeError: Cannot read properties of undefined (reading 'user_id')  ❯ src/services/db/store.db.test.ts:77:41  75|  ['test@example.com', 'hash', 'Test User'],  76|  );  77|  const userId = userResult.rows[0].user_id;  |  ^  78|   79|  const storeId = await repo.createStore('User Store', logger, nul… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[40/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > createStore > should reject duplicate store names DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:92:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[41/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > getStoreById > should retrieve a store by ID DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:101:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[42/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > getAllStores > should retrieve all stores DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:120:19 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[43/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > updateStore > should update store name DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:140:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[44/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > updateStore > should update store logo URL DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:150:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[45/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > updateStore > should update both name and logo DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:164:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[46/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > deleteStore > should delete a store DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:185:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[47/63]⎯  FAIL  src/services/db/store.db.test.ts > StoreRepository > searchStoresByName > should find stores by partial name match  FAIL  src/services/db/store.db.test.ts > StoreRepository > searchStoresByName > should be case-insensitive  FAIL  src/services/db/store.db.test.ts > StoreRepository > searchStoresByName > should return empty array for no matches  FAIL  src/services/db/store.db.test.ts > StoreRepository > searchStoresByName > should limit results to 10 by default DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/store.db.test.ts:206:19 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[48/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > createStoreLocation > should link a store to an address DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:75:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[49/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > createStoreLocation > should prevent duplicate store-address pairs DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:109:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[50/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > getLocationsByStoreId > should retrieve all locations for a store DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:134:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[51/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > getLocationsByStoreId > should return empty array for store with no locations DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:180:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[52/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > getStoreWithLocations > should retrieve store with all its locations DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:191:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[53/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > getStoreWithLocations > should work for stores with no locations DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:218:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[54/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > deleteStoreLocation > should delete a store location link DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:229:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[55/63]⎯  FAIL  src/services/db/storeLocation.db.test.ts > StoreLocationRepository > updateStoreLocation > should update a store location to point to a different address DatabaseError: Failed to create store.  ❯ handleDbError src/services/db/errors.db.ts:198:9 196|  // Use the consistent DatabaseError from the processing errors modul… 197|  const errorMessage = options.defaultMessage || `Failed to perform op… 198|  throw new ProcessingDatabaseError(errorMessage);  |  ^ 199| } 200|   ❯ StoreRepository.createStore src/services/db/store.db.ts:40:7  ❯ src/services/db/storeLocation.db.test.ts:269:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[56/63]⎯  FAIL  src/tests/integration/db.integration.test.ts > Database Service Integration Tests > should create a new user and have a corresponding profile  FAIL  src/tests/integration/db.integration.test.ts > Database Service Integration Tests > should be able to find the created user by email TypeError: __vite_ssr_import_1__.userRepo.createUser is not a function  ❯ src/tests/integration/db.integration.test.ts:23:34  21|   22|  // Act: Call the createUser function  23|  testUser = await db.userRepo.createUser(  |  ^  24|  testUserEmail,  25|  passwordHash, ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[57/63]⎯  FAIL  src/tests/integration/shopping-list.integration.test.ts > Shopping List DB Service Tests > should create and retrieve a shopping list for a user TypeError: __vite_ssr_import_1__.userRepo.createUser is not a function  ❯ src/tests/integration/shopping-list.integration.test.ts:15:43  13|  const email = `list-user-${Date.now()}@example.com`;  14|  const passwordHash = await bcrypt.hash('password123', 10);  15|  const userprofile = await db.userRepo.createUser(  |  ^  16|  email,  17|  passwordHash, ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[58/63]⎯  FAIL  src/tests/integration/shopping-list.integration.test.ts > Shopping List DB Service Tests > should not retrieve shopping lists belonging to another user TypeError: __vite_ssr_import_1__.userRepo.createUser is not a function  ❯ src/tests/integration/shopping-list.integration.test.ts:53:43  51|  const email = `privacy-user-${Date.now()}@example.com`;  52|  const passwordHash = await bcrypt.hash('password123', 10);  53|  const userprofile = await db.userRepo.createUser(  |  ^  54|  email,  55|  passwordHash, ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[59/63]⎯  Test Files  38 failed | 204 passed (242)  Tests  35 failed | 3215 passed | 310 skipped (3560)  Start at  07:51:47  Duration  365.44s (transform 298.87s, setup 509.98s, import 589.63s, tests 508.17s, environment 604.34s) [?25h\npm notice npm notice New major version of npm available! 10.8.2 -> 11.7.0 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.7.0 npm notice To update run: npm install -g npm@11.7.0 npm notice \