lil_http 0.1.2

A simple web framework with no external dependencies
Documentation
use lil_http::{Body, Response, Server};
use serde_json::{json, Value};
use serial_test::serial;
use std::collections::HashMap;

#[tokio::test]
#[serial]
async fn test_http_lifecycle() {
    let mut server = Server::new().await.unwrap();

    server.routes.get("/", |_| Response::text("Hello, World!"));

    tokio::spawn(async move {
        server.run().await;
    });

    let client = reqwest::Client::new();
    let response = client.get("http://localhost:3000/").send().await.unwrap();

    assert_eq!(response.status(), 200);
    assert_eq!(response.text().await.unwrap(), "Hello, World!");
}

#[tokio::test]
#[serial]
async fn test_http_lifecycle_with_port() {
    let mut server = Server::with_port("3001").await.unwrap();

    server.routes.get("/", |_| Response::text("Hello, World!"));

    tokio::spawn(async move {
        server.run().await;
    });

    let client = reqwest::Client::new();
    let response = client.get("http://localhost:3001/").send().await.unwrap();

    assert_eq!(response.status(), 200);
    assert_eq!(response.text().await.unwrap(), "Hello, World!");
}

#[tokio::test]
#[serial]
async fn test_post_with_body_and_response() {
    let mut server = Server::new().await.unwrap();

    server.routes.post("/", |request| {
        dbg!(&request.body);
        let Body::Json(body) = request.body else {
            return Response::invalid_request();
        };

        let Some(name) = body.get("name") else {
            return Response::invalid_request();
        };

        Response::json(&json!({
            "message": format!("Hello, {}!", name.as_str().unwrap())
        }))
    });

    tokio::spawn(async move {
        server.run().await;
    });

    let mut body = HashMap::new();
    body.insert("name", "Miguel");

    let client = reqwest::Client::new();
    let response = client
        .post("http://localhost:3000/")
        .json(&body)
        .send()
        .await
        .unwrap();

    assert_eq!(response.status(), 200);
    assert_eq!(
        response.json::<Value>().await.unwrap(),
        json!({ "message": "Hello, Miguel!" })
    );
}