extern crate core;
mod espocrm_api_client;
mod espocrm_types;
mod serializer;
mod tracing_if;
pub use espocrm_api_client::*;
pub use espocrm_types::*;
#[cfg(test)]
mod tests {
use crate::espocrm_api_client::EspoApiClient;
use crate::espocrm_types::{FilterType, Order, Params, Value, Where};
use crate::serializer::serialize;
use std::collections::HashSet;
use std::hash::Hash;
const URL: &str = "foo";
fn assert_eq_unsorted_vec<T: Eq + Hash>(a: &Vec<T>, b: &Vec<T>) -> bool {
let a: HashSet<_> = a.iter().collect();
let b: HashSet<_> = b.iter().collect();
a == b
}
#[test]
fn url() {
let client = EspoApiClient::new(URL);
assert_eq!(client.url, "foo".to_string());
}
#[test]
fn username() {
let client = EspoApiClient::new(URL).set_username("bar").build();
assert_eq!(Some("bar".to_string()), client.username);
}
#[test]
fn password() {
let client = EspoApiClient::new(URL).set_password("bar").build();
assert_eq!(Some("bar".to_string()), client.password);
}
#[test]
fn api_key() {
let client = EspoApiClient::new(URL).set_api_key("bar").build();
assert_eq!(Some("bar".to_string()), client.api_key);
}
#[test]
fn secret_key() {
let client = EspoApiClient::new(URL).set_secret_key("bar").build();
assert_eq!(Some("bar".to_string()), client.secret_key);
}
#[test]
fn full() {
let client = EspoApiClient::new(URL)
.set_username("username")
.set_password("password")
.set_api_key("api_key")
.set_secret_key("secret_key")
.build();
assert_eq!(Some("username".to_string()), client.username);
assert_eq!(Some("password".to_string()), client.password);
assert_eq!(Some("api_key".to_string()), client.api_key);
assert_eq!(Some("secret_key".to_string()), client.secret_key);
assert_eq!("foo".to_string(), client.url);
}
#[test]
fn modify_url() {
let client = EspoApiClient::new(URL).set_url("bar").build();
assert_eq!("bar".to_string(), client.url)
}
#[test]
fn normalize_url() {
let client = EspoApiClient::new(URL);
let normalized_url = client.normalize_url("Contact".to_string());
assert_eq!(format!("{}{}Contact", URL, client.url_path), normalized_url)
}
#[test]
fn serialize_basic() {
let params = Params::new().set_offset(0).set_order(Order::Desc).build();
let serialized = serialize(params).unwrap();
let serialized_split: Vec<_> = serialized.split("&").collect();
let correct = vec!["order=desc", "offset=0"];
assert!(assert_eq_unsorted_vec(&serialized_split, &correct))
}
#[test]
fn serialize_without_where_value() {
let params = Params::new()
.set_offset(0)
.set_where(vec![Where {
r#type: FilterType::IsTrue,
attribute: "exampleBoolean".to_string(),
value: None,
}])
.build();
let serialized = serialize(params).unwrap();
assert_eq!(
"offset=0&where%5B0%5D%5Btype%5D=isTrue&where%5B0%5D%5Battribute%5D=exampleBoolean"
.to_string(),
serialized
);
}
#[test]
fn serialize_with_where_string_value() {
let params = Params::new()
.set_offset(0)
.set_where(vec![Where {
r#type: FilterType::IsTrue,
attribute: "exampleBoolean".to_string(),
value: Some(Value::str("a")),
}])
.build();
let serialized = serialize(params).unwrap();
assert_eq!("offset=0&where%5B0%5D%5Btype%5D=isTrue&where%5B0%5D%5Battribute%5D=exampleBoolean&where%5B0%5D%5Bvalue%5D=a".to_string(), serialized);
}
#[test]
fn serialize_with_where_array_value() {
let params = Params::new()
.set_offset(0)
.set_where(vec![Where {
r#type: FilterType::IsTrue,
attribute: "exampleBoolean".to_string(),
value: Some(Value::Array(Some(vec![
Value::str("a"),
Value::str("b"),
Value::str("c"),
]))),
}])
.build();
let serialized = serialize(params).unwrap();
assert_eq!("offset=0&where%5B0%5D%5Btype%5D=isTrue&where%5B0%5D%5Battribute%5D=exampleBoolean&where%5B0%5D%5Bvalue%5D%5B0%5D=a&where%5B0%5D%5Bvalue%5D%5B1%5D=b&where%5B0%5D%5Bvalue%5D%5B2%5D=c".to_string(), serialized);
}
}