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 [36m
[39m [36m[39m [36m[39m [0mManage your neural link and interface preferences.[0m [36m
[39m [36m