use a2a_client::WebA2AClient;
use a2a_client::components::create_sse_stream;
use std::sync::Arc;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};
#[tokio::test]
async fn test_sse_stream_reconnection_logic() {
let mock_server = MockServer::start().await;
Mock::given(method("POST"))
.and(path("/a2a.v1.AgentService/SubscribeToTask"))
.respond_with(ResponseTemplate::new(500))
.mount(&mock_server)
.await;
let client = Arc::new(WebA2AClient::new_http(mock_server.uri()));
let sse = create_sse_stream(client.clone(), "test-task-1".to_string());
use axum::response::IntoResponse;
let response = sse.into_response();
let body = response.into_body();
let _ = tokio::time::timeout(std::time::Duration::from_secs(3), async {
let _bytes = axum::body::to_bytes(body, usize::MAX).await;
})
.await;
let requests = mock_server.received_requests().await.unwrap();
assert!(
requests.len() > 1,
"Should have received multiple requests due to retry logic"
);
}