use super::handshake::{Version, capabilities};
use serde_json::json;
#[test]
fn r1_rows_6_7_v1_load_and_v2_session_name_the_resume_capability() -> anyhow::Result<()> {
let (version, resumable, capability) =
capabilities(json!({"protocolVersion":1,"agentCapabilities":{"loadSession":true}}))?;
assert_eq!(version, Version::One);
assert!(resumable);
assert_eq!(capability, "agentCapabilities.loadSession");
let (version, resumable, capability) = capabilities(
json!({"protocolVersion":2,"info":{"name":"fake","version":"1"},"capabilities":{"session":{}}}),
)?;
assert_eq!(version, Version::Two);
assert!(resumable);
assert_eq!(
capability,
"capabilities.session (schema 1.5.0 includes resume)"
);
assert!(
capabilities(
json!({"protocolVersion":2,"info":{"name":"fake","version":"1"},"capabilities":{}})
)
.is_err()
);
Ok(())
}
#[test]
fn r1_all_session_response_types_are_selected_by_version_and_operation() -> anyhow::Result<()> {
for version in [Version::One, Version::Two] {
for prior in [None, Some("saved")] {
let answer = if prior.is_some() {
json!({})
} else {
json!({"sessionId":"new"})
};
let (id, config) = super::handshake::session_answer(version, prior, answer)?;
assert_eq!(id, prior.unwrap_or("new"));
assert_eq!(config, json!([]));
let error =
super::handshake::session_answer(version, prior, json!("fixture-private-value"))
.err()
.ok_or_else(|| anyhow::anyhow!("malformed session reply accepted"))?;
assert!(!error.to_string().contains("fixture-private-value"));
assert!(error.to_string().contains(if prior.is_none() {
"session_new"
} else if version == Version::One {
"session_load"
} else {
"session_resume"
}));
}
}
let (version, resumable, capability) =
capabilities(json!({"protocolVersion":1,"agentCapabilities":{"loadSession":false}}))?;
assert_eq!(version, Version::One);
assert!(!resumable);
assert_eq!(capability, "agentCapabilities.loadSession");
Ok(())
}