use super::assertions::render_assertion;
use crate::e2e::field_access::FieldResolver;
use crate::e2e::fixture::Assertion;
use std::collections::{HashMap, HashSet};
fn empty_resolver() -> FieldResolver {
FieldResolver::new(
&HashMap::new(),
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
&HashSet::new(),
)
}
fn render(assertion: &Assertion, result_is_option: bool) -> String {
let resolver = empty_resolver();
let mut out = String::new();
render_assertion(
&mut out,
assertion,
"result",
"Result",
&resolver,
false,
false,
result_is_option,
false,
None,
&HashSet::new(),
&HashMap::new(),
false,
&HashSet::new(),
);
out
}
fn not_error_assertion() -> Assertion {
Assertion {
assertion_type: "not_error".to_string(),
..Default::default()
}
}
fn is_empty_assertion() -> Assertion {
Assertion {
assertion_type: "is_empty".to_string(),
..Default::default()
}
}
#[test]
fn not_error_on_bare_option_result_emits_no_assert_not_null() {
let out = render(¬_error_assertion(), true);
assert!(
!out.contains("assertNotNull(result"),
"bare Option<T> result must not assert non-null from not_error: got {out}"
);
}
#[test]
fn not_error_paired_with_is_empty_does_not_contradict_it() {
let mut out = String::new();
for assertion in [not_error_assertion(), is_empty_assertion()] {
out.push_str(&render(&assertion, true));
}
assert!(
!out.contains("assertNotNull(result"),
"not_error must not contradict a sibling is_empty on a bare Option<T> result: got {out}"
);
assert!(
out.contains("assertNull(result, \"expected empty value\");"),
"is_empty must still render its own null check: got {out}"
);
}
#[test]
fn not_error_on_non_option_result_still_asserts_not_null() {
let out = render(¬_error_assertion(), false);
assert!(
out.contains("assertNotNull(result, \"expected non-null response\");"),
"got: {out}"
);
}