mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-23 23:51:06 +01:00
Fix async web::Data factory handling
This commit is contained in:
parent
9702b2d88e
commit
898ef57080
@ -12,6 +12,11 @@
|
|||||||
* `.to_async()` handler can return `Responder` type #792
|
* `.to_async()` handler can return `Responder` type #792
|
||||||
|
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* Fix async web::Data factory handling
|
||||||
|
|
||||||
|
|
||||||
## [1.0.0-beta.1] - 2019-04-20
|
## [1.0.0-beta.1] - 2019-04-20
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
27
src/app.rs
27
src/app.rs
@ -431,13 +431,14 @@ where
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use actix_service::Service;
|
use actix_service::Service;
|
||||||
|
use bytes::Bytes;
|
||||||
use futures::{Future, IntoFuture};
|
use futures::{Future, IntoFuture};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::http::{header, HeaderValue, Method, StatusCode};
|
use crate::http::{header, HeaderValue, Method, StatusCode};
|
||||||
use crate::service::{ServiceRequest, ServiceResponse};
|
use crate::service::{ServiceRequest, ServiceResponse};
|
||||||
use crate::test::{block_on, call_service, init_service, TestRequest};
|
use crate::test::{block_on, call_service, init_service, read_body, TestRequest};
|
||||||
use crate::{web, Error, HttpResponse};
|
use crate::{web, Error, HttpRequest, HttpResponse};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_default_resource() {
|
fn test_default_resource() {
|
||||||
@ -598,4 +599,26 @@ mod tests {
|
|||||||
HeaderValue::from_static("0001")
|
HeaderValue::from_static("0001")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_external_resource() {
|
||||||
|
let mut srv = init_service(
|
||||||
|
App::new()
|
||||||
|
.external_resource("youtube", "https://youtube.com/watch/{video_id}")
|
||||||
|
.route(
|
||||||
|
"/test",
|
||||||
|
web::get().to(|req: HttpRequest| {
|
||||||
|
HttpResponse::Ok().body(format!(
|
||||||
|
"{}",
|
||||||
|
req.url_for("youtube", &["12345"]).unwrap()
|
||||||
|
))
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
let req = TestRequest::with_uri("/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"https://youtube.com/watch/12345"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.endpoint.is_some() {
|
if self.endpoint.is_some() && self.data.is_empty() {
|
||||||
Ok(Async::Ready(AppInitService {
|
Ok(Async::Ready(AppInitService {
|
||||||
service: self.endpoint.take().unwrap(),
|
service: self.endpoint.take().unwrap(),
|
||||||
rmap: self.rmap.clone(),
|
rmap: self.rmap.clone(),
|
||||||
|
@ -253,11 +253,14 @@ impl ServiceConfig {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use actix_service::Service;
|
use actix_service::Service;
|
||||||
|
use bytes::Bytes;
|
||||||
|
use futures::Future;
|
||||||
|
use tokio_timer::sleep;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::http::{Method, StatusCode};
|
use crate::http::{Method, StatusCode};
|
||||||
use crate::test::{block_on, call_service, init_service, TestRequest};
|
use crate::test::{block_on, call_service, init_service, read_body, TestRequest};
|
||||||
use crate::{web, App, HttpResponse};
|
use crate::{web, App, HttpRequest, HttpResponse};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_data() {
|
fn test_data() {
|
||||||
@ -277,7 +280,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_data_factory() {
|
fn test_data_factory() {
|
||||||
let cfg = |cfg: &mut ServiceConfig| {
|
let cfg = |cfg: &mut ServiceConfig| {
|
||||||
cfg.data_factory(|| Ok::<_, ()>(10usize));
|
cfg.data_factory(|| {
|
||||||
|
sleep(std::time::Duration::from_millis(50)).then(|_| {
|
||||||
|
println!("READY");
|
||||||
|
Ok::<_, ()>(10usize)
|
||||||
|
})
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut srv =
|
let mut srv =
|
||||||
@ -301,6 +309,33 @@ mod tests {
|
|||||||
assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
|
assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_external_resource() {
|
||||||
|
let mut srv = init_service(
|
||||||
|
App::new()
|
||||||
|
.configure(|cfg| {
|
||||||
|
cfg.external_resource(
|
||||||
|
"youtube",
|
||||||
|
"https://youtube.com/watch/{video_id}",
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.route(
|
||||||
|
"/test",
|
||||||
|
web::get().to(|req: HttpRequest| {
|
||||||
|
HttpResponse::Ok().body(format!(
|
||||||
|
"{}",
|
||||||
|
req.url_for("youtube", &["12345"]).unwrap()
|
||||||
|
))
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
let req = TestRequest::with_uri("/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"https://youtube.com/watch/12345"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_service() {
|
fn test_service() {
|
||||||
let mut srv = init_service(App::new().configure(|cfg| {
|
let mut srv = init_service(App::new().configure(|cfg| {
|
||||||
|
Loading…
Reference in New Issue
Block a user