diff --git a/src/free_api_v25/query/mod.rs b/src/free_api_v25/query/mod.rs index 4983fae..8bed7eb 100644 --- a/src/free_api_v25/query/mod.rs +++ b/src/free_api_v25/query/mod.rs @@ -25,3 +25,6 @@ pub mod urls; pub use queryparams::*; pub use units::*; pub use urls::*; + +#[cfg(test)] +mod tests; diff --git a/src/free_api_v25/query/tests.rs b/src/free_api_v25/query/tests.rs new file mode 100644 index 0000000..0853628 --- /dev/null +++ b/src/free_api_v25/query/tests.rs @@ -0,0 +1,69 @@ +use super::*; + +#[test] +fn test_weather_url_city_name() { + let query = QueryParams { + api_key: "KEY".into(), + city_name: Some("Paris".into()), + ..Default::default() + }; + let url = query.weather_url().unwrap(); + assert!(url.contains("q=Paris")); + assert!(url.contains("appid=KEY")); + assert!(url.starts_with(WEATHER_URL)); +} + +#[test] +fn test_weather_url_city_id() { + let query = QueryParams { + api_key: "KEY".into(), + city_id: Some("123".into()), + ..Default::default() + }; + let url = query.weather_url().unwrap(); + assert!(url.contains("id=123")); +} + +#[test] +fn test_weather_url_lat_lon() { + let query = QueryParams { + api_key: "KEY".into(), + lat: Some(10.0), + lon: Some(20.0), + ..Default::default() + }; + let url = query.weather_url().unwrap(); + assert!(url.contains("lat=10") && url.contains("lon=20")); +} + +#[test] +fn test_weather_url_zip() { + let query = QueryParams { + api_key: "KEY".into(), + zip: Some("94040,us".into()), + ..Default::default() + }; + let url = query.weather_url().unwrap(); + assert!(url.contains("zip=94040,us")); +} + +#[test] +fn test_weather_url_error() { + let query = QueryParams { + api_key: "KEY".into(), + ..Default::default() + }; + assert!(query.weather_url().is_err()); +} + +#[test] +fn test_forecast_url() { + let query = QueryParams { + api_key: "KEY".into(), + city_name: Some("Berlin".into()), + ..Default::default() + }; + let url = query.forecast_url().unwrap(); + assert!(url.contains("q=Berlin")); + assert!(url.starts_with(FORECAST_URL)); +}