use scosh_core::errors::SdkError;
use scosh_core::events::SessionStatus;
use scosh_core::lifecycle::{Lifecycle, LifecycleEvent};
#[test]
fn background_invalidates_input_and_requires_foreground_recovery() {
let mut lifecycle = Lifecycle::new();
assert_eq!(
lifecycle.transition(LifecycleEvent::Connected),
Ok(SessionStatus::Live)
);
let generation = lifecycle.input_generation();
assert_eq!(
lifecycle.transition(LifecycleEvent::Backgrounded),
Ok(SessionStatus::Suspended)
);
assert_eq!(lifecycle.input_generation(), generation + 1);
assert!(!lifecycle.transport_open());
assert_eq!(
lifecycle.transition(LifecycleEvent::Foregrounded),
Ok(SessionStatus::Recovering)
);
assert_eq!(
lifecycle.transition(LifecycleEvent::Connected),
Ok(SessionStatus::Live)
);
}
#[test]
fn close_is_terminal() {
let mut lifecycle = Lifecycle::new();
assert_eq!(
lifecycle.transition(LifecycleEvent::Closed),
Ok(SessionStatus::Closed)
);
assert_eq!(
lifecycle.transition(LifecycleEvent::Connected),
Err(SdkError::SessionClosed)
);
}