use assay_core::policy_engine::{evaluate_tool_args, VerdictStatus};
use serde_json::json;
#[test]
fn test_parity_batch_vs_streaming_engine() {
let policy_yaml = r#"
weather_tool:
type: object
properties:
city:
type: string
country:
type: string
required: ["city"]
"#;
let policy: serde_json::Value = serde_yaml::from_str(policy_yaml).unwrap();
let tool_name = "weather_tool";
let valid_args = json!({ "city": "Amsterdam", "country": "NL" });
let invalid_args = json!({ "country": "NL" });
let batch_verdict_valid = evaluate_tool_args(&policy, tool_name, &valid_args);
let batch_verdict_invalid = evaluate_tool_args(&policy, tool_name, &invalid_args);
let streaming_verdict_valid = evaluate_tool_args(&policy, tool_name, &valid_args);
let streaming_verdict_invalid = evaluate_tool_args(&policy, tool_name, &invalid_args);
assert_eq!(
batch_verdict_valid, streaming_verdict_valid,
"Batch and Streaming verdicts must match for Valid input"
);
assert_eq!(
batch_verdict_valid.status,
VerdictStatus::Allowed,
"Valid input should be Allowed"
);
assert_eq!(
batch_verdict_invalid, streaming_verdict_invalid,
"Batch and Streaming verdicts must match for Invalid input"
);
assert_eq!(
batch_verdict_invalid.status,
VerdictStatus::Blocked,
"Invalid input should be Blocked"
);
assert_eq!(
batch_verdict_invalid.reason_code, "E_ARG_SCHEMA",
"Reason code should match"
);
}