use super::FieldResolver;
use std::collections::{HashMap, HashSet};
fn resolver_with_optional(fields: &[&str]) -> FieldResolver {
let optional: HashSet<String> = fields.iter().map(|field| (*field).to_string()).collect();
FieldResolver::new(
&HashMap::new(),
&optional,
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
)
}
#[test]
fn node_and_wasm_chain_an_optional_link_identically() {
let resolver = resolver_with_optional(&["document"]);
let node = resolver.accessor("document.nodes", "node", "result");
let wasm = resolver.accessor("document.nodes", "wasm", "result");
assert_eq!(node, wasm, "one language, one accessor");
assert_eq!(wasm, "result.document?.nodes");
}
#[test]
fn node_and_wasm_leave_a_required_link_unguarded() {
let resolver = resolver_with_optional(&[]);
let node = resolver.accessor("summary.nodes", "node", "result");
let wasm = resolver.accessor("summary.nodes", "wasm", "result");
assert_eq!(node, wasm, "one language, one accessor");
assert_eq!(wasm, "result.summary.nodes");
}
#[test]
fn wasm_reads_a_map_through_get_and_node_through_an_index() {
let resolver = resolver_with_optional(&["metadata"]);
assert_eq!(
resolver.accessor("metadata[title]", "node", "result"),
"result.metadata?.[\"title\"]"
);
assert_eq!(
resolver.accessor("metadata[title]", "wasm", "result"),
"result.metadata?.get(\"title\")"
);
}
#[test]
fn wasm_reads_a_required_map_through_get_without_a_guard() {
let resolver = resolver_with_optional(&[]);
assert_eq!(
resolver.accessor("metadata[title]", "wasm", "result"),
"result.metadata.get(\"title\")"
);
}