Ferrit Explore
中文·繁體·EN·日本語 Sign in Register
cielxl / veld / tests / http_test.rs
use veld::http::headers::HeaderMap;
use veld::http::parser::HttpParser;
use veld::http::response::Response;
use veld::http::status::HttpStatusCode;

#[test]
fn test_parse_simple_request() {
    let mut parser = HttpParser::new();
    let data = b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
    let _ = parser.feed(data);
    assert!(parser.is_complete());
    let request = parser.take_request().unwrap();
    assert_eq!(request.method, veld::http::request::Method::GET);
    assert_eq!(request.uri, "/");
    assert_eq!(request.headers.get("host").unwrap().as_str(), "example.com");
}

#[test]
fn test_parse_post_request() {
    let mut parser = HttpParser::new();
    let data = b"POST /api/data HTTP/1.1\r\nHost: example.com\r\nContent-Length: 5\r\nContent-Type: application/json\r\n\r\nhello";
    let _ = parser.feed(data);
    assert!(parser.is_complete());
    let request = parser.take_request().unwrap();
    assert_eq!(request.method, veld::http::request::Method::POST);
    assert_eq!(request.uri, "/api/data");
}

#[test]
fn test_parse_partial_request() {
    let mut parser = HttpParser::new();
    let _ = parser.feed(b"GET / HTTP/1.1\r\n");
    assert!(!parser.is_complete());

    let _ = parser.feed(b"Host: example.com\r\n\r\n");
    assert!(parser.is_complete());
}

#[test]
fn test_status_codes() {
    assert_eq!(HttpStatusCode::OK.as_u16(), 200);
    assert_eq!(HttpStatusCode::NOT_FOUND.as_u16(), 404);
    assert_eq!(HttpStatusCode::INTERNAL_SERVER_ERROR.as_u16(), 500);
}

#[test]
fn test_response_builder() {
    let response = Response::builder()
        .status(HttpStatusCode::OK)
        .header("Content-Type", "text/html")
        .body_str("<h1>Hello</h1>");

    assert_eq!(response.status, HttpStatusCode::OK);
}

#[test]
fn test_header_map() {
    let mut headers = HeaderMap::new();
    headers.insert("Content-Type", "text/html");
    headers.insert("Content-Length", "100");

    assert_eq!(headers.get("content-type").unwrap().as_str(), "text/html");
    assert_eq!(headers.get("content-length").unwrap().as_str(), "100");
    assert!(headers.contains("content-type"));
    assert!(!headers.contains("x-missing"));
}