use super::assertions::{render_assertion, render_json_assertion};
use crate::e2e::field_access::FieldResolver;
use crate::e2e::fixture::Assertion;
use std::collections::{HashMap, HashSet};
fn optional_resolver(field: &str) -> FieldResolver {
let optional: HashSet<String> = [field.to_string()].into_iter().collect();
FieldResolver::new(
&HashMap::new(),
&optional,
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
)
}
fn empty_resolver() -> FieldResolver {
FieldResolver::new(
&HashMap::new(),
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
)
}
fn is_true_assertion(field: &str) -> Assertion {
Assertion {
assertion_type: "is_true".to_string(),
field: Some(field.to_string()),
..Assertion::default()
}
}
fn render_json(resolver: &FieldResolver, assertion: &Assertion) -> String {
let mut out = String::new();
render_json_assertion(&mut out, assertion, "result", resolver, false);
out
}
#[test]
fn json_struct_is_true_on_optional_struct_field_checks_presence() {
let out = render_json(&optional_resolver("data"), &is_true_assertion("data"));
assert_eq!(out, " try testing.expect(result.object.get(\"data\").? != .null);\n");
}
#[test]
fn json_struct_is_false_on_optional_struct_field_checks_absence() {
let out = render_json(
&optional_resolver("data"),
&Assertion {
assertion_type: "is_false".to_string(),
field: Some("data".to_string()),
..Assertion::default()
},
);
assert_eq!(out, " try testing.expect(result.object.get(\"data\").? == .null);\n");
}
#[test]
fn json_struct_is_true_on_non_optional_field_is_unchanged() {
let out = render_json(&empty_resolver(), &is_true_assertion("active"));
assert_eq!(out, " try testing.expect(result.object.get(\"active\").?.bool);\n");
}
fn render_typed(resolver: &FieldResolver, assertion: &Assertion) -> String {
let mut out = String::new();
render_assertion(&mut out, assertion, "result", resolver, &HashSet::new(), false, false);
out
}
#[test]
fn typed_is_true_on_optional_struct_field_checks_presence() {
let out = render_typed(&optional_resolver("data"), &is_true_assertion("data"));
assert_eq!(out, " try testing.expect(result.data != null);\n");
}
#[test]
fn typed_is_true_on_non_optional_field_is_unchanged() {
let out = render_typed(&empty_resolver(), &is_true_assertion("active"));
assert_eq!(out, " try testing.expect(result.active);\n");
}