use tide::http::{headers, Method, Request, StatusCode, Url};
use tide::Response;
const TEXT: &str = concat![
"Chunk one\n",
"data data\n",
"\n",
"Chunk two\n",
"data data\n",
"\n",
"Chunk three\n",
"data data\n",
];
#[async_std::test]
async fn existing_encoding() {
let mut app = tide::new();
app.with(
tide_compress::CompressMiddleware::builder()
.threshold(16)
.build(),
);
app.at("/").get(|_| async {
let mut res = Response::new(StatusCode::Ok);
res.set_body(TEXT.to_owned());
res.insert_header(headers::CONTENT_ENCODING, "deflate");
Ok(res)
});
let mut req = Request::new(Method::Get, Url::parse("http://_/").unwrap());
req.insert_header(headers::ACCEPT_ENCODING, "gzip");
let mut res: tide::http::Response = app.respond(req).await.unwrap();
assert_eq!(res.status(), 200);
assert!(res.header(headers::CONTENT_LENGTH).is_none());
assert_eq!(res[headers::CONTENT_ENCODING], "deflate");
assert_eq!(res[headers::VARY], "accept-encoding");
assert_eq!(res.body_string().await.unwrap(), TEXT);
}
#[async_std::test]
async fn multi_existing_encoding() {
let mut app = tide::new();
app.with(
tide_compress::CompressMiddleware::builder()
.threshold(16)
.build(),
);
app.at("/").get(|_| async {
let mut res = Response::new(StatusCode::Ok);
res.set_body(TEXT.to_owned());
res.append_header(headers::CONTENT_ENCODING, "identity");
res.append_header(headers::CONTENT_ENCODING, "gzip");
Ok(res)
});
let mut req = Request::new(Method::Get, Url::parse("http://_/").unwrap());
req.insert_header(headers::ACCEPT_ENCODING, "gzip");
let mut res: tide::http::Response = app.respond(req).await.unwrap();
assert_eq!(res.status(), 200);
assert!(res.header(headers::CONTENT_LENGTH).is_none());
assert_eq!(res[headers::CONTENT_ENCODING][0].as_str(), "identity");
assert_eq!(res[headers::CONTENT_ENCODING][1].as_str(), "gzip");
assert_eq!(res[headers::VARY], "accept-encoding");
assert_eq!(res.body_string().await.unwrap(), TEXT);
}