From ff52cac307b22b9b7ca9205ad5a8479ffebb75b9 Mon Sep 17 00:00:00 2001 From: Roy Han Date: Wed, 25 Mar 2026 16:56:37 -0700 Subject: [PATCH] test: wait for turn event --- codex-rs/core/tests/suite/items.rs | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/codex-rs/core/tests/suite/items.rs b/codex-rs/core/tests/suite/items.rs index 5ecdb879fa..a163c61871 100644 --- a/codex-rs/core/tests/suite/items.rs +++ b/codex-rs/core/tests/suite/items.rs @@ -185,30 +185,30 @@ async fn user_turn_tracks_turn_metadata_analytics() -> anyhow::Result<()> { wait_for_event(&codex, |event| matches!(event, EventMsg::TurnComplete(_))).await; let deadline = Instant::now() + Duration::from_secs(10); - let analytics_request = loop { + let event = loop { let requests = server.received_requests().await.unwrap_or_default(); - if let Some(request) = requests + let turn_events = requests .into_iter() - .find(|request| request.url.path() == "/codex/analytics-events/events") - { - break request; + .filter(|request| request.url.path() == "/codex/analytics-events/events") + .filter_map(|request| serde_json::from_slice::(&request.body).ok()) + .flat_map(|payload| { + payload["events"] + .as_array() + .cloned() + .unwrap_or_default() + .into_iter() + }) + .filter(|event| event["event_type"] == "codex_turn_event") + .collect::>(); + if let Some(event) = turn_events.last().cloned() { + break event; } if Instant::now() >= deadline { - panic!("timed out waiting for turn analytics request"); + panic!("timed out waiting for turn analytics event"); } tokio::time::sleep(Duration::from_millis(50)).await; }; - let payload: Value = serde_json::from_slice(&analytics_request.body)?; - let event = payload["events"] - .as_array() - .and_then(|events| { - events - .iter() - .find(|event| event["event_type"] == "codex_turn_event") - }) - .expect("codex_turn_event should be present"); - let event_params = &event["event_params"]; assert_eq!(event_params["sandbox_policy"], "read_only");