Files
claw/tests/browser_bridge_contract_test.rs
木炎 bdf8e12246 feat: align browser callback runtime and export flows
Consolidate the browser task runtime around the callback path, add safer artifact opening for Zhihu exports, and cover the new service/browser flows with focused tests and supporting docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 21:44:53 +08:00

81 lines
2.4 KiB
Rust

use serde_json::{json, Value};
use sgclaw::browser::bridge_contract::{BridgeBrowserActionRequest, BridgeLifecycleCall};
#[test]
fn bridge_contract_names_match_documented_bridge_surface() {
let lifecycle_names = [
BridgeLifecycleCall::Connect.bridge_name(),
BridgeLifecycleCall::Start.bridge_name(),
BridgeLifecycleCall::Stop.bridge_name(),
BridgeLifecycleCall::SubmitTask.bridge_name(),
];
assert_eq!(
lifecycle_names,
[
"sgclawConnect",
"sgclawStart",
"sgclawStop",
"sgclawSubmitTask",
]
);
}
#[test]
fn bridge_contract_represents_browser_action_requests_without_ws_business_frames() {
let requests = vec![
BridgeBrowserActionRequest::new(
"navigate",
json!({ "url": "https://www.baidu.com" }),
"www.baidu.com",
),
BridgeBrowserActionRequest::new(
"click",
json!({ "selector": "#submit" }),
"www.zhihu.com",
),
BridgeBrowserActionRequest::new(
"getText",
json!({ "selector": "#content" }),
"www.zhihu.com",
),
];
let serialized = serde_json::to_value(&requests).unwrap();
let entries = serialized.as_array().unwrap();
let actions = entries
.iter()
.map(|entry| entry["action"].as_str().unwrap())
.collect::<Vec<_>>();
assert_eq!(
serialized,
json!([
{
"action": "navigate",
"params": { "url": "https://www.baidu.com" },
"expected_domain": "www.baidu.com"
},
{
"action": "click",
"params": { "selector": "#submit" },
"expected_domain": "www.zhihu.com"
},
{
"action": "getText",
"params": { "selector": "#content" },
"expected_domain": "www.zhihu.com"
}
])
);
assert_eq!(actions, vec!["navigate", "click", "getText"]);
let first = entries.first().unwrap();
let object = first.as_object().unwrap();
assert_eq!(object.len(), 3);
assert!(object.contains_key("action"));
assert!(object.contains_key("params"));
assert!(object.contains_key("expected_domain"));
assert_eq!(first["expected_domain"], Value::String("www.baidu.com".to_string()));
}