use agy_bridge::prelude::*;
mod common;
#[test]
fn trigger_entry_serialization_roundtrip() {
let entry = agy_bridge::triggers::TriggerEntry {
name: "test_every".into(),
config: agy_bridge::triggers::TriggerConfig::every_secs(5),
message_template: "ping from every".into(),
};
let json = serde_json::to_string(&entry).expect("serialize");
let parsed: agy_bridge::triggers::TriggerEntry =
serde_json::from_str(&json).expect("deserialize");
assert_eq!(parsed.name, "test_every");
assert_eq!(parsed.message_template, "ping from every");
}
#[test]
fn trigger_config_every_validates() {
let config = agy_bridge::triggers::TriggerConfig::every_secs(10);
let json = serde_json::to_value(&config).expect("to_value");
let every = json.get("Every").expect("should have Every variant");
let interval = every["interval"]
.as_f64()
.expect("interval should be numeric");
assert!(
(interval - 10.0).abs() < f64::EPSILON,
"Expected interval 10, got {interval}"
);
}
#[test]
fn trigger_config_on_file_change_validates() {
let config = agy_bridge::triggers::TriggerConfig::on_file_change("/tmp/watch");
let json = serde_json::to_value(&config).expect("to_value");
let fc = json
.get("OnFileChange")
.expect("should have OnFileChange variant");
assert_eq!(fc["path"], "/tmp/watch");
}
#[test]
fn test_trigger_agent_creation() {
common::run_live_test("test_trigger_agent_creation", || {
let _key = common::api_key();
let rt = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.expect("build runtime");
rt.block_on(async {
let bridge = agy_bridge::AgyBridge::builder().build()?;
let triggers = vec![agy_bridge::triggers::TriggerEntry {
name: "test_every".into(),
config: agy_bridge::triggers::TriggerConfig::every_secs(10),
message_template: "ping from every".into(),
}];
let config = AgentConfig::builder()
.system_instructions("You are a test agent. Reply with OK.")
.triggers(triggers)
.capabilities(agy_bridge::config::CapabilitiesConfig::custom_tools_only())
.policies(vec![agy_bridge::policies::PolicyRule::AllowAll])
.build();
let agent = bridge.agent(config).await?;
let result = agent.chat_text("Say hello").await;
match result {
Ok(text) => {
assert!(!text.is_empty(), "Expected non-empty response");
}
Err(e) => {
eprintln!("Trigger agent prompt returned error (acceptable): {e}");
}
}
agent.shutdown().await?;
Ok(())
})
});
}