#![deny(clippy::all)]
mod fixtures {
pub mod get_server;
pub mod post_server;
pub mod put_server;
}
use fixtures::get_server::spawn as spawn_get;
use fixtures::post_server::spawn as spawn_post;
use fixtures::put_server::spawn as spawn_put;
fn no_redirect_client() -> reqwest::Client {
reqwest::Client::builder()
.redirect(reqwest::redirect::Policy::none())
.build()
.expect("client build failed")
}
#[tokio::test]
async fn get_rd_slash_known_id_returns_301_with_location() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/slash/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on 301");
assert_eq!(resp.headers()["location"], "/rd/slash/42/");
}
#[tokio::test]
async fn get_rd_slash_unknown_id_returns_404() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/slash/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn get_rd_strip_known_id_returns_301_with_location() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/strip/42/"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on 301");
assert_eq!(resp.headers()["location"], "/rd/strip/42");
}
#[tokio::test]
async fn get_rd_strip_unknown_id_returns_404() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/strip/999/"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn get_rd_case_known_id_returns_301_with_location() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/RD/CASE/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on 301");
assert_eq!(resp.headers()["location"], "/rd/case/42");
}
#[tokio::test]
async fn get_rd_case_unknown_id_returns_404() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/RD/CASE/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn get_rd_double_known_id_returns_301_with_location() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}//rd/double/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on 301");
assert_eq!(resp.headers()["location"], "/rd/double/42");
}
#[tokio::test]
async fn get_rd_double_unknown_id_returns_404() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}//rd/double/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn get_rd_percent_known_id_returns_301_with_location() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/percent/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on 301");
}
#[tokio::test]
async fn get_rd_percent_unknown_id_returns_404() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/percent/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn get_rd_blanket_known_id_returns_301() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/blanket/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on blanket 301");
}
#[tokio::test]
async fn get_rd_blanket_unknown_id_returns_301() {
let addr = spawn_get().await;
let resp = no_redirect_client()
.get(format!("http://{addr}/rd/blanket/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::MOVED_PERMANENTLY);
assert!(resp.headers().contains_key("location"), "expected Location on blanket 301");
}
#[tokio::test]
async fn post_rd_303_known_id_returns_303_with_location() {
let addr = spawn_post().await;
let resp = no_redirect_client()
.post(format!("http://{addr}/rd/post-303/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::SEE_OTHER);
assert!(resp.headers().contains_key("location"), "expected Location on 303");
assert_eq!(resp.headers()["location"], "/rd/result/42");
}
#[tokio::test]
async fn post_rd_303_unknown_id_returns_404() {
let addr = spawn_post().await;
let resp = no_redirect_client()
.post(format!("http://{addr}/rd/post-303/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn post_rd_normalized_known_id_returns_201() {
let addr = spawn_post().await;
let resp = no_redirect_client()
.post(format!("http://{addr}/rd/post-normalized/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::CREATED);
}
#[tokio::test]
async fn post_rd_normalized_unknown_id_returns_201() {
let addr = spawn_post().await;
let resp = no_redirect_client()
.post(format!("http://{addr}/rd/post-normalized/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::CREATED);
}
#[tokio::test]
async fn put_rd_303_known_id_returns_303_with_location() {
let addr = spawn_put().await;
let resp = no_redirect_client()
.put(format!("http://{addr}/rd/put-303/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::SEE_OTHER);
assert!(resp.headers().contains_key("location"), "expected Location on 303");
assert_eq!(resp.headers()["location"], "/rd/result/42");
}
#[tokio::test]
async fn put_rd_303_unknown_id_returns_404() {
let addr = spawn_put().await;
let resp = no_redirect_client()
.put(format!("http://{addr}/rd/put-303/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn put_rd_normalized_known_id_returns_201() {
let addr = spawn_put().await;
let resp = no_redirect_client()
.put(format!("http://{addr}/rd/put-normalized/42"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::CREATED);
}
#[tokio::test]
async fn put_rd_normalized_unknown_id_returns_201() {
let addr = spawn_put().await;
let resp = no_redirect_client()
.put(format!("http://{addr}/rd/put-normalized/999"))
.send()
.await
.expect("request failed");
assert_eq!(resp.status(), reqwest::StatusCode::CREATED);
}