aro-web 1.0.0

HTTP/ADR layer for the Aro web framework
Documentation
//! Integration tests for body size limit support.

#![cfg(feature = "test-utils")]

use aro_web::App;
use aro_web::test::TestClient;
use axum::Router;
use axum::routing::post;
use serde::{Deserialize, Serialize};

use aro_web::json_body::JsonBody;

#[derive(Debug, Serialize, Deserialize)]
struct Payload {
    data: String,
}

async fn echo(JsonBody(payload): JsonBody<Payload>) -> axum::Json<Payload> {
    axum::Json(payload)
}

#[tokio::test]
async fn body_under_limit_succeeds() {
    let router = Router::new().route("/echo", post(echo));
    let app = App::new().body_limit(1024).routes(router).build();
    let client = TestClient::new(app);

    let payload = Payload {
        data: "hello".to_string(),
    };
    let resp = client.post("/echo").json(&payload).send().await;
    resp.assert_status(200);

    let body: Payload = resp.json();
    assert_eq!(body.data, "hello");
}

#[tokio::test]
async fn body_over_limit_returns_413() {
    // Set a very small limit (32 bytes) so the JSON body exceeds it
    let router = Router::new().route("/echo", post(echo));
    let app = App::new().body_limit(32).routes(router).build();
    let client = TestClient::new(app);

    let payload = Payload {
        data: "x".repeat(200),
    };
    let resp = client.post("/echo").json(&payload).send().await;
    resp.assert_status(413);
}