use crate::channels::whatsapp::WhatsAppState;
#[test]
fn current_qr_replays_the_last_broadcast() {
let s = WhatsAppState::new();
assert_eq!(s.current_qr(), None, "nothing broadcast yet");
s.broadcast_qr("QR-ABC");
assert_eq!(s.current_qr().as_deref(), Some("QR-ABC"));
s.broadcast_qr("QR-DEF");
assert_eq!(s.current_qr().as_deref(), Some("QR-DEF"), "latest wins");
}
#[test]
fn request_restart_sets_flag_and_clears_stale_qr() {
let s = WhatsAppState::new();
s.broadcast_qr("QR-OLD");
s.request_restart();
assert_eq!(
s.current_qr(),
None,
"stale QR must be cleared so it is not replayed after a reset"
);
assert!(s.take_restart_request(), "a restart is pending");
assert!(
!s.take_restart_request(),
"the request is consumed exactly once"
);
}
#[test]
fn no_restart_pending_by_default() {
let s = WhatsAppState::new();
assert!(!s.take_restart_request());
}
#[tokio::test]
async fn qr_is_locked_after_connect_and_reenabled_on_restart() {
let s = WhatsAppState::new();
assert!(!s.is_connected().await, "not connected initially");
s.broadcast_qr("QR-PRECONNECT");
assert_eq!(s.current_qr().as_deref(), Some("QR-PRECONNECT"));
s.mark_connected();
assert!(s.is_connected().await, "connected after mark_connected");
assert_eq!(s.current_qr(), None, "connecting clears the stale QR");
s.broadcast_qr("QR-STALE");
assert_eq!(s.current_qr(), None, "no QR may reappear once connected");
s.request_restart();
assert!(!s.is_connected().await, "restart clears the connected flag");
s.broadcast_qr("QR-REPAIR");
assert_eq!(s.current_qr().as_deref(), Some("QR-REPAIR"));
}