diff --git a/codex-rs/core/tests/suite/plugins.rs b/codex-rs/core/tests/suite/plugins.rs index a525edeff6..8f501aa77f 100644 --- a/codex-rs/core/tests/suite/plugins.rs +++ b/codex-rs/core/tests/suite/plugins.rs @@ -365,30 +365,29 @@ async fn explicit_plugin_mentions_track_plugin_used_analytics() -> Result<()> { wait_for_event(&codex, |ev| matches!(ev, 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 + if let Some(event) = requests .into_iter() - .find(|request| request.url.path() == "/codex/analytics-events/events") + .filter(|request| request.url.path() == "/codex/analytics-events/events") + .find_map(|request| { + let payload: serde_json::Value = + serde_json::from_slice(&request.body).expect("analytics payload"); + payload["events"].as_array().and_then(|events| { + events + .iter() + .find(|event| event["event_type"] == "codex_plugin_used") + .cloned() + }) + }) { - break request; + break event; } if Instant::now() >= deadline { panic!("timed out waiting for plugin analytics request"); } tokio::time::sleep(Duration::from_millis(50)).await; }; - - let payload: serde_json::Value = - serde_json::from_slice(&analytics_request.body).expect("analytics payload"); - let event = payload["events"] - .as_array() - .and_then(|events| { - events - .iter() - .find(|event| event["event_type"] == "codex_plugin_used") - }) - .expect("codex_plugin_used event should be present"); assert_eq!(event["event_type"], "codex_plugin_used"); assert_eq!(event["event_params"]["plugin_id"], "sample@test"); assert_eq!(event["event_params"]["plugin_name"], "sample");