mirror of
https://github.com/fafhrd91/actix-web
synced 2025-07-01 00:44:26 +02:00
ResourceDef: define behavior for prefix with trailing slash (#2355)
* ResourceDef: define behavior * fix tests * add scope test * revert firestorm bump * update changelog * fmt Co-authored-by: Rob Ede <robjtede@icloud.com>
This commit is contained in:
committed by
GitHub
parent
ff07816b65
commit
f9da6e48e0
66
src/scope.rs
66
src/scope.rs
@ -1153,4 +1153,70 @@ mod tests {
|
||||
Bytes::from_static(b"http://localhost:8080/a/b/c/12345")
|
||||
);
|
||||
}
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn dynamic_scopes() {
|
||||
let srv = init_service(
|
||||
App::new().service(
|
||||
web::scope("/{a}/").service(
|
||||
web::scope("/{b}/")
|
||||
.route("", web::get().to(|_: HttpRequest| HttpResponse::Created()))
|
||||
.route(
|
||||
"/",
|
||||
web::get().to(|_: HttpRequest| HttpResponse::Accepted()),
|
||||
)
|
||||
.route("/{c}", web::get().to(|_: HttpRequest| HttpResponse::Ok())),
|
||||
),
|
||||
),
|
||||
)
|
||||
.await;
|
||||
|
||||
// note the unintuitive behavior with trailing slashes on scopes with dynamic segments
|
||||
let req = TestRequest::with_uri("/a//b//c").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::OK);
|
||||
|
||||
let req = TestRequest::with_uri("/a//b/").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::CREATED);
|
||||
|
||||
let req = TestRequest::with_uri("/a//b//").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::ACCEPTED);
|
||||
|
||||
let req = TestRequest::with_uri("/a//b//c/d").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::NOT_FOUND);
|
||||
|
||||
let srv = init_service(
|
||||
App::new().service(
|
||||
web::scope("/{a}").service(
|
||||
web::scope("/{b}")
|
||||
.route("", web::get().to(|_: HttpRequest| HttpResponse::Created()))
|
||||
.route(
|
||||
"/",
|
||||
web::get().to(|_: HttpRequest| HttpResponse::Accepted()),
|
||||
)
|
||||
.route("/{c}", web::get().to(|_: HttpRequest| HttpResponse::Ok())),
|
||||
),
|
||||
),
|
||||
)
|
||||
.await;
|
||||
|
||||
let req = TestRequest::with_uri("/a/b/c").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::OK);
|
||||
|
||||
let req = TestRequest::with_uri("/a/b").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::CREATED);
|
||||
|
||||
let req = TestRequest::with_uri("/a/b/").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::ACCEPTED);
|
||||
|
||||
let req = TestRequest::with_uri("/a/b/c/d").to_request();
|
||||
let resp = call_service(&srv, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user