use std::error::Error;
use optimizely::{
error::{ClientError, DatafileError},
Client,
};
use common::{ACCOUNT_ID, FILE_PATH, REVISION};
mod common;
#[test]
fn with_invalid_json() -> Result<(), Box<dyn Error>> {
let json = "";
let report = Client::from_string(json)
.err()
.ok_or("Unexpected Result::Ok")?;
let client_error = report
.downcast_ref::<ClientError>()
.ok_or("ClientError not found")?;
assert_eq!(client_error, &ClientError::InvalidDatafile);
let datafile_error = report
.downcast_ref::<DatafileError>()
.ok_or("DatafileError not found")?;
assert_eq!(datafile_error, &DatafileError::InvalidJson);
Ok(())
}
#[test]
fn with_missing_properties() -> Result<(), Box<dyn Error>> {
let json = r#"
{
"accountId": "21537940595"
}"#;
let report = Client::from_string(json)
.err()
.ok_or("Unexpected Result::Ok")?;
let client_error = report
.downcast_ref::<ClientError>()
.ok_or("ClientError not found")?;
assert_eq!(client_error, &ClientError::InvalidDatafile);
let datafile_error = report
.downcast_ref::<DatafileError>()
.ok_or("DatafileError not found")?;
assert_eq!(datafile_error, &DatafileError::InvalidJson);
Ok(())
}
#[test]
fn with_invalid_array_properties() -> Result<(), Box<dyn Error>> {
let json = r#"
{
"accountId": "21537940595",
"revision": "73",
"rollouts": null,
"experiments": null,
"featureFlags": null,
"events": null
}"#;
let report = Client::from_string(json)
.err()
.ok_or("Unexpected Result::Ok")?;
let client_error = report
.downcast_ref::<ClientError>()
.ok_or("ClientError not found")?;
assert_eq!(client_error, &ClientError::InvalidDatafile);
let datafile_error = report
.downcast_ref::<DatafileError>()
.ok_or("DatafileError not found")?;
assert_eq!(datafile_error, &DatafileError::InvalidJson);
Ok(())
}
#[test]
#[cfg(feature = "online")]
fn with_sdk_key() -> Result<(), Box<dyn Error>> {
let client = Client::from_sdk_key(common::SDK_KEY)?.initialize();
assert_eq!(client.datafile().account_id(), ACCOUNT_ID);
assert!(client.datafile().revision() >= REVISION);
Ok(())
}
#[test]
fn with_fixed_datafile() -> Result<(), Box<dyn Error>> {
let client = Client::from_local_datafile(FILE_PATH)?.initialize();
assert_eq!(client.datafile().account_id(), ACCOUNT_ID);
assert!(client.datafile().revision() >= REVISION);
Ok(())
}