#![cfg(feature = "web")]
use actix_web::{test, web, App, HttpMessage, HttpRequest, HttpResponse};
use road_runner_common::middleware::{RequestId, RequestIdMiddleware, REQUEST_ID_HEADER};
async fn echo_request_id(req: HttpRequest) -> HttpResponse {
let request_id = req.extensions().get::<RequestId>().unwrap().as_str().to_string();
HttpResponse::Ok().body(request_id)
}
#[actix_web::test]
async fn request_id_middleware_preserves_valid_incoming_header() {
let app = test::init_service(
App::new().wrap(RequestIdMiddleware).route("/", web::get().to(echo_request_id)),
)
.await;
let req = test::TestRequest::get()
.uri("/")
.insert_header((REQUEST_ID_HEADER, "rid-in"))
.to_request();
let response = test::call_service(&app, req).await;
let header = response.headers().get(REQUEST_ID_HEADER).unwrap().to_str().unwrap().to_string();
let body = test::read_body(response).await;
assert_eq!(header, "rid-in");
assert_eq!(body, "rid-in");
}
#[actix_web::test]
async fn request_id_middleware_generates_id_when_header_missing_or_blank() {
let app = test::init_service(
App::new().wrap(RequestIdMiddleware).route("/", web::get().to(echo_request_id)),
)
.await;
let req = test::TestRequest::get().uri("/").insert_header((REQUEST_ID_HEADER, " ")).to_request();
let response = test::call_service(&app, req).await;
let header = response.headers().get(REQUEST_ID_HEADER).unwrap().to_str().unwrap().to_string();
let body = test::read_body(response).await;
assert!(uuid::Uuid::parse_str(&header).is_ok());
assert_eq!(body, header);
}