1
0
mirror of https://github.com/actix/actix-extras.git synced 2024-11-30 18:34:36 +01:00

fix nested resource map registration #915

This commit is contained in:
Nikolay Kim 2019-06-15 22:12:20 +06:00
parent d7ec241fd0
commit d293ae2a69
3 changed files with 26 additions and 1 deletions

View File

@ -20,6 +20,10 @@
* Re-apply patch from #637 #894 * Re-apply patch from #637 #894
### Fixed
* HttpRequest::url_for is broken with nested scopes #915
## [1.0.0] - 2019-06-05 ## [1.0.0] - 2019-06-05

View File

@ -38,7 +38,8 @@ impl ResourceMap {
pub(crate) fn finish(&self, current: Rc<ResourceMap>) { pub(crate) fn finish(&self, current: Rc<ResourceMap>) {
for (_, nested) in &self.patterns { for (_, nested) in &self.patterns {
if let Some(ref nested) = nested { if let Some(ref nested) = nested {
*nested.parent.borrow_mut() = Some(current.clone()) *nested.parent.borrow_mut() = Some(current.clone());
nested.finish(nested.clone());
} }
} }
} }

View File

@ -1135,4 +1135,24 @@ mod tests {
let body = read_body(resp); let body = read_body(resp);
assert_eq!(body, &b"https://youtube.com/watch/xxxxxx"[..]); assert_eq!(body, &b"https://youtube.com/watch/xxxxxx"[..]);
} }
#[test]
fn test_url_for_nested() {
let mut srv = init_service(App::new().service(web::scope("/a").service(
web::scope("/b").service(web::resource("/c/{stuff}").name("c").route(
web::get().to(|req: HttpRequest| {
HttpResponse::Ok()
.body(format!("{}", req.url_for("c", &["12345"]).unwrap()))
}),
)),
)));
let req = TestRequest::with_uri("/a/b/c/test").to_request();
let resp = call_service(&mut srv, req);
assert_eq!(resp.status(), StatusCode::OK);
let body = read_body(resp);
assert_eq!(
body,
Bytes::from_static(b"http://localhost:8080/a/b/c/12345")
);
}
} }