use std::sync::Arc;
use std::time::Duration;
use bytes::Bytes;
use rifts::codec::JsonCodec;
use rifts::codec::codec::CodecExt;
use rifts::frame::{Codec as FrameCodec, Frame, FrameFlags, FrameType};
use rifts::session::TokenAuth;
use rifts::transport::frame_codec::{decode_binary_frame, encode_frame};
use rifts::{SessionId, SubscribeIntent, TopicStore};
use tokio_tungstenite::tungstenite::Message as WsMessage;
#[test]
fn codec_ext_generic() {
let c = JsonCodec;
#[derive(serde::Serialize, serde::Deserialize, PartialEq, Debug)]
struct S {
a: u32,
}
let s = S { a: 7 };
let bytes = c.encode(&s).unwrap();
let back: S = c.decode(&bytes).unwrap();
assert_eq!(back, s);
}
#[test]
fn subscribe_intent_is_send_sync() {
fn assert_send_sync<T: Send + Sync>() {}
assert_send_sync::<SubscribeIntent>();
assert_send_sync::<TopicStore>();
}
#[test]
fn encode_decode_session_id() {
let s = SessionId::new();
let s2 = s.clone();
assert_eq!(s, s2);
}
#[test]
fn frame_encode_decode_round_trip() {
let f = Frame {
frame_type: FrameType::Data,
codec: FrameCodec::Json,
payload: Some(Bytes::from_static(b"hello")),
flags: FrameFlags::empty().with(FrameFlags::REQUIRES_ACK),
frame_id: 42,
timestamp: 1000,
..Frame::default()
};
let bytes = encode_frame(&f).unwrap();
let back = decode_binary_frame(&bytes).unwrap();
assert_eq!(back.frame_type, FrameType::Data);
assert_eq!(back.codec, FrameCodec::Json);
assert_eq!(back.frame_id, 42);
assert_eq!(back.timestamp, 1000);
assert!(back.flags.contains(FrameFlags::REQUIRES_ACK));
assert_eq!(back.payload.as_deref(), Some(&b"hello"[..]));
}
#[test]
fn token_auth_can_be_constructed() {
let _ = TokenAuth::new();
let _ = Arc::new(TokenAuth::new());
}
#[test]
fn ws_message_variants_compile() {
let _ = WsMessage::Binary(vec![0u8; 4]);
let _ = WsMessage::Text("hello".to_string());
}
#[test]
fn duration_default() {
let _ = Duration::from_secs(60);
}