in src/mmds/src/data_store.rs [345:499]
fn test_get_value() {
let mut mmds = Mmds::default();
let data = r#"{
"name": {
"first": "John",
"second": "Doe"
},
"age": 43,
"phones": [
"+401234567",
"+441234567"
],
"member": false,
"shares_percentage": 12.12,
"balance": -24
}"#;
let data_store: Value = serde_json::from_str(data).unwrap();
mmds.put_data(data_store);
// Test invalid path.
assert_eq!(
mmds.get_value("/invalid_path".to_string(), OutputFormat::Json)
.unwrap_err()
.to_string(),
Error::NotFound.to_string()
);
assert_eq!(
mmds.get_value("/invalid_path".to_string(), OutputFormat::Imds)
.unwrap_err()
.to_string(),
Error::NotFound.to_string()
);
// Retrieve an object.
let mut expected_json = r#"{
"first": "John",
"second": "Doe"
}"#
.to_string();
expected_json.retain(|c| !c.is_whitespace());
assert_eq!(
mmds.get_value("/name".to_string(), OutputFormat::Json)
.unwrap(),
expected_json
);
let expected_imds = "first\nsecond";
assert_eq!(
mmds.get_value("/name".to_string(), OutputFormat::Imds)
.unwrap(),
expected_imds
);
// Retrieve an integer.
assert_eq!(
mmds.get_value("/age".to_string(), OutputFormat::Json)
.unwrap(),
"43"
);
assert_eq!(
mmds.get_value("/age".to_string(), OutputFormat::Imds)
.err()
.unwrap()
.to_string(),
Error::UnsupportedValueType.to_string()
);
// Test path ends with /; Value is a dictionary.
// Retrieve an array.
let mut expected = r#"[
"+401234567",
"+441234567"
]"#
.to_string();
expected.retain(|c| !c.is_whitespace());
assert_eq!(
mmds.get_value("/phones/".to_string(), OutputFormat::Json)
.unwrap(),
expected
);
assert_eq!(
mmds.get_value("/phones/".to_string(), OutputFormat::Imds)
.err()
.unwrap()
.to_string(),
Error::UnsupportedValueType.to_string()
);
// Test path does NOT end with /; Value is a dictionary.
assert_eq!(
mmds.get_value("/phones".to_string(), OutputFormat::Json)
.unwrap(),
expected
);
assert_eq!(
mmds.get_value("/phones".to_string(), OutputFormat::Imds)
.err()
.unwrap()
.to_string(),
Error::UnsupportedValueType.to_string()
);
// Retrieve the first element of an array.
assert_eq!(
mmds.get_value("/phones/0/".to_string(), OutputFormat::Json)
.unwrap(),
"\"+401234567\""
);
assert_eq!(
mmds.get_value("/phones/0/".to_string(), OutputFormat::Imds)
.unwrap(),
"+401234567"
);
// Retrieve a boolean.
assert_eq!(
mmds.get_value("/member".to_string(), OutputFormat::Json)
.unwrap(),
"false"
);
assert_eq!(
mmds.get_value("/member".to_string(), OutputFormat::Imds)
.err()
.unwrap()
.to_string(),
Error::UnsupportedValueType.to_string()
);
// Retrieve a float.
assert_eq!(
mmds.get_value("/shares_percentage".to_string(), OutputFormat::Json)
.unwrap(),
"12.12"
);
assert_eq!(
mmds.get_value("/shares_percentage".to_string(), OutputFormat::Imds)
.err()
.unwrap()
.to_string(),
Error::UnsupportedValueType.to_string()
);
// Retrieve a negative integer.
assert_eq!(
mmds.get_value("/balance".to_string(), OutputFormat::Json)
.unwrap(),
"-24"
);
assert_eq!(
mmds.get_value("/balance".to_string(), OutputFormat::Imds)
.err()
.unwrap()
.to_string(),
Error::UnsupportedValueType.to_string()
);
}