Files
fil/crates/kreuzberg/tests/test_batch_extract_schema.rs
Henrik Jess Nielsen b4c07d3693
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s
Nomad changes
2026-06-01 23:40:55 +02:00

57 lines
2.0 KiB
Rust

use kreuzberg::mcp::BatchExtractFilesParams;
use rmcp::schemars::schema_for;
#[test]
fn test_file_configs_items_is_object_not_boolean() {
// Regression test for https://github.com/kreuzberg-dev/kreuzberg/issues/877
// Moonshot AI (Kimi) rejects `"items": true` — items must be an object.
let schema = schema_for!(BatchExtractFilesParams);
let schema_value = serde_json::to_value(&schema).unwrap();
let items = &schema_value["properties"]["file_configs"]["items"];
assert!(
items.is_object(),
"file_configs items must be an object, got: {items} — \
Moonshot AI rejects boolean `items: true` (issue #877)"
);
}
#[test]
fn test_file_configs_items_accepts_null_and_object() {
// items schema must accept both null (use default) and object (per-file config).
let schema = schema_for!(BatchExtractFilesParams);
let schema_value = serde_json::to_value(&schema).unwrap();
let items = &schema_value["properties"]["file_configs"]["items"];
let any_of = items["anyOf"].as_array().expect("items must have anyOf");
let types: Vec<&str> = any_of.iter().filter_map(|s| s["type"].as_str()).collect();
assert!(
types.contains(&"null"),
"file_configs items must accept null, got anyOf: {any_of:?}"
);
assert!(
types.contains(&"object"),
"file_configs items must accept object, got anyOf: {any_of:?}"
);
}
#[test]
fn test_file_configs_is_not_required() {
// schema_with bypasses automatic Option<> handling — verify schemars still
// leaves file_configs out of `required` (the field is optional at the call site).
let schema = schema_for!(BatchExtractFilesParams);
let schema_value = serde_json::to_value(&schema).unwrap();
let is_required = schema_value["required"]
.as_array()
.map(|r| r.iter().any(|f| f.as_str() == Some("file_configs")))
.unwrap_or(false);
assert!(
!is_required,
"file_configs must be optional — outer Option<> must not appear in required"
);
}