vetis 0.1.4-beta.8

Very Tiny Server
use crate::Request;
use http::Method;
use hyper_body_utils::HttpBody;

fn create_test_request(method: Method, uri: &str) -> Request {
    let http_request = http::Request::builder()
        .method(method.clone())
        .uri(uri)
        .body(HttpBody::empty())
        .unwrap();
    let (parts, body) = http_request.into_parts();
    Request::from_parts(parts, body)
}

#[test]
fn test_request_from_parts() {
    let request = create_test_request(Method::GET, "/test");

    assert_eq!(request.method(), &Method::GET);
    assert_eq!(
        request
            .uri()
            .to_string(),
        "/test"
    );
}

#[test]
fn test_request_uri() {
    let request = create_test_request(Method::POST, "/api/users");

    assert_eq!(
        request
            .uri()
            .to_string(),
        "/api/users"
    );
}

#[test]
fn test_request_headers() {
    let http_request = http::Request::builder()
        .method(Method::GET)
        .uri("/")
        .header("content-type", "application/json")
        .header("user-agent", "test-agent")
        .body(HttpBody::empty())
        .unwrap();
    let (parts, body) = http_request.into_parts();
    let request = Request::from_parts(parts, body);

    let headers = request.headers();
    assert_eq!(
        headers.get("content-type"),
        Some(
            &"application/json"
                .parse()
                .unwrap()
        )
    );
    assert_eq!(
        headers.get("user-agent"),
        Some(
            &"test-agent"
                .parse()
                .unwrap()
        )
    );
}

#[test]
fn test_request_headers_mut() {
    let mut request = create_test_request(Method::GET, "/");

    request
        .headers_mut()
        .insert(
            "x-custom-header",
            "custom-value"
                .parse()
                .unwrap(),
        );

    assert_eq!(
        request
            .headers()
            .get("x-custom-header"),
        Some(
            &"custom-value"
                .parse()
                .unwrap()
        )
    );
}

#[test]
fn test_request_method() {
    let methods = [Method::GET, Method::POST, Method::PUT, Method::DELETE, Method::PATCH];

    for method in methods {
        let request = create_test_request(method.clone(), "/");
        assert_eq!(request.method(), &method);
    }
}

#[test]
fn test_request_into_parts() {
    let http_request = http::Request::builder()
        .method(Method::GET)
        .uri("/test")
        .header("x-test", "value")
        .body(HttpBody::from_text("test body"))
        .unwrap();
    let (parts, body) = http_request.into_parts();
    let request = Request::from_parts(parts, body);

    let (returned_parts, _returned_body) = request.into_parts();

    assert_eq!(returned_parts.method, Method::GET);
    assert_eq!(
        returned_parts
            .uri
            .to_string(),
        "/test"
    );
    assert_eq!(
        returned_parts
            .headers
            .get("x-test"),
        Some(
            &"value"
                .parse()
                .unwrap()
        )
    );
}

#[test]
#[should_panic(expected = "No request")]
fn test_request_panic_on_no_inner() {
    let request = Request { inner: None };
    request.method();
}