warp-embed 0.5.0

provides embedded files by warp
Documentation
use super::*;
use rust_embed::RustEmbed;

#[derive(RustEmbed)]
#[folder = "data"]
struct Data;

#[tokio::test]
async fn test_embed_file() {
    let serve = embed(&Data);
    let res = warp::test::request().path("/foo.txt").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.headers().get("content-type").unwrap(), "text/plain");
    assert_eq!(res.body(), "foo");

    let res = warp::test::request().path("/bar.txt").reply(&serve).await;
    assert_eq!(res.status(), 404);

    let res = warp::test::request()
        .path("/bar/hoge.txt")
        .reply(&serve)
        .await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.headers().get("content-type").unwrap(), "text/plain");
    assert_eq!(res.body(), "hoge");

    let res = warp::test::request()
        .path("/index.html")
        .reply(&serve)
        .await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/index.html"));
    assert_eq!(res.headers().get("content-type").unwrap(), "text/html");

    let res = warp::test::request().path("/").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/index.html"));
    assert_eq!(res.headers().get("content-type").unwrap(), "text/html");

    let res = warp::test::request().path("/bar/").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/bar/index.htm"));
    assert_eq!(res.headers().get("content-type").unwrap(), "text/html");
}

#[tokio::test]
async fn test_embed_file2() {
    let serve = warp::path("hoge").and(embed(&Data));

    let res = warp::test::request().path("/hoge").reply(&serve).await;
    assert_eq!(res.status(), 301);
    assert_eq!(
        res.headers().get("Location").unwrap().to_str().unwrap(),
        "/hoge/"
    );

    let res = warp::test::request().path("/hoge/").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/index.html"));

    let res = warp::test::request().path("/hoge/bar").reply(&serve).await;
    assert_eq!(res.status(), 301);
    assert_eq!(
        res.headers().get("Location").unwrap().to_str().unwrap(),
        "/hoge/bar/"
    );

    let res = warp::test::request().path("/hoge/bar/").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/bar/index.htm"));

    let res = warp::test::request().path("/hoge/hoge").reply(&serve).await;
    assert_eq!(res.status(), 404);
}

#[tokio::test]
async fn test_embed_one() {
    let serve = embed_one(&Data, "index.html");

    let res = warp::test::request().path("/hoge").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/index.html"));

    let res = warp::test::request().path("/xx").reply(&serve).await;
    assert_eq!(res.status(), 200);
    assert_eq!(res.body(), include_str!("../data/index.html"));
}