use super::assertions::render_assertion;
use crate::e2e::field_access::FieldResolver;
use crate::e2e::fixture::Assertion;
use std::collections::{HashMap, HashSet};
fn array_resolver(field: &str) -> FieldResolver {
let array: HashSet<String> = [field.to_string()].into_iter().collect();
FieldResolver::new(
&HashMap::new(),
&HashSet::new(),
&HashSet::new(),
&array,
&HashSet::new(),
)
}
fn empty_resolver() -> FieldResolver {
FieldResolver::new(
&HashMap::new(),
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
)
}
fn assertion(assertion_type: &str, field: &str) -> Assertion {
Assertion {
assertion_type: assertion_type.to_string(),
field: Some(field.to_string()),
..Assertion::default()
}
}
fn render(resolver: &FieldResolver, assertion: &Assertion) -> String {
let mut out = String::new();
render_assertion(
&mut out,
assertion,
"result",
resolver,
"SampleModule",
&HashSet::new(),
&HashMap::new(),
false,
false,
false,
false,
);
out
}
#[test]
fn is_empty_on_array_field_accepts_empty_list_and_map_forms() {
let out = render(
&array_resolver("data.children"),
&assertion("is_empty", "data.children"),
);
assert_eq!(
out, " assert result.data.children in [nil, \"\", [], %{}]\n",
"got: {out}"
);
}
#[test]
fn is_empty_and_not_empty_agree_on_the_empty_forms_for_a_collection_field() {
let resolver = array_resolver("items");
let is_empty_out = render(&resolver, &assertion("is_empty", "items"));
let not_empty_out = render(&resolver, &assertion("not_empty", "items"));
assert_eq!(is_empty_out, " assert result.items in [nil, \"\", [], %{}]\n");
assert_eq!(not_empty_out, " assert result.items not in [nil, \"\", [], %{}]\n");
}
#[test]
fn is_empty_on_ordinary_scalar_field_is_unchanged() {
let out = render(&empty_resolver(), &assertion("is_empty", "title"));
assert_eq!(out, " assert result.title in [nil, \"\", [], %{}]\n", "got: {out}");
}
#[test]
fn is_empty_on_a_length_backed_expression_still_compares_to_zero() {
let mut out = String::new();
render_assertion(
&mut out,
&assertion("is_empty", "unused"),
"length(result.items)",
&empty_resolver(),
"SampleModule",
&HashSet::new(),
&HashMap::new(),
true,
false,
false,
false,
);
assert_eq!(out, " assert length(result.items) == 0\n", "got: {out}");
}