veza/vitest-output.txt
senke ae586f6134 Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales

Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config

Bloc C - Backend:
- Extraction routes_auth.go depuis router.go

Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 17:23:32 +01:00

1181 lines
77 KiB
Text
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

RUN v3.2.4 /home/senke/git/talas/veza/apps/web
src/hooks/usePreload.test.ts (7 tests | 3 failed) 180ms
× usePreload > should preload images 96ms
→ waitFor is not defined
× usePreload > should preload scripts 12ms
→ waitFor is not defined
× usePreload > should preload styles 11ms
→ waitFor is not defined
✓ usePreload > should prefetch resources 14ms
✓ usePreload > should cleanup preload links on unmount 13ms
✓ usePreloadRoute > should prefetch route 7ms
✓ usePreloadRoute > should cleanup prefetch link on unmount 5ms
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue POST requests
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue POST requests
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks {"requestId":"req_1771008236442_pzzrch99v","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should not queue GET requests
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue PUT requests
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue PUT requests
[INFO] [OfflineQueue] Request queued: PUT /api/v1/tracks/123 {"requestId":"req_1771008236452_mcqgdhv9g","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue DELETE requests
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue DELETE requests
[INFO] [OfflineQueue] Request queued: DELETE /api/v1/tracks/123 {"requestId":"req_1771008236454_eg0drj5ov","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue PATCH requests
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should queue PATCH requests
[INFO] [OfflineQueue] Request queued: PATCH /api/v1/tracks/123 {"requestId":"req_1771008236455_f7r5s8cmf","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should respect priority levels
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should respect priority levels
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks {"requestId":"req_1771008236460_8sa9kbgbf","priority":"low","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should respect priority levels
[INFO] [OfflineQueue] Request queued: POST /api/v1/playlists {"requestId":"req_1771008236460_vc8ah51et","priority":"high","queueSize":2}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should respect priority levels
[INFO] [OfflineQueue] Request queued: POST /api/v1/comments {"requestId":"req_1771008236461_yzpkdfom4","priority":"normal","queueSize":3}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/0 {"requestId":"req_1771008236463_2xbedtobt","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/1 {"requestId":"req_1771008236463_j8rg176m0","priority":"normal","queueSize":2}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/2 {"requestId":"req_1771008236464_i4gg9kgbr","priority":"normal","queueSize":3}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/3 {"requestId":"req_1771008236464_q6dw1ufgx","priority":"normal","queueSize":4}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/4 {"requestId":"req_1771008236465_jmmcmjoqi","priority":"normal","queueSize":5}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/5 {"requestId":"req_1771008236465_qzw3r3uxw","priority":"normal","queueSize":6}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/6 {"requestId":"req_1771008236465_7spjbmy6y","priority":"normal","queueSize":7}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/7 {"requestId":"req_1771008236465_od52yzbjg","priority":"normal","queueSize":8}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/8 {"requestId":"req_1771008236466_cvamk9py6","priority":"normal","queueSize":9}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/9 {"requestId":"req_1771008236466_a5b24n90a","priority":"normal","queueSize":10}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/10 {"requestId":"req_1771008236466_4icvd2haj","priority":"normal","queueSize":11}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/11 {"requestId":"req_1771008236466_40p0716gu","priority":"normal","queueSize":12}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/12 {"requestId":"req_1771008236467_56pjqkbdj","priority":"normal","queueSize":13}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/13 {"requestId":"req_1771008236467_red8lifgt","priority":"normal","queueSize":14}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/14 {"requestId":"req_1771008236467_1rl0ix36m","priority":"normal","queueSize":15}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/15 {"requestId":"req_1771008236467_49a37sufo","priority":"normal","queueSize":16}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/16 {"requestId":"req_1771008236467_gqd8dje06","priority":"normal","queueSize":17}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/17 {"requestId":"req_1771008236468_4o7m4xjd3","priority":"normal","queueSize":18}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/18 {"requestId":"req_1771008236468_2xwhnij3x","priority":"normal","queueSize":19}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/19 {"requestId":"req_1771008236468_desbzitpl","priority":"normal","queueSize":20}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/20 {"requestId":"req_1771008236468_leimga6ns","priority":"normal","queueSize":21}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/21 {"requestId":"req_1771008236469_ss741qz1i","priority":"normal","queueSize":22}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/22 {"requestId":"req_1771008236469_2gxqutp96","priority":"normal","queueSize":23}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/23 {"requestId":"req_1771008236469_rra5p4tgg","priority":"normal","queueSize":24}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/24 {"requestId":"req_1771008236469_vk9aji61p","priority":"normal","queueSize":25}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/25 {"requestId":"req_1771008236469_6jue5df83","priority":"normal","queueSize":26}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/26 {"requestId":"req_1771008236470_xav3u94v1","priority":"normal","queueSize":27}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/27 {"requestId":"req_1771008236470_gac278wbo","priority":"normal","queueSize":28}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/28 {"requestId":"req_1771008236470_nqb5t9e5q","priority":"normal","queueSize":29}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/29 {"requestId":"req_1771008236470_kd89fwakx","priority":"normal","queueSize":30}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/30 {"requestId":"req_1771008236470_zqlwmkmh6","priority":"normal","queueSize":31}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/31 {"requestId":"req_1771008236471_1c5mgzwl5","priority":"normal","queueSize":32}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/32 {"requestId":"req_1771008236471_ohdyf3o63","priority":"normal","queueSize":33}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/33 {"requestId":"req_1771008236471_klyvebzxj","priority":"normal","queueSize":34}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/34 {"requestId":"req_1771008236471_kw07cxrur","priority":"normal","queueSize":35}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/35 {"requestId":"req_1771008236471_82c5ueke2","priority":"normal","queueSize":36}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/36 {"requestId":"req_1771008236472_uopsw0s4i","priority":"normal","queueSize":37}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/37 {"requestId":"req_1771008236472_kcixn7afs","priority":"normal","queueSize":38}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/38 {"requestId":"req_1771008236472_iq9lcubm3","priority":"normal","queueSize":39}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/39 {"requestId":"req_1771008236472_l9kh5lvxz","priority":"normal","queueSize":40}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/40 {"requestId":"req_1771008236473_rhwxclkyb","priority":"normal","queueSize":41}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/41 {"requestId":"req_1771008236473_u3yxz0qbr","priority":"normal","queueSize":42}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/42 {"requestId":"req_1771008236473_54kr8mroz","priority":"normal","queueSize":43}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/43 {"requestId":"req_1771008236473_1xs1eb3jg","priority":"normal","queueSize":44}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/44 {"requestId":"req_1771008236473_gjodl8u81","priority":"normal","queueSize":45}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/45 {"requestId":"req_1771008236474_r3b8zi9c0","priority":"normal","queueSize":46}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/46 {"requestId":"req_1771008236474_0avgmynl0","priority":"normal","queueSize":47}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/47 {"requestId":"req_1771008236474_c97og8et3","priority":"normal","queueSize":48}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/48 {"requestId":"req_1771008236474_jo6vcufo1","priority":"normal","queueSize":49}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/49 {"requestId":"req_1771008236475_dk7mzbdhi","priority":"normal","queueSize":50}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/50 {"requestId":"req_1771008236475_i13gaar1x","priority":"normal","queueSize":51}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/51 {"requestId":"req_1771008236475_w50c1c2wm","priority":"normal","queueSize":52}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/52 {"requestId":"req_1771008236476_pz92nmmzg","priority":"normal","queueSize":53}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/53 {"requestId":"req_1771008236476_vk81lhxvl","priority":"normal","queueSize":54}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/54 {"requestId":"req_1771008236476_tqiyq88rq","priority":"normal","queueSize":55}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/55 {"requestId":"req_1771008236477_tt53f0peo","priority":"normal","queueSize":56}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/56 {"requestId":"req_1771008236477_54bdukfxn","priority":"normal","queueSize":57}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/57 {"requestId":"req_1771008236477_dizgyii0g","priority":"normal","queueSize":58}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/58 {"requestId":"req_1771008236477_bktdae6wc","priority":"normal","queueSize":59}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/59 {"requestId":"req_1771008236478_kp7j0p47e","priority":"normal","queueSize":60}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/60 {"requestId":"req_1771008236478_k1szjn4jw","priority":"normal","queueSize":61}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/61 {"requestId":"req_1771008236478_wirgj6zun","priority":"normal","queueSize":62}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/62 {"requestId":"req_1771008236478_cvdjrpj55","priority":"normal","queueSize":63}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/63 {"requestId":"req_1771008236479_xw3ipn5ud","priority":"normal","queueSize":64}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/64 {"requestId":"req_1771008236479_q2m90q7c1","priority":"normal","queueSize":65}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/65 {"requestId":"req_1771008236479_yqb2bu3u6","priority":"normal","queueSize":66}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/66 {"requestId":"req_1771008236479_zpfqo6rur","priority":"normal","queueSize":67}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/67 {"requestId":"req_1771008236480_4cxe7apaa","priority":"normal","queueSize":68}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/68 {"requestId":"req_1771008236480_qj4ntbu0e","priority":"normal","queueSize":69}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/69 {"requestId":"req_1771008236480_uniwy8lj8","priority":"normal","queueSize":70}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/70 {"requestId":"req_1771008236480_3ebwiftaw","priority":"normal","queueSize":71}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/71 {"requestId":"req_1771008236481_el1j76ro9","priority":"normal","queueSize":72}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/72 {"requestId":"req_1771008236481_el97sto6t","priority":"normal","queueSize":73}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/73 {"requestId":"req_1771008236481_37vbsds3w","priority":"normal","queueSize":74}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/74 {"requestId":"req_1771008236482_ikqv47k5f","priority":"normal","queueSize":75}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/75 {"requestId":"req_1771008236482_rbayzjxhw","priority":"normal","queueSize":76}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/76 {"requestId":"req_1771008236482_2px6lnwqg","priority":"normal","queueSize":77}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/77 {"requestId":"req_1771008236482_x07zi5ng1","priority":"normal","queueSize":78}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/78 {"requestId":"req_1771008236483_238ydws0h","priority":"normal","queueSize":79}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/79 {"requestId":"req_1771008236483_tkdsvqxbw","priority":"normal","queueSize":80}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/80 {"requestId":"req_1771008236483_vo20i0kbl","priority":"normal","queueSize":81}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/81 {"requestId":"req_1771008236484_6o467fi6s","priority":"normal","queueSize":82}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/82 {"requestId":"req_1771008236484_806z951gn","priority":"normal","queueSize":83}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/83 {"requestId":"req_1771008236484_fdoef7m4x","priority":"normal","queueSize":84}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/84 {"requestId":"req_1771008236485_wcu4td6zh","priority":"normal","queueSize":85}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/85 {"requestId":"req_1771008236485_jek5pgbxf","priority":"normal","queueSize":86}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/86 {"requestId":"req_1771008236485_pzvskpczq","priority":"normal","queueSize":87}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/87 {"requestId":"req_1771008236485_vdbt5nfto","priority":"normal","queueSize":88}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/88 {"requestId":"req_1771008236486_z2acn8hix","priority":"normal","queueSize":89}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/89 {"requestId":"req_1771008236486_wrl2sn0l5","priority":"normal","queueSize":90}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/90 {"requestId":"req_1771008236486_xsrjcry95","priority":"normal","queueSize":91}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/91 {"requestId":"req_1771008236487_uu4s2b7bv","priority":"normal","queueSize":92}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/92 {"requestId":"req_1771008236487_sps83ba5u","priority":"normal","queueSize":93}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/93 {"requestId":"req_1771008236487_6lpzbv1rn","priority":"normal","queueSize":94}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/94 {"requestId":"req_1771008236487_vlk076ey6","priority":"normal","queueSize":95}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/95 {"requestId":"req_1771008236488_qe55ccp93","priority":"normal","queueSize":96}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/96 {"requestId":"req_1771008236488_gp7eu2vky","priority":"normal","queueSize":97}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/97 {"requestId":"req_1771008236488_96887ph12","priority":"normal","queueSize":98}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/98 {"requestId":"req_1771008236488_roc8ro4sn","priority":"normal","queueSize":99}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/99 {"requestId":"req_1771008236489_8h9k5rwue","priority":"normal","queueSize":100}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > queueRequest > should evict oldest low-priority request when queue is full
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks/new {"requestId":"req_1771008236489_roma172vo","priority":"low","queueSize":100}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should process queued requests when online
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should process queued requests when online
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks {"requestId":"req_1771008236492_5q0sb6iml","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should process queued requests when online
[INFO] [OfflineQueue] Processing 1 queued requests
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should process queued requests when online
[INFO] [OfflineQueue] Request succeeded: POST /api/v1/tracks {"requestId":"req_1771008236492_5q0sb6iml"}
stderr | src/features/streaming/hooks/usePlaybackAnalytics.test.ts > usePlaybackAnalytics > should send analytics periodically
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stdout | src/features/streaming/hooks/usePlaybackAnalytics.test.ts > usePlaybackAnalytics > should handle errors when sending analytics
[ERROR] [PlaybackAnalytics] Failed to record playback analytics after all retries: {"error":{}}
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should handle stats_update messages
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should call onAnalyticsUpdate callback when analytics update is received
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should call onStatsUpdate callback when stats update is received
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should disconnect when disconnect is called
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should reconnect on connection loss
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should cleanup on unmount
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackAnalytics.test.ts > usePlaybackAnalytics > should clear error
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should handle invalid JSON messages gracefully
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackRealtime.test.ts > usePlaybackRealtime > should update connection state when trackId changes
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stderr | src/features/streaming/hooks/usePlaybackAnalytics.test.ts > usePlaybackAnalytics > should limit completion rate to 100%
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
Warning: An update to TestComponent inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
at TestComponent (/home/senke/git/talas/veza/node_modules/@testing-library/react/dist/pure.js:307:5)
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should process queued requests when online
[INFO] [OfflineQueue] All queued requests processed successfully
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should not process queue when offline
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should not process queue when offline
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks {"requestId":"req_1771008236604_d6l2itj66","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should retry failed requests up to max retries
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should retry failed requests up to max retries
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks {"requestId":"req_1771008236607_93kx9dmpf","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should retry failed requests up to max retries
[INFO] [OfflineQueue] Processing 1 queued requests
src/features/streaming/hooks/usePlaybackRealtime.test.ts (13 tests | 8 failed) 171ms
✓ usePlaybackRealtime > should initialize with default state 50ms
✓ usePlaybackRealtime > should connect to WebSocket when trackId is provided and autoConnect is true 10ms
✓ usePlaybackRealtime > should not connect when autoConnect is false 3ms
✓ usePlaybackRealtime > should subscribe to track after connection 6ms
✓ usePlaybackRealtime > should handle analytics_update messages 16ms
× usePlaybackRealtime > should handle stats_update messages 20ms
→ waitFor is not defined
× usePlaybackRealtime > should call onAnalyticsUpdate callback when analytics update is received 6ms
→ waitFor is not defined
× usePlaybackRealtime > should call onStatsUpdate callback when stats update is received 4ms
→ waitFor is not defined
× usePlaybackRealtime > should disconnect when disconnect is called 12ms
→ waitFor is not defined
× usePlaybackRealtime > should reconnect on connection loss 9ms
→ waitFor is not defined
× usePlaybackRealtime > should cleanup on unmount 4ms
→ waitFor is not defined
× usePlaybackRealtime > should handle invalid JSON messages gracefully 13ms
→ waitFor is not defined
× usePlaybackRealtime > should update connection state when trackId changes 4ms
→ waitFor is not defined
✓ src/features/streaming/hooks/usePlaybackAnalytics.test.ts (19 tests) 171ms
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should retry on network error
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:56.933Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should retry on network error
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:57.933Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should save to localStorage on final failure
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:56.966Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should save to localStorage on final failure
[INFO] [PlaybackAnalytics] Saved event to localStorage (1 pending) {"trackId":"42","playTime":180}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should not retry on 400 error
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Invalid request","status":400,"timestamp":"2026-02-13T18:43:56.983Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should not retry on 400 error
[INFO] [PlaybackAnalytics] Saved event to localStorage (1 pending) {"trackId":"42","playTime":180}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should not retry on 401 error
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Unauthorized","status":401,"timestamp":"2026-02-13T18:43:56.989Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should not retry on 401 error
[INFO] [PlaybackAnalytics] Saved event to localStorage (1 pending) {"trackId":"42","playTime":180}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should call onError callback on error
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Server error","status":500,"timestamp":"2026-02-13T18:43:56.994Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should call onError callback on error
[INFO] [PlaybackAnalytics] Saved event to localStorage (1 pending) {"trackId":"42","playTime":180}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should call onRetry callback on retry
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:57.002Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should skip retry if skipRetry option is true
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Server error","status":500,"timestamp":"2026-02-13T18:43:57.012Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should skip retry if skipRetry option is true
[INFO] [PlaybackAnalytics] Saved event to localStorage (1 pending) {"trackId":"42","playTime":180}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > recordPlaybackEvent > should skip fallback if skipFallback option is true
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:57.017Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > getPlaybackDashboard > should retry on network error
[ERROR] [PlaybackAnalytics] Failed to get dashboard: {"trackId":"42","error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:57.027Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > retryPendingAnalytics > should retry pending analytics successfully
[INFO] [PlaybackAnalytics] Retried 1 pending events
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > retryPendingAnalytics > should remove events after max retries
[ERROR] [PlaybackAnalytics] Failed to record event: {"trackId":"42","playTime":180,"error":"Network error: Unable to connect to server. Please check your connection and try again.","status":0,"timestamp":"2026-02-13T18:43:57.049Z"}
stdout | src/features/streaming/services/playbackAnalyticsService.test.ts > playbackAnalyticsService > retryPendingAnalytics > should remove events after max retries
[WARN] [PlaybackAnalytics] Removed event after 5 failed retries {"trackId":"42"}
✓ src/features/streaming/services/playbackAnalyticsService.test.ts (17 tests) 161ms
stdout | src/features/streaming/components/PlaybackSummary.test.tsx > PlaybackSummary > should render error state
[ERROR] Failed to load playback summary: {"message":"Failed to fetch"}
stderr | src/features/auth/pages/RegisterPage.test.tsx > RegisterPage > should render register form
⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition.
⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath.
✓ src/features/streaming/components/PlaybackSummary.test.tsx (12 tests) 777ms
stderr | src/features/settings/pages/SettingsPage.test.tsx > SettingsPage > should load and display settings
⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition.
⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath.
stderr | src/features/auth/pages/ResetPasswordPage.test.tsx > ResetPasswordPage > should render reset password form when token is present
⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition.
⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath.
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should retry failed requests up to max retries
[ERROR] [OfflineQueue] Request failed after 3 retries: POST /api/v1/tracks {"requestId":"req_1771008236607_93kx9dmpf","error":{}}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should retry failed requests up to max retries
[INFO] [OfflineQueue] All queued requests processed successfully
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should remove request from queue after max retries
[INFO] [OfflineQueue] Queue cleared
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should remove request from queue after max retries
[INFO] [OfflineQueue] Request queued: POST /api/v1/tracks {"requestId":"req_1771008239619_ndpz4evee","priority":"normal","queueSize":1}
stdout | src/services/offlineQueue.test.ts > OfflineQueueService > processQueue > should remove request from queue after max retries
[INFO] [OfflineQueue] Processing 1 queued requests
src/features/settings/pages/SettingsPage.test.tsx (6 tests | 2 failed) 2488ms
✓ SettingsPage > should load and display settings 161ms
✓ SettingsPage > should display loading state 18ms
✓ SettingsPage > should save settings on button click 123ms
✓ SettingsPage > should display validation errors 37ms
× SettingsPage > should handle load error 1031ms
→ Unable to find an element with the text: /failed to load settings/i. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
Ignored nodes: comments, script, style
<body>
<div>
<div
class="container mx-auto px-4 py-8 flex items-center justify-center min-h-layout-page"
>
<div
class="flex flex-col rounded-lg text-card-foreground transition-[box-shadow,background-color,border-color] duration-[var(--sumi-duration-normal)] ease-out relative overflow-hidden bg-card border shadow-card hover:shadow-card-hover hover:bg-card/95 border-destructive/30 glass"
data-slot="card"
>
<div
class="relative z-10 w-full h-full flex flex-col"
>
<div
class="p-4 pt-6"
data-slot="card-content"
>
<div
aria-live="polite"
class="rounded-lg border flex shadow-card bg-destructive/10 border-destructive/30 text-destructive p-4 gap-4"
role="alert"
>
<div
class="flex-shrink-0 pt-0.5"
>
<svg
class="lucide lucide-alert-circle w-5 h-5 text-destructive"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<line
x1="12"
x2="12"
y1="8"
y2="12"
/>
<line
x1="12"
x2="12.01"
y1="16"
y2="16"
/>
</svg>
</div>
<div
class="flex-1 min-w-0"
>
<div
class="font-semibold mb-1 text-base"
>
Error
</div>
<div
class="opacity-90 text-sm"
>
Une erreur inattendue s'est produite. Veuillez réessayer.
</div>
<div
class="mt-4 flex flex-wrap gap-2 items-center"
>
<button
class="inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-sans font-medium tracking-tight transition-[color,box-shadow,border-color,background-color] duration-[var(--sumi-duration-normal)] ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:shadow-[var(--sumi-shadow-glow)] disabled:pointer-events-none disabled:opacity-50 gap-2 border hover:border-border h-10 px-4 py-2 border-current text-current hover:bg-current/10 bg-transparent"
>
Retry
</button>
<button
class="inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-sans font-medium tracking-tight transition-[color,box-shadow,border-color,background-color] duration-[var(--sumi-duration-normal)] ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:shadow-[var(--sumi-shadow-glow)] disabled:pointer-events-none disabled:opacity-50 gap-2 h-10 px-4 py-2 text-current hover:bg-current/10 hover:text-current"
>
<svg
class="lucide lucide-chevron-down w-4 h-4 mr-1"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="m6 9 6 6 6-6"
/>
</svg>
Show Details
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class="fixed z-50 flex flex-col gap-2 top-4 right-4"
/>
</div>
</body>
Ignored nodes: comments, script, style
<html>
<head />
<body>
<div>
<div
class="container mx-auto px-4 py-8 flex items-center justify-center min-h-layout-page"
>
<div
class="flex flex-col rounded-lg text-card-foreground transition-[box-shadow,background-color,border-color] duration-[var(--sumi-duration-normal)] ease-out relative overflow-hidden bg-card border shadow-card hover:shadow-card-hover hover:bg-card/95 border-destructive/30 glass"
data-slot="card"
>
<div
class="relative z-10 w-full h-full flex flex-col"
>
<div
class="p-4 pt-6"
data-slot="card-content"
>
<div
aria-live="polite"
class="rounded-lg border flex shadow-card bg-destructive/10 border-destructive/30 text-destructive p-4 gap-4"
role="alert"
>
<div
class="flex-shrink-0 pt-0.5"
>
<svg
class="lucide lucide-alert-circle w-5 h-5 text-destructive"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<line
x1="12"
x2="12"
y1="8"
y2="12"
/>
<line
x1="12"
x2="12.01"
y1="16"
y2="16"
/>
</svg>
</div>
<div
class="flex-1 min-w-0"
>
<div
class="font-semibold mb-1 text-base"
>
Error
</div>
<div
class="opacity-90 text-sm"
>
Une erreur inattendue s'est produite. Veuillez réessayer.
</div>
<div
class="mt-4 flex flex-wrap gap-2 items-center"
>
<button
class="inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-sans font-medium tracking-tight transition-[color,box-shadow,border-color,background-color] duration-[var(--sumi-duration-normal)] ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:shadow-[var(--sumi-shadow-glow)] disabled:pointer-events-none disabled:opacity-50 gap-2 border hover:border-border h-10 px-4 py-2 border-current text-current hover:bg-current/10 bg-transparent"
>
Retry
</button>
<button
class="inline-flex items-center justify-center whitespace-nowrap rounded-full text-sm font-sans font-medium tracking-tight transition-[color,box-shadow,border-color,background-color] duration-[var(--sumi-duration-normal)] ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:shadow-[var(--sumi-shadow-glow)] disabled:pointer-events-none disabled:opacity-50 gap-2 h-10 px-4 py-2 text-current hover:bg-current/10 hover:text-current"
>
<svg
class="lucide lucide-chevron-down w-4 h-4 mr-1"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="m6 9 6 6 6-6"
/>
</svg>
Show Details
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class="fixed z-50 flex flex-col gap-2 top-4 right-4"
/>
</div>
</body>
</html>
× SettingsPage > should handle save error 1086ms
→ expected "spy" to be called at least once
Ignored nodes: comments, script, style
<html>
<head />
<body>
<div>
<div
class="container mx-auto px-4 py-8 pb-24 max-w-5xl"
>
<div
class="mb-8 flex items-end justify-between"
>
<div>
<h1
class="text-display font-heading text-foreground mb-2"
>
System Config
</h1>
<p
class="text-muted-foreground flex items-center gap-2"
>
<svg
class="lucide lucide-shield w-4 h-4 text-primary"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10"
/>
</svg>
Manage your neural link and interface preferences.
</p>
</div>
<button
class="inline-flex items-center justify-center whitespace-nowrap font-sans tracking-tight transition-[color,box-shadow,border-color,background-color] duration-[var(--sumi-duration-normal)] ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:shadow-[var(--sumi-shadow-glow)] disabled:pointer-events-none disabled:opacity-50 gap-2 bg-primary text-primary-foreground hover:bg-primary/90 border border-transparent font-semibold h-12 rounded-full px-8 text-base shadow-glow-cyan min-w-36"
>
<svg
class="lucide lucide-save mr-2 h-4 w-4"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"
/>
<polyline
points="17 21 17 13 7 13 7 21"
/>
<polyline
points="7 3 7 8 15 8"
/>
</svg>
 Save Config
</button>
</div>
<div
class="flex flex-col rounded-lg text-card-foreground transition-[box-shadow,background-color,border-color] duration-[var(--sumi-duration-normal)] ease-out relative dark:bg-black/20 border overflow-hidden border-border bg-card/80 backdrop-blur-xl"
data-slot="card"
>
<div
class="relative z-10 w-full h-full flex flex-col"
>
<div
class="p-6 border-b border-border bg-muted/20 flex items-center gap-2"
>
<svg
class="lucide lucide-sliders w-5 h-5 text-primary"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<line
x1="4"
x2="4"
y1="21"
y2="14"
/>
<line
x1="4"
x2="4"
y1="10"
y2="3"
/>
<line
x1="12"
x2="12"
y1="21"
y2="12"
/>
<line
x1="12"
x2="12"
y1="8"
y2="3"
/>
<line
x1="20"
x2="20"
y1="21"
y2="16"
/>
<line
x1="20"
x2="20"
y1="12"
y2="3"
/>
<line
x1="2"
x2="6"
y1="14"
y2="14"
/>
<line
x1="10"
x2="14"
y1="8"
y2="8"
/>
<line
x1="18"
x2="22"
y1="16"
y2="16"
/>
</svg>
<h2
class="font-bold text-lg"
>
Global Preferences
</h2>
</div>
<div
class="p-6"
>
<div
data-testid="settings-tabs"
>
<button>
Change Language
</button>
</div>
</div>
</div>
</div>
</div>
<div
class="fixed z-50 flex flex-col gap-2 top-4 right-4"
/>
</div>
</body>
</html>