Warn about broad tool response projections
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use crank_core::{
|
||||
ToolDescription, ToolQualityFinding, ToolQualityReport, ToolQualitySchemaNode,
|
||||
ToolQualitySeverity, analyze_tool_identity_quality, analyze_tool_schema_quality,
|
||||
ToolDescription, ToolQualityFinding, ToolQualityMappingRule, ToolQualityMappingSet,
|
||||
ToolQualityReport, ToolQualitySchemaNode, ToolQualitySeverity, analyze_tool_identity_quality,
|
||||
analyze_tool_response_projection_quality, analyze_tool_schema_quality,
|
||||
};
|
||||
|
||||
#[test]
|
||||
@@ -181,6 +182,59 @@ fn recommends_enum_for_mode_like_string_parameter() {
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn warns_when_output_mapping_returns_full_response_body() {
|
||||
let mapping = ToolQualityMappingSet {
|
||||
rules: vec![ToolQualityMappingRule {
|
||||
source: "$.response.body".to_owned(),
|
||||
target: "$.output".to_owned(),
|
||||
}],
|
||||
};
|
||||
|
||||
let report = analyze_tool_response_projection_quality(&mapping);
|
||||
|
||||
assert!(has_finding(
|
||||
&report,
|
||||
"response_projection_full_body",
|
||||
ToolQualitySeverity::Warning
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn accepts_output_mapping_with_selected_fields() {
|
||||
let mapping = ToolQualityMappingSet {
|
||||
rules: vec![ToolQualityMappingRule {
|
||||
source: "$.response.body.rates.EUR".to_owned(),
|
||||
target: "$.output.rate".to_owned(),
|
||||
}],
|
||||
};
|
||||
|
||||
let report = analyze_tool_response_projection_quality(&mapping);
|
||||
|
||||
assert!(!report.blocking);
|
||||
assert!(report.findings.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn marks_large_output_projection_as_info() {
|
||||
let mapping = ToolQualityMappingSet {
|
||||
rules: (0..12)
|
||||
.map(|index| ToolQualityMappingRule {
|
||||
source: format!("$.response.body.field_{index}"),
|
||||
target: format!("$.output.field_{index}"),
|
||||
})
|
||||
.collect(),
|
||||
};
|
||||
|
||||
let report = analyze_tool_response_projection_quality(&mapping);
|
||||
|
||||
assert!(has_finding(
|
||||
&report,
|
||||
"response_projection_many_fields",
|
||||
ToolQualitySeverity::Info
|
||||
));
|
||||
}
|
||||
|
||||
fn has_finding(report: &ToolQualityReport, code: &str, severity: ToolQualitySeverity) -> bool {
|
||||
report
|
||||
.findings
|
||||
|
||||
Reference in New Issue
Block a user