summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authordaddinuz <daddinuz@gmail.com>2019-05-15 14:04:06 +0200
committerdaddinuz <daddinuz@gmail.com>2019-05-15 14:04:06 +0200
commit8f57d8ea722c390c1f02082b8c3c01c2c87d400f (patch)
treef3f186fc7ea78d2ca93ee3910f254b4a25c35a90 /tests
parent10b3add38d8aa04dff789469449340ee7f817f32 (diff)
update actix support to v1
Diffstat (limited to 'tests')
-rw-r--r--tests/test_actix.rs147
1 files changed, 93 insertions, 54 deletions
diff --git a/tests/test_actix.rs b/tests/test_actix.rs
index 1e2d952..09bc015 100644
--- a/tests/test_actix.rs
+++ b/tests/test_actix.rs
@@ -1,54 +1,93 @@
-#![cfg(feature = "actix")]
-
-extern crate actix_web;
-extern crate serde;
-#[macro_use]
-extern crate serde_derive;
-extern crate serde_qs as qs;
-
-use actix_web::test::TestServer;
-use qs::actix::QsQuery;
-use serde::de::Error;
-
-fn from_str<'de, D, S>(deserializer: D) -> Result<S, D::Error>
- where D: serde::Deserializer<'de>,
- S: std::str::FromStr
-{
- let s = <&str as serde::Deserialize>::deserialize(deserializer)?;
- S::from_str(&s).map_err(|_| D::Error::custom("could not parse string"))
-}
-
-#[derive(Deserialize, Serialize, Debug, PartialEq)]
-struct Query {
- foo: u64,
- bars: Vec<u64>,
- #[serde(flatten)]
- common: CommonParams,
-}
-
-#[derive(Deserialize, Serialize, Debug, PartialEq)]
-struct CommonParams {
- #[serde(deserialize_with="from_str")]
- limit: u64,
- #[serde(deserialize_with="from_str")]
- offset: u64,
- #[serde(deserialize_with="from_str")]
- remaining: bool,
-}
-
-fn my_handler(query: QsQuery<Query>) -> String {
- println!("Query: {:?}", query);
- format!("Received bars: {:?}", query.bars)
-}
-
-#[test]
-fn test_qsquery() {
- let mut srv = TestServer::new(|app| {
- app.resource("/test", |h| h.with(my_handler));
- });
- let query = "/test?foo=1&bars[]=0&bars[]=1&limit=100&offset=50&remaining=true";
- let url = srv.url(query);
- let req = actix_web::client::get(url).finish().unwrap();
- let response = srv.execute(req.send()).unwrap();
- assert!(response.status().is_success());
-} \ No newline at end of file
+#![cfg(feature = "actix")]
+
+extern crate actix_web;
+extern crate serde;
+
+#[macro_use]
+extern crate serde_derive;
+extern crate serde_qs as qs;
+
+use actix_web::error::InternalError;
+use actix_web::http::StatusCode;
+use actix_web::test::TestRequest;
+use actix_web::{FromRequest, HttpResponse};
+use qs::actix::{QsQuery, QsQueryConfig};
+use serde::de::Error;
+
+fn from_str<'de, D, S>(deserializer: D) -> Result<S, D::Error>
+where
+ D: serde::Deserializer<'de>,
+ S: std::str::FromStr,
+{
+ let s = <&str as serde::Deserialize>::deserialize(deserializer)?;
+ S::from_str(&s).map_err(|_| D::Error::custom("could not parse string"))
+}
+
+#[derive(Deserialize, Serialize, Debug, PartialEq)]
+struct Query {
+ foo: u64,
+ bars: Vec<u64>,
+ #[serde(flatten)]
+ common: CommonParams,
+}
+
+#[derive(Deserialize, Serialize, Debug, PartialEq)]
+struct CommonParams {
+ #[serde(deserialize_with = "from_str")]
+ limit: u64,
+ #[serde(deserialize_with = "from_str")]
+ offset: u64,
+ #[serde(deserialize_with = "from_str")]
+ remaining: bool,
+}
+
+#[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
+ );
+}
+
+#[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
+ );
+}
+
+#[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);
+}