use greentic_designer::knowledge::Knowledge;
use greentic_designer::ui::tool_bridge::dispatch;
use serde_json::{Value, json};
use std::sync::Arc;
#[tokio::test]
async fn validate_then_optimize_round_trip() {
let kb = Arc::new(Knowledge::embedded());
let validate_args = json!({
"card": {
"type": "AdaptiveCard",
"version": "1.6",
"speak": "Hello",
"body": [{"type":"TextBlock","text":"Hi","wrap":true}]
},
"host": "teams"
})
.to_string();
let validate_result = dispatch(&kb, "validate_card", &validate_args).await;
let validate_parsed: Value = serde_json::from_str(&validate_result).unwrap();
assert_eq!(validate_parsed["valid"], true);
let optimize_args = json!({
"card": {
"type": "AdaptiveCard",
"version": "1.6",
"body": [{"type":"Image","url":"x.png"}]
},
"accessibility": true
})
.to_string();
let optimize_result = dispatch(&kb, "optimize_card", &optimize_args).await;
let optimize_parsed: Value = serde_json::from_str(&optimize_result).unwrap();
assert!(optimize_parsed["card"]["speak"].is_string());
}
#[tokio::test]
async fn knowledge_base_loads_embedded() {
let kb = Knowledge::embedded();
let _ = kb.entry_count();
}
#[tokio::test]
async fn pack_card_dispatch_returns_ui_message() {
let kb = Arc::new(Knowledge::embedded());
let args = json!({"name": "test", "cards": []}).to_string();
let result = dispatch(&kb, "pack_card", &args).await;
let parsed: Value = serde_json::from_str(&result).unwrap();
assert!(parsed["error"].as_str().unwrap().contains("UI"));
}