use crate::e2e::codegen::assertion_recipes::chunks_result_var;
use crate::e2e::field_access::FieldResolver;
use crate::e2e::fixture::Assertion;
pub(super) fn try_render(
out: &mut String,
assertion: &Assertion,
result_var: &str,
field: &str,
field_resolver: &FieldResolver,
) -> bool {
match field {
"chunks_have_content" => {
let result_var = &chunks_result_var(field_resolver, "ruby", result_var);
let pred = format!("({result_var}.chunks || []).all? {{ |c| c.content && !c.content.empty? }}");
render_true_false(out, assertion, field, &pred);
true
}
"chunks_have_heading_context" => {
let result_var = &chunks_result_var(field_resolver, "ruby", result_var);
let pred =
format!("({result_var}.chunks || []).all? {{ |c| c.metadata && !c.metadata.heading_context.nil? }}");
render_true_false(out, assertion, field, &pred);
true
}
"first_chunk_starts_with_heading" => {
let result_var = &chunks_result_var(field_resolver, "ruby", result_var);
let pred = format!("!({result_var}.chunks || []).first&.metadata&.heading_context.nil?");
render_true_false(out, assertion, field, &pred);
true
}
"chunks_have_embeddings" => {
let result_var = &chunks_result_var(field_resolver, "ruby", result_var);
let pred = format!("({result_var}.chunks || []).all? {{ |c| !c.embedding.nil? && !c.embedding.empty? }}");
render_true_false(out, assertion, field, &pred);
true
}
_ => false,
}
}
fn render_true_false(out: &mut String, assertion: &Assertion, field: &str, pred: &str) {
match assertion.assertion_type.as_str() {
"is_true" => {
out.push_str(&format!(" expect({pred}).to be(true)\n"));
}
"is_false" => {
out.push_str(&format!(" expect({pred}).to be(false)\n"));
}
_ => {
out.push_str(&format!(
" # skipped: unsupported assertion type on synthetic field '{field}'\n"
));
}
}
}