Upgrade actix-web to latest beta versions

This commit is contained in:
ilslv 2021-12-13 12:22:07 +01:00 committed by tyranron
parent 7bc8a2b79d
commit 09da50b143
No known key found for this signature in database
GPG key ID: 762E144FB230A4F0
2 changed files with 49 additions and 36 deletions

View file

@ -13,10 +13,10 @@ subscriptions = ["juniper_graphql_ws", "tokio"]
[dependencies] [dependencies]
actix = "0.12" actix = "0.12"
actix-http = "3.0.0-beta.13" actix-http = "3.0.0-beta.15"
http = "0.2.4" http = "0.2.4"
actix-web = "4.0.0-beta.12" actix-web = "4.0.0-beta.14"
actix-web-actors = "4.0.0-beta.7" actix-web-actors = "4.0.0-beta.8"
juniper = { version = "0.15.7", path = "../juniper", default-features = false } juniper = { version = "0.15.7", path = "../juniper", default-features = false }
juniper_graphql_ws = { version = "0.3.0", path = "../juniper_graphql_ws", optional = true } juniper_graphql_ws = { version = "0.3.0", path = "../juniper_graphql_ws", optional = true }
@ -30,11 +30,11 @@ tokio = { version = "1.0", features = ["sync"], optional = true }
[dev-dependencies] [dev-dependencies]
actix-rt = "2" actix-rt = "2"
actix-cors = "0.6.0-beta.4" actix-cors = "0.6.0-beta.6"
actix-identity = "0.4.0-beta.4" actix-identity = "0.4.0-beta.5"
tokio = "1.0" tokio = "1.0"
async-stream = "0.3" async-stream = "0.3"
actix-test = "0.1.0-beta.6" actix-test = "0.1.0-beta.8"
juniper = { version = "0.15.7", path = "../juniper", features = ["expose-test-schema"] } juniper = { version = "0.15.7", path = "../juniper", features = ["expose-test-schema"] }

View file

