use async_trait::async_trait;
use mecha10_behavior_runtime::{BehaviorNode, BehaviorNodeExt, Context, NodeStatus};
#[derive(Debug)]
struct TestBehavior {
tick_count: usize,
max_ticks: usize,
}
#[async_trait]
impl BehaviorNode for TestBehavior {
async fn tick(&mut self, _ctx: &Context) -> anyhow::Result<NodeStatus> {
self.tick_count += 1;
if self.tick_count >= self.max_ticks {
Ok(NodeStatus::Success)
} else {
Ok(NodeStatus::Running)
}
}
fn name(&self) -> &str {
"test_behavior"
}
}
#[tokio::test]
#[ignore = "Requires Redis infrastructure"]
async fn test_behavior_runs_until_complete() {
let ctx = Context::new("test_node").await.unwrap();
let mut behavior = TestBehavior {
tick_count: 0,
max_ticks: 3,
};
let status = behavior.run_until_complete(&ctx).await.unwrap();
assert_eq!(status, NodeStatus::Success);
assert_eq!(behavior.tick_count, 3);
}
#[tokio::test]
#[ignore = "Requires Redis infrastructure"]
async fn test_behavior_with_limit() {
let ctx = Context::new("test_node").await.unwrap();
let mut behavior = TestBehavior {
tick_count: 0,
max_ticks: 100,
};
let result = behavior.run_with_limit(&ctx, 10).await;
assert!(result.is_err());
}