use super::super::assertions::render_assertion;
use super::tests::*;
use crate::e2e::field_access::FieldResolver;
fn envelope_and_document_type_defs() -> Vec<crate::core::ir::TypeDef> {
use crate::core::ir::{FieldDef, TypeDef, TypeRef};
vec![
TypeDef {
name: "Envelope".to_string(),
fields: vec![FieldDef {
name: "results".to_string(),
ty: TypeRef::Vec(Box::new(TypeRef::Named("Document".to_string()))),
..FieldDef::default()
}],
..TypeDef::default()
},
TypeDef {
name: "Document".to_string(),
fields: vec![FieldDef {
name: "chunks".to_string(),
ty: TypeRef::Vec(Box::new(TypeRef::Named("Chunk".to_string()))),
..FieldDef::default()
}],
..TypeDef::default()
},
]
}
fn resolver_anchored_at(root_type: Option<&str>) -> FieldResolver {
let type_defs = envelope_and_document_type_defs();
let map = FieldResolver::ir_result_field_facts(&type_defs, "rust");
let (reachable, excluded, optional) = FieldResolver::ir_field_sets(&type_defs);
empty_resolver()
.with_ir_result_fields(map, root_type.map(str::to_string))
.with_ir_fields(reachable, excluded, optional)
}
fn render_chunks_have_content_call(resolver: &FieldResolver) -> String {
let assertion = make_assertion("is_true", Some("chunks_have_content"), None);
let mut out = String::new();
render_assertion(
&mut out,
&assertion,
"result",
"my_mod",
"dep",
false,
&[],
resolver,
false,
false,
false,
false,
false,
None,
);
out
}
#[test]
fn chunks_have_content_refused_when_call_root_lacks_chunks() {
let resolver = resolver_anchored_at(Some("Envelope"));
let out = render_chunks_have_content_call(&resolver);
assert!(
!out.contains("result.chunks"),
"must not hardcode result.chunks against a root type that declares no such field, got: {out}"
);
assert!(out.contains("// skipped:"), "got: {out}");
}
#[test]
fn chunks_have_content_still_renders_when_call_root_declares_chunks() {
let resolver = resolver_anchored_at(Some("Document"));
let out = render_chunks_have_content_call(&resolver);
assert!(out.contains("result.chunks"), "got: {out}");
assert!(!out.contains("// skipped:"), "got: {out}");
}
#[test]
fn chunks_have_content_renders_when_no_root_type_is_anchored() {
let resolver = resolver_anchored_at(None);
let out = render_chunks_have_content_call(&resolver);
assert!(out.contains("result.chunks"), "got: {out}");
assert!(!out.contains("// skipped:"), "got: {out}");
}