codetether-agent 4.7.0-a-002.4

A2A-native AI coding agent for the CodeTether ecosystem
Documentation
use super::*;
use crate::swarm::{SubTask, SwarmConfig};

fn validator() -> SwarmValidator {
    SwarmValidator::new(
        SwarmConfig::default(),
        "test".to_string(),
        "model".to_string(),
    )
}

#[test]
fn test_validate_dependencies_no_cycle() {
    let subtasks = vec![
        SubTask::new("Task A", "Do A"),
        SubTask::new("Task B", "Do B").with_dependencies(vec![]),
        SubTask::new("Task C", "Do C"),
    ];
    let mut issues = Vec::new();
    validator().validate_dependencies(&subtasks, &mut issues);
    assert!(issues.is_empty());
}

#[test]
fn test_validate_dependencies_cycle() {
    let mut a = SubTask::new("Task A", "Do A");
    let mut b = SubTask::new("Task B", "Do B");
    let mut c = SubTask::new("Task C", "Do C");
    a.dependencies = vec![c.id.clone()];
    b.dependencies = vec![a.id.clone()];
    c.dependencies = vec![b.id.clone()];
    let mut issues = Vec::new();
    validator().validate_dependencies(&[a, b, c], &mut issues);
    assert_eq!(issues.len(), 1);
    assert_eq!(issues[0].severity, IssueSeverity::Error);
    assert!(issues[0].message.contains("Circular dependency"));
}

#[test]
fn test_validate_dependencies_missing() {
    let subtask =
        SubTask::new("Task A", "Do A").with_dependencies(vec!["non-existent-id".to_string()]);
    let mut issues = Vec::new();
    validator().validate_dependencies(&[subtask], &mut issues);
    assert_eq!(issues.len(), 1);
    assert_eq!(issues[0].severity, IssueSeverity::Error);
    assert!(issues[0].message.contains("missing subtask"));
}