use crate::validator::json_schema::Fragment;
#[track_caller]
fn assert_parses_to_same_fragment(schema: serde_json::Value) {
let deprecated_parse = Fragment::from_deprecated_json_value(schema.clone()).unwrap();
let current_parse = Fragment::from_json_value(schema).unwrap();
assert_eq!(deprecated_parse, current_parse);
}
#[test]
fn empty() {
assert_parses_to_same_fragment(serde_json::json!({}));
}
#[test]
fn empty_string_ns() {
assert_parses_to_same_fragment(serde_json::json!({
"": {
"entityTypes": {},
"actions": {},
}
}));
}
#[test]
fn multiple_namespace() {
assert_parses_to_same_fragment(serde_json::json!({
"ns0": {
"entityTypes": {},
"actions": {},
},
"ns1": {
"entityTypes": {},
"actions": {},
},
"ns2": {
"entityTypes": {},
"actions": {},
}
}));
}
#[test]
fn declared_common_types() {
assert_parses_to_same_fragment(serde_json::json!({
"ns": {
"commonTypes": {
"foo": {"type": "Bool"},
"bar": {"type": "foo"},
"baz": {"type": "Long"},
},
"entityTypes": {},
"actions": {},
}
}));
}
#[test]
fn member_of_types() {
assert_parses_to_same_fragment(serde_json::json!({
"ns": {
"entityTypes": {
"User": { "memberOfTypes": ["Group1", "Group2"] },
"Group1": { },
"Group2": { }
},
"actions": { }
}
}));
}
#[test]
fn entity_shape() {
assert_parses_to_same_fragment(serde_json::json!({
"ns": {
"entityTypes": {
"User": {
"shape": {
"type": "Record",
"attributes": {
"foo": {"type": "String"},
"bar": {"type": "Entity", "name": "User"}
}
}
},
},
"actions": { }
}
}));
}
#[test]
fn member_of() {
assert_parses_to_same_fragment(serde_json::json!({
"ns": {
"entityTypes": {},
"actions": {
"foo": { "memberOf": [{"type": "Action", "id": "foo"}, {"id": "baz"}] },
"bar": {},
"baz": {},
},
}
}));
}
#[test]
fn applies_to() {
assert_parses_to_same_fragment(serde_json::json!({
"ns": {
"entityTypes": {
"User": {}
},
"actions": {
"foo": {
"appliesTo": {
"principalTypes": ["User"],
"resourceTypes": ["User"],
}
}
},
}
}));
}
#[test]
fn context() {
assert_parses_to_same_fragment(serde_json::json!({
"ns": {
"entityTypes": { },
"actions": {
"foo": {
"appliesTo": {
"principalTypes": [],
"resourceTypes": [],
"context": {
"type": "Record",
"attributes": {
"foo": {
"type": "Set",
"element": {"type": "Extension", "name": "ip"},
"required": false,
}
}
}
}
}
},
}
}));
}