use crate::door::assistant_test_support::{records, *};
use serde_json::json;
#[test]
fn r4_14_native_page_refusal_halves_until_escaped_records_fit() -> Result {
let f = Fixture::new(json!({"events_after_bytes":10_000}))?;
let items = (1..=8)
.map(|seq| {
let mut value = item(seq);
value["text"] = json!("\"".repeat(400));
value
})
.collect();
let store = records::with_frame(&f, records::rows(items), 4096, |_| Ok(()))?;
let mut stream =
Stream::open(f.answer("GET", "/events?conversation=conversation", &json!({})))?;
stream.event()?;
for seq in 1..=8 {
let event = stream.event()?;
assert!(
event.contains(&format!("id: conversation:{seq}\n")),
"{event}"
);
}
stream.close()?;
let calls = store.finish()?;
let limits: Vec<_> = calls
.iter()
.filter(|r| r["operation"]["method"] == "documents.list")
.filter_map(|r| r["operation"]["params"]["limit"].as_u64())
.collect();
assert!(limits.starts_with(&[64, 32, 16, 8, 4, 2]), "{limits:?}");
assert_eq!(
calls
.iter()
.filter(|r| r["operation"]["method"] == "session.pass")
.count(),
1
);
Ok(())
}
#[test]
fn r4_06_single_record_over_the_native_frame_is_named() -> Result {
let f = Fixture::new(json!({"events_after_bytes":10_000}))?;
let mut value = item(1);
value["text"] = json!("\"".repeat(2300));
let store = records::with_frame(&f, records::rows(vec![value]), 4096, |_| Ok(()))?;
let mut stream =
Stream::open(f.answer("GET", "/events?conversation=conversation", &json!({})))?;
stream.event()?;
let event = stream.event()?;
assert!(
event.contains("assistant_record_item_too_large") && event.contains("max_frame=4096"),
"{event}"
);
stream.close()?;
store.finish()?;
Ok(())
}