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(&params).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