use agy_bridge_test_support::*;
async fn request_carrying(server: &MockGeminiServer, marker: &str) -> String {
let posts = server.recorded_posts().await;
posts
.iter()
.rev()
.find(|p| p.body.contains(marker))
.unwrap_or_else(|| {
panic!(
"no recorded request carried marker {marker:?}; recorded {} post(s)",
posts.len()
)
})
.body
.clone()
}
#[test]
fn first_turn_carries_only_itself() {
let rt = multi_thread_rt();
rt.block_on(async {
let server =
MockGeminiServer::start(vec![MockResponse::Text("ONE_MODEL_REPLY".into())]).await;
let agent = BRIDGE
.agent(agent_config(&server.base_url(), "history-baseline"))
.await
.expect("agent");
let reply = agent.chat_text("ONE_USER_MSG").await.expect("turn 1");
assert_eq!(reply.trim(), "ONE_MODEL_REPLY", "turn 1 reply");
let wire = request_carrying(&server, "ONE_USER_MSG").await;
assert!(
wire.contains("ONE_USER_MSG"),
"turn-1 request must carry its own user msg. Body: {wire}"
);
agent.shutdown().await.expect("shutdown");
});
}
#[test]
fn history_accumulates_cumulatively_on_the_wire() {
let rt = multi_thread_rt();
rt.block_on(async {
let server = MockGeminiServer::start(vec![
MockResponse::Text("ONE_MODEL_REPLY".into()),
MockResponse::Text("TWO_MODEL_REPLY".into()),
MockResponse::Text("THREE_MODEL_REPLY".into()),
])
.await;
let agent = BRIDGE
.agent(agent_config(&server.base_url(), "history-cumulative"))
.await
.expect("agent");
let t1 = agent.chat_text("ONE_USER_MSG").await.expect("turn 1");
assert_eq!(t1.trim(), "ONE_MODEL_REPLY", "turn 1 reply");
let t2 = agent.chat_text("TWO_USER_MSG").await.expect("turn 2");
assert_eq!(t2.trim(), "TWO_MODEL_REPLY", "turn 2 reply");
let turn2_wire = request_carrying(&server, "TWO_USER_MSG").await;
assert!(
turn2_wire.contains("ONE_USER_MSG"),
"turn-2 request must resend turn-1 user msg. Body: {turn2_wire}"
);
assert!(
turn2_wire.contains("ONE_MODEL_REPLY"),
"turn-2 request must resend turn-1 model reply. Body: {turn2_wire}"
);
let t3 = agent.chat_text("THREE_USER_MSG").await.expect("turn 3");
assert_eq!(t3.trim(), "THREE_MODEL_REPLY", "turn 3 reply");
let wire = request_carrying(&server, "THREE_USER_MSG").await;
for marker in [
"ONE_USER_MSG",
"ONE_MODEL_REPLY",
"TWO_USER_MSG",
"TWO_MODEL_REPLY",
] {
assert!(
wire.contains(marker),
"turn-3 request must resend the full cumulative history \
(missing {marker:?}). Body: {wire}"
);
}
agent.shutdown().await.expect("shutdown");
});
}