mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-23 16:21:06 +01:00
support opaque app in test helpers (#2584)
This commit is contained in:
parent
d90c1a2331
commit
32742d0715
@ -10,12 +10,14 @@
|
|||||||
- `Result` extractor wrapper can now convert error types. [#2581]
|
- `Result` extractor wrapper can now convert error types. [#2581]
|
||||||
- Associated types in `FromRequest` impl for `Option` and `Result` has changed. [#2581]
|
- Associated types in `FromRequest` impl for `Option` and `Result` has changed. [#2581]
|
||||||
- Maximim number of extractors has changed from 10 to 12. [#2582]
|
- Maximim number of extractors has changed from 10 to 12. [#2582]
|
||||||
|
- Removed bound `<B as MessageBody>::Error: Debug` in test utility functions in order to support returning opaque apps. [#2584]
|
||||||
|
|
||||||
[#1988]: https://github.com/actix/actix-web/pull/1988
|
[#1988]: https://github.com/actix/actix-web/pull/1988
|
||||||
[#2567]: https://github.com/actix/actix-web/pull/2567
|
[#2567]: https://github.com/actix/actix-web/pull/2567
|
||||||
[#2569]: https://github.com/actix/actix-web/pull/2569
|
[#2569]: https://github.com/actix/actix-web/pull/2569
|
||||||
[#2581]: https://github.com/actix/actix-web/pull/2581
|
[#2581]: https://github.com/actix/actix-web/pull/2581
|
||||||
[#2582]: https://github.com/actix/actix-web/pull/2582
|
[#2582]: https://github.com/actix/actix-web/pull/2582
|
||||||
|
[#2584]: https://github.com/actix/actix-web/pull/2584
|
||||||
|
|
||||||
|
|
||||||
## 4.0.0-beta.19 - 2022-01-04
|
## 4.0.0-beta.19 - 2022-01-04
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use std::fmt;
|
use std::error::Error as StdError;
|
||||||
|
|
||||||
use actix_http::Request;
|
use actix_http::Request;
|
||||||
use actix_service::IntoServiceFactory;
|
use actix_service::IntoServiceFactory;
|
||||||
@ -135,7 +135,6 @@ pub async fn call_and_read_body<S, B>(app: &S, req: Request) -> Bytes
|
|||||||
where
|
where
|
||||||
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: fmt::Debug,
|
|
||||||
{
|
{
|
||||||
let res = call_service(app, req).await;
|
let res = call_service(app, req).await;
|
||||||
read_body(res).await
|
read_body(res).await
|
||||||
@ -147,7 +146,6 @@ pub async fn read_response<S, B>(app: &S, req: Request) -> Bytes
|
|||||||
where
|
where
|
||||||
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: fmt::Debug,
|
|
||||||
{
|
{
|
||||||
let res = call_service(app, req).await;
|
let res = call_service(app, req).await;
|
||||||
read_body(res).await
|
read_body(res).await
|
||||||
@ -186,11 +184,11 @@ where
|
|||||||
pub async fn read_body<B>(res: ServiceResponse<B>) -> Bytes
|
pub async fn read_body<B>(res: ServiceResponse<B>) -> Bytes
|
||||||
where
|
where
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: fmt::Debug,
|
|
||||||
{
|
{
|
||||||
let body = res.into_body();
|
let body = res.into_body();
|
||||||
body::to_bytes(body)
|
body::to_bytes(body)
|
||||||
.await
|
.await
|
||||||
|
.map_err(Into::<Box<dyn StdError>>::into)
|
||||||
.expect("error reading test response body")
|
.expect("error reading test response body")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +238,6 @@ where
|
|||||||
pub async fn read_body_json<T, B>(res: ServiceResponse<B>) -> T
|
pub async fn read_body_json<T, B>(res: ServiceResponse<B>) -> T
|
||||||
where
|
where
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: fmt::Debug,
|
|
||||||
T: DeserializeOwned,
|
T: DeserializeOwned,
|
||||||
{
|
{
|
||||||
let body = read_body(res).await;
|
let body = read_body(res).await;
|
||||||
@ -300,7 +297,6 @@ pub async fn call_and_read_body_json<S, B, T>(app: &S, req: Request) -> T
|
|||||||
where
|
where
|
||||||
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: fmt::Debug,
|
|
||||||
T: DeserializeOwned,
|
T: DeserializeOwned,
|
||||||
{
|
{
|
||||||
let res = call_service(app, req).await;
|
let res = call_service(app, req).await;
|
||||||
@ -313,7 +309,6 @@ pub async fn read_response_json<S, B, T>(app: &S, req: Request) -> T
|
|||||||
where
|
where
|
||||||
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
S: Service<Request, Response = ServiceResponse<B>, Error = Error>,
|
||||||
B: MessageBody,
|
B: MessageBody,
|
||||||
B::Error: fmt::Debug,
|
|
||||||
T: DeserializeOwned,
|
T: DeserializeOwned,
|
||||||
{
|
{
|
||||||
call_and_read_body_json(app, req).await
|
call_and_read_body_json(app, req).await
|
||||||
@ -325,7 +320,10 @@ mod tests {
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{http::header, test::TestRequest, web, App, HttpMessage, HttpResponse};
|
use crate::{
|
||||||
|
dev::ServiceRequest, http::header, test::TestRequest, web, App, HttpMessage,
|
||||||
|
HttpResponse,
|
||||||
|
};
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_request_methods() {
|
async fn test_request_methods() {
|
||||||
@ -471,4 +469,37 @@ mod tests {
|
|||||||
assert_eq!(&result.id, "12345");
|
assert_eq!(&result.id, "12345");
|
||||||
assert_eq!(&result.name, "User name");
|
assert_eq!(&result.name, "User name");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
async fn return_opaque_types() {
|
||||||
|
fn test_app() -> App<
|
||||||
|
impl ServiceFactory<
|
||||||
|
ServiceRequest,
|
||||||
|
Config = (),
|
||||||
|
Response = ServiceResponse<impl MessageBody>,
|
||||||
|
Error = crate::Error,
|
||||||
|
InitError = (),
|
||||||
|
>,
|
||||||
|
> {
|
||||||
|
App::new().service(web::resource("/people").route(
|
||||||
|
web::post().to(|person: web::Json<Person>| HttpResponse::Ok().json(person)),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn test_service(
|
||||||
|
) -> impl Service<Request, Response = ServiceResponse<impl MessageBody>, Error = crate::Error>
|
||||||
|
{
|
||||||
|
init_service(test_app()).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn compile_test(mut req: Vec<Request>) {
|
||||||
|
let svc = test_service().await;
|
||||||
|
call_service(&svc, req.pop().unwrap()).await;
|
||||||
|
call_and_read_body(&svc, req.pop().unwrap()).await;
|
||||||
|
read_body(call_service(&svc, req.pop().unwrap()).await).await;
|
||||||
|
let _: String = call_and_read_body_json(&svc, req.pop().unwrap()).await;
|
||||||
|
let _: String = read_body_json(call_service(&svc, req.pop().unwrap()).await).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user