use phoxal::api;
use phoxal::bus::ContractBody;
use phoxal::bus::{
BusMetadata, CodecId, ProducerId, RobotInstant, TimeWindow, TimelineId, encoding_string,
};
#[test]
fn encoding_string_carries_only_the_codec() {
let enc = encoding_string(CodecId::MessagePack);
assert_eq!(enc, "phoxal/v0;codec=1");
}
#[test]
fn contract_body_topic_is_version_qualified_on_the_real_tree() {
assert_eq!(
<api::drive::Target as ContractBody>::TOPIC,
"v0.1/drive/target"
);
assert_eq!(
<api::asset::GetRequest as ContractBody>::TOPIC,
"v0.1/asset/get"
);
}
#[test]
fn bus_metadata_for_a_real_body_round_trips() {
let timeline = TimelineId::mint();
let meta = BusMetadata {
codec: CodecId::MessagePack.as_u8(),
producer: ProducerId::mint(),
sequence: 9,
produced_at: Some(TimeWindow::exact(RobotInstant::new(timeline, 42))),
participant: "tester".to_string(),
};
assert_eq!(BusMetadata::decode(&meta.encode()).unwrap(), meta);
let timeless = BusMetadata {
produced_at: None,
..meta
};
let decoded = BusMetadata::decode(&timeless.encode()).unwrap();
assert_eq!(decoded, timeless);
assert_eq!(decoded.produced_exactly_at(), None);
}