@ -466,7 +466,9 @@ pub mod subscriptions {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use actix_http::body::AnyBody; use std::pin::Pin;
use actix_http::body::MessageBody;
use actix_web::{ use actix_web::{
dev::ServiceResponse, dev::ServiceResponse,
http, http,
@ -475,6 +477,7 @@ mod tests {
web::Data, web::Data,
App, App,
}; };
use futures::future;
use juniper::{ use juniper::{
http::tests::{run_http_test_suite, HttpIntegration, TestResponse}, http::tests::{run_http_test_suite, HttpIntegration, TestResponse},
tests::fixtures::starwars::schema::{Database, Query}, tests::fixtures::starwars::schema::{Database, Query},
@ -487,11 +490,16 @@ mod tests {
type Schema = type Schema =
juniper::RootNode<'static, Query, EmptyMutation<Database>, EmptySubscription<Database>>; juniper::RootNode<'static, Query, EmptyMutation<Database>, EmptySubscription<Database>>;
async fn take_response_body_string(resp: &mut ServiceResponse) -> String { async fn take_response_body_string(resp: ServiceResponse) -> String {
match resp.response().body() { let mut body = resp.into_body();
AnyBody::Bytes(body) => String::from_utf8(body.to_vec()).unwrap(), String::from_utf8(
_ => String::from(""), future::poll_fn(|cx| Pin::new(&mut body).poll_next(cx))
} .await
.unwrap()
.unwrap()
.to_vec(),
)
.unwrap()
} }
async fn index( async fn index(
@ -537,13 +545,13 @@ mod tests {
.append_header((ACCEPT, "text/html")) .append_header((ACCEPT, "text/html"))
.to_request(); .to_request();
let mut resp = test::call_service(&mut app, req).await; let resp = test::call_service(&mut app, req).await;
let body = take_response_body_string(&mut resp).await;
assert_eq!(resp.status(), http::StatusCode::OK); assert_eq!(resp.status(), http::StatusCode::OK);
assert_eq!( assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap().to_str().unwrap(), resp.headers().get(CONTENT_TYPE).unwrap().to_str().unwrap(),
"text/html; charset=utf-8" "text/html; charset=utf-8"
); );
let body = take_response_body_string(resp).await;
assert!(body.contains("<script>var GRAPHQL_URL = '/dogs-api/graphql';</script>")); assert!(body.contains("<script>var GRAPHQL_URL = '/dogs-api/graphql';</script>"));
assert!(body.contains( assert!(body.contains(
"<script>var GRAPHQL_SUBSCRIPTIONS_URL = '/dogs-api/subscriptions';</script>" "<script>var GRAPHQL_SUBSCRIPTIONS_URL = '/dogs-api/subscriptions';</script>"
@ -578,13 +586,13 @@ mod tests {
.append_header((ACCEPT, "text/html")) .append_header((ACCEPT, "text/html"))
.to_request(); .to_request();
let mut resp = test::call_service(&mut app, req).await; let resp = test::call_service(&mut app, req).await;
let body = take_response_body_string(&mut resp).await;
assert_eq!(resp.status(), http::StatusCode::OK); assert_eq!(resp.status(), http::StatusCode::OK);
assert_eq!( assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap().to_str().unwrap(), resp.headers().get(CONTENT_TYPE).unwrap().to_str().unwrap(),
"text/html; charset=utf-8" "text/html; charset=utf-8"
); );
let body = take_response_body_string(resp).await;
assert!(body.contains("GraphQLPlayground.init(root, { endpoint: '/dogs-api/graphql', subscriptionEndpoint: '/dogs-api/subscriptions' })")); assert!(body.contains("GraphQLPlayground.init(root, { endpoint: '/dogs-api/graphql', subscriptionEndpoint: '/dogs-api/subscriptions' })"));
} }
@ -611,17 +619,16 @@ mod tests {
) )
.await; .await;
let mut resp = test::call_service(&mut app, req).await; let resp = test::call_service(&mut app, req).await;
dbg!(take_response_body_string(&mut resp).await);
assert_eq!(resp.status(), http::StatusCode::OK); assert_eq!(resp.status(), http::StatusCode::OK);
assert_eq!(
take_response_body_string(&mut resp).await,
r#"{"data":{"hero":{"name":"R2-D2"}}}"#
);
assert_eq!( assert_eq!(
resp.headers().get("content-type").unwrap(), resp.headers().get("content-type").unwrap(),
"application/json", "application/json",
); );
assert_eq!(
take_response_body_string(resp).await,
r#"{"data":{"hero":{"name":"R2-D2"}}}"#
);
} }
#[actix_web::rt::test] #[actix_web::rt::test]
@ -644,17 +651,17 @@ mod tests {
) )
.await; .await;
let mut resp = test::call_service(&mut app, req).await; let resp = test::call_service(&mut app, req).await;
assert_eq!(resp.status(), http::StatusCode::OK); assert_eq!(resp.status(), http::StatusCode::OK);
assert_eq!(
take_response_body_string(&mut resp).await,
r#"{"data":{"hero":{"name":"R2-D2"}}}"#
);
assert_eq!( assert_eq!(
resp.headers().get("content-type").unwrap(), resp.headers().get("content-type").unwrap(),
"application/json", "application/json",
); );
assert_eq!(
take_response_body_string(resp).await,
r#"{"data":{"hero":{"name":"R2-D2"}}}"#
);
} }
#[actix_web::rt::test] #[actix_web::rt::test]
@ -688,17 +695,17 @@ mod tests {
) )
.await; .await;
let mut resp = test::call_service(&mut app, req).await; let resp = test::call_service(&mut app, req).await;
assert_eq!(resp.status(), http::StatusCode::OK); assert_eq!(resp.status(), http::StatusCode::OK);
assert_eq!(
take_response_body_string(&mut resp).await,
r#"[{"data":{"hero":{"name":"R2-D2"}}},{"data":{"hero":{"id":"1000","name":"Luke Skywalker"}}}]"#
);
assert_eq!( assert_eq!(
resp.headers().get("content-type").unwrap(), resp.headers().get("content-type").unwrap(),
"application/json", "application/json",
); );
assert_eq!(
take_response_body_string(resp).await,
r#"[{"data":{"hero":{"name":"R2-D2"}}},{"data":{"hero":{"id":"1000","name":"Luke Skywalker"}}}]"#
);
} }
#[test] #[test]
@ -757,14 +764,20 @@ mod tests {
} }
} }
async fn make_test_response(mut resp: ServiceResponse) -> TestResponse { async fn make_test_response(resp: ServiceResponse) -> TestResponse {
let body = take_response_body_string(&mut resp).await;
let status_code = resp.status().as_u16(); let status_code = resp.status().as_u16();
let content_type = resp.headers().get(CONTENT_TYPE).unwrap(); let content_type = resp
.headers()
.get(CONTENT_TYPE)
.unwrap()
.to_str()
.unwrap()
.to_string();
let body = take_response_body_string(resp).await;
TestResponse { TestResponse {
status_code: status_code as i32, status_code: status_code as i32,
body: Some(body), body: Some(body),
content_type: content_type.to_str().unwrap().to_string(), content_type,
} }
} }