diff --git a/codex-rs/core/tests/suite/client.rs b/codex-rs/core/tests/suite/client.rs index 61429b2dfc..40664679f5 100644 --- a/codex-rs/core/tests/suite/client.rs +++ b/codex-rs/core/tests/suite/client.rs @@ -901,7 +901,6 @@ async fn history_dedupes_streamed_and_final_messages_across_turns() { let requests = server.received_requests().await.unwrap(); assert_eq!(requests.len(), 3, "expected 3 requests (one per turn)"); - // Replace full-array compare with tail-only raw JSON compare using a single hard-coded value. let r3_input_array = requests[2] .body_json::() .unwrap() @@ -909,60 +908,39 @@ async fn history_dedupes_streamed_and_final_messages_across_turns() { .and_then(|v| v.as_array()) .cloned() .expect("r3 missing input array"); - // We only assert on the last 5 items of the input history for request 3. - // With per-turn environment context injected, the last 5 should be: - // [env_ctx, U2, assistant("Hey there!\n"), env_ctx, U3] - let actual_tail = &r3_input_array[r3_input_array.len() - 5..]; - // env_ctx 1 - assert_eq!(actual_tail[0]["type"], serde_json::json!("message")); - assert_eq!(actual_tail[0]["role"], serde_json::json!("user")); - let env_text_1 = &actual_tail[0]["content"][0]["text"]; - assert!( - env_text_1 - .as_str() - .expect("env text should be string") - .contains("") - ); - - // U2 - assert_eq!( - actual_tail[1], - serde_json::json!({ + // Assert on the last five messages of the input history for request 3. + // We expect the conversation tail to be [U1, A, U2, A, U3], skipping earlier context and developer messages. + let r3_tail_expected = serde_json::json!([ + { "type": "message", "role": "user", - "content": [ { "type": "input_text", "text": "U2" } ] - }) - ); - - // assistant response - assert_eq!( - actual_tail[2], - serde_json::json!({ + "content": [{"type":"input_text","text":"U1"}] + }, + { "type": "message", "role": "assistant", - "content": [ { "type": "output_text", "text": "Hey there!\n" } ] - }) - ); - - // env_ctx 2 - assert_eq!(actual_tail[3]["type"], serde_json::json!("message")); - assert_eq!(actual_tail[3]["role"], serde_json::json!("user")); - let env_text_2 = &actual_tail[3]["content"][0]["text"]; - assert!( - env_text_2 - .as_str() - .expect("env text should be string") - .contains("") - ); - - // U3 - assert_eq!( - actual_tail[4], - serde_json::json!({ + "content": [{"type":"output_text","text":"Hey there!\n"}] + }, + { "type": "message", "role": "user", - "content": [ { "type": "input_text", "text": "U3" } ] - }) - ); + "content": [{"type":"input_text","text":"U2"}] + }, + { + "type": "message", + "role": "assistant", + "content": [{"type":"output_text","text":"Hey there!\n"}] + }, + { + "type": "message", + "role": "user", + "content": [{"type":"input_text","text":"U3"}] + } + ]); + + // skipping earlier context and developer messages + let tail_len = r3_tail_expected.as_array().unwrap().len(); + let actual_tail = &r3_input_array[r3_input_array.len() - tail_len..]; + assert_eq!(serde_json::json!(actual_tail), r3_tail_expected); }