use axum::http::{self, Request, StatusCode}; use echo::{ app, messages::{Message, MessageBody}, }; use http_body_util::BodyExt; use serde_json::{json, Value}; use tower::ServiceExt; #[tokio::test] async fn test_echo() { let app = app().into_service(); let response = { let request: Message = { let src = "c1".to_string(); let dest = "n1".to_string(); let body = { let msg_id = 1; let echo = "Please echo 35".to_string(); MessageBody::Echo { msg_id, echo } }; Message { src, dest, body } }; let response = app .oneshot( Request::builder() .method(http::Method::POST) .uri("/") .header(http::header::CONTENT_TYPE, mime::APPLICATION_JSON.as_ref()) .body(serde_json::to_string(&request).unwrap()) .unwrap(), ) .await .unwrap(); assert_eq!(response.status(), StatusCode::OK); response }; { let body = response.into_body().collect().await.unwrap().to_bytes(); let body: Value = serde_json::from_slice(&body).unwrap(); let expected = json!( { "src": "n1", "dest": "c1", "body": { "type": "echo_ok", "msg_id": 1, "in_reply_to": 1, "echo": "Please echo 35" } } ); assert_eq!(body, expected); } }