From 77cb6730f9265591dad141f4f9b840069c9cd2b9 Mon Sep 17 00:00:00 2001 From: Sam Scott <sam.scott89@gmail.com> Date: Wed, 3 Jun 2020 10:26:45 -0400 Subject: Support actix-web v2 (#30) * update dependencies - actix-web v2 - percent encoding v2.1 - rust 2018 edition - remove rustfmt no longer supported rules * ci: add feature build matrix * fix actix unit tests Co-authored-by: Mario Reder <mreder1289@gmail.com> --- tests/test_actix.rs | 143 +++++++++++++++++++++++++--------------------- tests/test_deserialize.rs | 2 +- tests/test_serialize.rs | 3 + 3 files changed, 83 insertions(+), 65 deletions(-) (limited to 'tests') diff --git a/tests/test_actix.rs b/tests/test_actix.rs index 532fa7c..34969d4 100644 --- a/tests/test_actix.rs +++ b/tests/test_actix.rs @@ -44,84 +44,99 @@ struct CommonParams { #[test] fn test_default_error_handler() { - let req = TestRequest::with_uri("/test").to_srv_request(); - let (req, mut pl) = req.into_parts(); - - let e = QsQuery::<Query>::from_request(&req, &mut pl).unwrap_err(); - assert_eq!( - e.as_response_error().error_response().status(), - StatusCode::BAD_REQUEST - ); + futures::executor::block_on(async { + let req = TestRequest::with_uri("/test").to_srv_request(); + let (req, mut pl) = req.into_parts(); + + let e = QsQuery::<Query>::from_request(&req, &mut pl) + .await + .unwrap_err(); + assert_eq!( + e.as_response_error().error_response().status(), + StatusCode::BAD_REQUEST + ); + }) } #[test] fn test_custom_error_handler() { - let req = TestRequest::with_uri("/test") - .data(QsQueryConfig::default().error_handler(|e, _| { - let resp = HttpResponse::UnprocessableEntity().finish(); - InternalError::from_response(e, resp).into() - })) - .to_srv_request(); - - let (req, mut pl) = req.into_parts(); - let query = QsQuery::<Query>::from_request(&req, &mut pl); - - assert!(query.is_err()); - assert_eq!( - query - .unwrap_err() - .as_response_error() - .error_response() - .status(), - StatusCode::UNPROCESSABLE_ENTITY - ); + futures::executor::block_on(async { + let req = TestRequest::with_uri("/test") + .app_data(QsQueryConfig::default().error_handler(|e, _| { + let resp = HttpResponse::UnprocessableEntity().finish(); + dbg!(&resp); + InternalError::from_response(e, resp).into() + })) + .to_srv_request(); + + let (req, mut pl) = req.into_parts(); + let query = QsQuery::<Query>::from_request(&req, &mut pl).await; + + assert!(query.is_err()); + assert_eq!( + query + .unwrap_err() + .as_response_error() + .error_response() + .status(), + StatusCode::UNPROCESSABLE_ENTITY + ); + }) } #[test] fn test_composite_querystring_extractor() { - let req = TestRequest::with_uri( - "/test?foo=1&bars[]=0&bars[]=1&limit=100&offset=50&remaining=true", - ) - .to_srv_request(); - let (req, mut pl) = req.into_parts(); - - let s = QsQuery::<Query>::from_request(&req, &mut pl).unwrap(); - assert_eq!(s.foo, 1); - assert_eq!(s.bars, vec![0, 1]); - assert_eq!(s.common.limit, 100); - assert_eq!(s.common.offset, 50); - assert_eq!(s.common.remaining, true); + futures::executor::block_on(async { + let req = TestRequest::with_uri( + "/test?foo=1&bars[]=0&bars[]=1&limit=100&offset=50&remaining=true", + ) + .to_srv_request(); + let (req, mut pl) = req.into_parts(); + + let s = QsQuery::<Query>::from_request(&req, &mut pl).await.unwrap(); + assert_eq!(s.foo, 1); + assert_eq!(s.bars, vec![0, 1]); + assert_eq!(s.common.limit, 100); + assert_eq!(s.common.offset, 50); + assert_eq!(s.common.remaining, true); + }) } #[test] fn test_default_qs_config() { - let req = TestRequest::with_uri( - "/test?foo=1&bars%5B%5D=3&limit=100&offset=50&remaining=true", - ) - .to_srv_request(); - let (req, mut pl) = req.into_parts(); - - let e = QsQuery::<Query>::from_request(&req, &mut pl).unwrap_err(); - assert_eq!( - e.as_response_error().error_response().status(), - StatusCode::BAD_REQUEST - ); + futures::executor::block_on(async { + let req = TestRequest::with_uri( + "/test?foo=1&bars%5B%5D=3&limit=100&offset=50&remaining=true", + ) + .to_srv_request(); + let (req, mut pl) = req.into_parts(); + + let e = QsQuery::<Query>::from_request(&req, &mut pl) + .await + .unwrap_err(); + assert_eq!( + e.as_response_error().error_response().status(), + StatusCode::BAD_REQUEST + ); + }) } #[test] fn test_custom_qs_config() { - let req = TestRequest::with_uri( - "/test?foo=1&bars%5B%5D=3&limit=100&offset=50&remaining=true", - ) - .data(QsQueryConfig::default().qs_config(QsConfig::new(5, false))) - .to_srv_request(); - - let (req, mut pl) = req.into_parts(); - - let s = QsQuery::<Query>::from_request(&req, &mut pl).unwrap(); - assert_eq!(s.foo, 1); - assert_eq!(s.bars, vec![3]); - assert_eq!(s.common.limit, 100); - assert_eq!(s.common.offset, 50); - assert_eq!(s.common.remaining, true); + futures::executor::block_on(async { + let req = TestRequest::with_uri( + "/test?foo=1&bars%5B%5D=3&limit=100&offset=50&remaining=true", + ) + .app_data(QsQueryConfig::default().qs_config(QsConfig::new(5, false))) + .to_srv_request(); + + let (req, mut pl) = req.into_parts(); + + let s = QsQuery::<Query>::from_request(&req, &mut pl).await.unwrap(); + assert_eq!(s.foo, 1); + assert_eq!(s.bars, vec![3]); + assert_eq!(s.common.limit, 100); + assert_eq!(s.common.offset, 50); + assert_eq!(s.common.remaining, true); + }) } diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs index beede63..4e02823 100644 --- a/tests/test_deserialize.rs +++ b/tests/test_deserialize.rs @@ -609,4 +609,4 @@ fn deserialize_plus() { let test: Test = serde_qs::from_str("email=a%2Bb%40c.com").unwrap(); assert_eq!(test.email, "a+b@c.com"); -} \ No newline at end of file +} diff --git a/tests/test_serialize.rs b/tests/test_serialize.rs index 8adae57..f650beb 100644 --- a/tests/test_serialize.rs +++ b/tests/test_serialize.rs @@ -5,6 +5,7 @@ extern crate serde_qs as qs; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] struct Address { city: String, + street: String, postcode: String, } @@ -25,6 +26,7 @@ fn serialize_struct() { phone: 12345, address: Address { city: "Carrot City".to_string(), + street: "Special-Street* No. 11".to_string(), postcode: "12345".to_string(), }, user_ids: vec![1, 2, 3, 4], @@ -34,6 +36,7 @@ fn serialize_struct() { qs::to_string(¶ms).unwrap(), "\ id=42&name=Acme&phone=12345&address[city]=Carrot+City&\ + address[street]=Special-Street*+No.+11&\ address[postcode]=12345&user_ids[0]=1&user_ids[1]=2&\ user_ids[2]=3&user_ids[3]=4" ); -- cgit v1.2.3