use libtad_rs::models::tides::TidalPhase;
use libtad_rs::models::time::DateTime;
use libtad_rs::service::tides::TidesRequest;
use libtad_rs::ServiceClient;
use maybe_async::maybe_async;
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_tidal_data() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let request = TidesRequest::new()
.with_placeid("norway/stavanger")
.set_startdt(DateTime::from("2021-09-08T00:00:00"))
.set_enddt(DateTime::from("2021-09-08T23:59:59"));
let response = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(response.stations.len() == 1);
assert!(response.stations[0].source.name == "Stavanger");
assert!(response.stations[0].source.r#type == "Reference Station");
assert!(response.stations[0].matchparam == "norway/stavanger");
assert!(response.stations[0]
.result
.iter()
.all(|x| x.time.datetime.month == 9 && x.time.datetime.day == 8));
assert!(response.stations[0]
.result
.iter()
.all(|x| matches!(x.phase, TidalPhase::High) || matches!(x.phase, TidalPhase::Low)));
}
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_tidal_data_without_onlyhighlow() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let request = TidesRequest::new()
.with_placeid("norway/stavanger")
.set_startdt(DateTime::from("2021-09-08T00:00:00"))
.set_enddt(DateTime::from("2021-09-08T23:59:59"))
.set_onlyhighlow(false);
let response = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(!response.stations[0]
.result
.iter()
.all(|x| matches!(x.phase, TidalPhase::High) || matches!(x.phase, TidalPhase::Low)));
}
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_invalid_end_date() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let request = TidesRequest::new()
.with_placeid("norway/stavanger")
.set_startdt(DateTime::from("2021-09-08T00:00:00"))
.set_enddt(DateTime::from("2021-09-07T23:59:59"));
let response = client.get_tidal_data(&request).await.unwrap();
assert!(response.is_err());
}
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_subordinate_station() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let request = TidesRequest::new()
.with_placeid("norway/sola")
.set_subordinate(true);
let response = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(response.stations[0].source.r#type == "Subordinate Station");
}
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_without_radius() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let request = TidesRequest::new().with_placeid("4");
let response = client.get_tidal_data(&request).await.unwrap();
assert!(response.is_err());
}
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_with_radius() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let request = TidesRequest::new().with_placeid("4").set_radius(186);
let response = client.get_tidal_data(&request).await.unwrap();
assert!(response.is_ok());
}
#[maybe_async]
#[cfg_attr(feature = "async-client", tokio::test)]
#[cfg_attr(feature = "sync-client", test)]
async fn request_intervals() {
let client = ServiceClient::new(env!("ACCESS_KEY").into(), env!("SECRET_KEY").into());
let mut request = TidesRequest::new()
.with_placeid("norway/stavanger")
.set_onlyhighlow(false)
.set_interval(60);
let response_60 = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(response_60.stations[0].result.len() == 24);
request = request.set_interval(30);
let response_30 = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(response_30.stations[0].result.len() == 48);
request = request.set_interval(15);
let response_15 = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(response_15.stations[0].result.len() == 96);
request = request.set_interval(5);
let response_5 = client.get_tidal_data(&request).await.unwrap().unwrap();
assert!(response_5.stations[0].result.len() == 288);
}