From e6e52b5bee51d2b8670b124c9267b683d988aa4b Mon Sep 17 00:00:00 2001 From: Sam Scott Date: Sat, 9 Jul 2022 20:29:28 -0500 Subject: Add a test case for dates. --- Cargo.toml | 1 + tests/test_chrono.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 tests/test_chrono.rs diff --git a/Cargo.toml b/Cargo.toml index 00d70ef..0d675f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ warp-framework = { package = "warp", version = "0.3", default-features = false, axum-framework = { package = "axum", version = "0.5", default-features = false, optional = true } [dev-dependencies] +chrono = { version = "0.4", features = ["serde"] } csv = "1.1" rand = "0.8" serde_derive = "1.0" diff --git a/tests/test_chrono.rs b/tests/test_chrono.rs new file mode 100644 index 0000000..8267d56 --- /dev/null +++ b/tests/test_chrono.rs @@ -0,0 +1,46 @@ +extern crate serde; +#[macro_use] +extern crate serde_derive; +extern crate serde_qs as qs; + +#[test] +fn test_dates() { + use chrono::prelude::*; + #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] + struct Params { + date_time: DateTime, + } + + let params = Params { + date_time: FixedOffset::east(9 * 3600) + .ymd(2014, 11, 28) + .and_hms_nano(21, 45, 59, 324310806), + }; + + let s = qs::to_string(¶ms).unwrap(); + assert_eq!(s, "date_time=2014-11-28T21%3A45%3A59.324310806%2B09%3A00"); + + let data: Params = qs::from_str(&s).unwrap(); + assert_eq!(data, params); +} + +/// Curious what happens if we _don't_ urlencode the string parameter +#[test] +#[should_panic] +fn test_improperly_encoded_dates() { + use chrono::prelude::*; + #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] + struct Params { + date_time: DateTime, + } + + let _expected = Params { + date_time: FixedOffset::east(9 * 3600) + .ymd(2014, 11, 28) + .and_hms_nano(21, 45, 59, 324310806), + }; + + let s = "date_time=2014-11-28T21:45:59.324310806+09:00"; + let _data: Params = qs::from_str(s).unwrap(); + // assert_eq!(data, params); +} -- cgit v1.2.3