mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-23 00:00:15 +02:00
97 lines
2.9 KiB
Rust
97 lines
2.9 KiB
Rust
use super::*;
|
|||
|
|
use crate::handler::Handler;
|
||
|
|
|
||
|
|
#[tokio::test]
|
||
|
|
async fn basic() {
|
||
|
|
let app = Router::new()
|
||
|
|
.route("/foo", get(|| async {}))
|
||
|
|
.fallback((|| async { "fallback" }).into_service());
|
||
|
|
|
||
|
|
let client = TestClient::new(app);
|
||
|
|
|
||
|
|
assert_eq!(client.get("/foo").send().await.status(), StatusCode::OK);
|
||
|
|
|
||
|
|
let res = client.get("/does-not-exist").send().await;
|
||
|
|
assert_eq!(res.status(), StatusCode::OK);
|
||
|
|
assert_eq!(res.text().await, "fallback");
|
||
|
|
}
|
||
|
|
|
||
|
|
#[tokio::test]
|
||
|
|
async fn nest() {
|
||
|
|
let app = Router::new()
|
||
|
|
.nest("/foo", Router::new().route("/bar", get(|| async {})))
|
||
|
|
.fallback((|| async { "fallback" }).into_service());
|
||
|
|
|
||
|
|
let client = TestClient::new(app);
|
||
|
|
|
||
|
|
assert_eq!(client.get("/foo/bar").send().await.status(), StatusCode::OK);
|
||
|
|
|
||
|
|
let res = client.get("/does-not-exist").send().await;
|
||
|
|
assert_eq!(res.status(), StatusCode::OK);
|
||
|
|
assert_eq!(res.text().await, "fallback");
|
||
|
|
}
|
||
|
|
|
||
|
|
#[tokio::test]
|
||
|
|
async fn nesting_with_fallback() {
|
||
|
|
let app = Router::new().nest(
|
||
|
|
"/foo",
|
||
|
|
Router::new()
|
||
|
|
.route("/bar", get(|| async {}))
|
||
|
|
.fallback((|| async { "fallback" }).into_service()),
|
||
|
|
);
|
||
|
|
|
||
|
|
let client = TestClient::new(app);
|
||
|
|
|
||
|
|
assert_eq!(client.get("/foo/bar").send().await.status(), StatusCode::OK);
|
||
|
|
|
||
|
|
// this shouldn't exist because the fallback is inside the nested router
|
||
|
|
let res = client.get("/does-not-exist").send().await;
|
||
|
|
assert_eq!(res.status(), StatusCode::NOT_FOUND);
|
||
|
|
|
||
|
|
// this should work since we get into the nested router
|
||
|
|
let res = client.get("/foo/does-not-exist").send().await;
|
||
|
|
assert_eq!(res.status(), StatusCode::OK);
|
||
|
|
assert_eq!(res.text().await, "fallback");
|
||
|
|
}
|
||
|
|
|
||
|
|
#[tokio::test]
|
||
|
|
async fn or() {
|
||
|
|
let one = Router::new().route("/one", get(|| async {}));
|
||
|
|
let two = Router::new().route("/two", get(|| async {}));
|
||
|
|
|
||
|
|
let app = one
|
||
|
|
.merge(two)
|
||
|
|
.fallback((|| async { "fallback" }).into_service());
|
||
|
|
|
||
|
|
let client = TestClient::new(app);
|
||
|
|
|
||
|
|
assert_eq!(client.get("/one").send().await.status(), StatusCode::OK);
|
||
|
|
assert_eq!(client.get("/two").send().await.status(), StatusCode::OK);
|
||
|
|
|
||
|
|
let res = client.get("/does-not-exist").send().await;
|
||
|
|
assert_eq!(res.status(), StatusCode::OK);
|
||
|
|
assert_eq!(res.text().await, "fallback");
|
||
|
|
}
|
||
|
|
|
||
|
|
#[tokio::test]
|
||
|
|
async fn fallback_on_or() {
|
||
|
|
let one = Router::new()
|
||
|
|
.route("/one", get(|| async {}))
|
||
|
|
.fallback((|| async { "fallback one" }).into_service());
|
||
|
|
|
||
|
|
let two = Router::new()
|
||
|
|
.route("/two", get(|| async {}))
|
||
|
|
.fallback((|| async { "fallback two" }).into_service());
|
||
|
|
|
||
|
|
let app = one.merge(two);
|
||
|
|
|
||
|
|
let client = TestClient::new(app);
|
||
|
|
|
||
|
|
assert_eq!(client.get("/one").send().await.status(), StatusCode::OK);
|
||
|
|
assert_eq!(client.get("/two").send().await.status(), StatusCode::OK);
|
||
|
|
|
||
|
|
let res = client.get("/does-not-exist").send().await;
|
||
|
|
assert_eq!(res.status(), StatusCode::OK);
|
||
|
|
assert_eq!(res.text().await, "fallback two");
|
||
|
|
}
|