From 65c7f89ad4a4281aea4ea0115c27dbd54d339b15 Mon Sep 17 00:00:00 2001 From: Sam Scott Date: Wed, 23 Jan 2019 12:40:10 -0500 Subject: Add actix test. --- tests/test_actix.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 tests/test_actix.rs diff --git a/tests/test_actix.rs b/tests/test_actix.rs new file mode 100644 index 0000000..1e2d952 --- /dev/null +++ b/tests/test_actix.rs @@ -0,0 +1,54 @@ +#![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 + 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, + #[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) -> 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 -- cgit v1.2.3