fix(qconnect): resync queue after shuffle mode changes

cx
This commit is contained in:
vicrodh committed 2026-03-13 23:13:16 -06:00
1 parent cf2447f4b2
commit a59daf43dc
1 file changed
+37
+37
View File
@@ -310,6 +310,9 @@ where
let reducer_outcome = apply_event(&mut state.queue, &queue_event, now_ms());
let _metric_name = telemetry::queue_reducer_event_name(reducer_outcome.event_name);
should_emit_queue_update = true;
if matches!(event.event_type, QueueEventType::SrvrCtrlShuffleModeSet) {
should_trigger_resync = true;
}
}
snapshot = state.queue.clone();
}
@@ -1035,6 +1038,40 @@ mod tests {
);
}
#[tokio::test]
async fn shuffle_mode_set_requests_authoritative_queue_state() {
let (app, sink, transport, _events_rx) = build_connected_app().await;
app.apply_server_event(QueueServerEvent {
event_type: QueueEventType::SrvrCtrlShuffleModeSet,
action_uuid: Some("6f9f8d84-cd82-486f-a423-cd467117f39d".to_string()),
queue_version: Some(QueueVersion::new(1, 2)),
payload: json!({
"shuffle_mode": true,
"shuffle_seed": 123,
"shuffle_pivot_queue_item_id": 0,
"autoplay_reset": false,
"autoplay_loading": false
}),
})
.await
.expect("apply shuffle-mode-set event");
let events = sink.snapshot().await;
assert!(events
.iter()
.any(|event| matches!(event, QconnectAppEvent::QueueUpdated(_))));
assert!(events
.iter()
.any(|event| matches!(event, QconnectAppEvent::QueueResyncTriggered)));
let sent = transport.sent_messages().await;
assert!(
!sent.is_empty(),
"expected ask-for-state resync after shuffle"
);
}
#[tokio::test]
async fn late_queue_error_for_concurrency_canceled_action_is_ignored() {
let (app, sink, _, _events_rx) = build_connected_app().await;