diff options
author | Sam Scott <sam.scott89@gmail.com> | 2019-01-23 12:40:10 -0500 |
---|---|---|
committer | Sam Scott <sam.scott89@gmail.com> | 2019-01-23 12:40:10 -0500 |
commit | 65c7f89ad4a4281aea4ea0115c27dbd54d339b15 (patch) | |
tree | af250e2380aae3065502c9f306350d0efd7c1b6d /tests | |
parent | c0b48690b4937fa150e27c38efd8f72638ebe7b2 (diff) |
Add actix test.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_actix.rs | 54 |
1 files changed, 54 insertions, 0 deletions
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<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 |