relay-knowledge 1.1.14

Graph-database-based knowledge graph project.
Documentation
use super::*;
use crate::model_provider::test_support::test_service;

#[tokio::test]
async fn fallback_config_round_trips_and_rejects_invalid_values() {
    let service = test_service("fallback");
    let default = service
        .fallback_config()
        .await
        .expect("default fallback should load");
    assert_eq!(default.policies.len(), 2);

    let mut custom = default.clone();
    custom.policies[0].policy_id = "fast".to_owned();
    custom.policies[0].max_hops = 2;
    let saved = service
        .save_fallback_config(custom.clone())
        .await
        .expect("fallback should save");
    assert_eq!(saved, custom);
    assert_eq!(service.fallback_config().await.unwrap(), custom);

    custom.policies[0].cooldown_seconds = 3601;
    assert!(service.save_fallback_config(custom).await.is_err());
}

#[test]
fn rejects_duplicate_fallback_policies() {
    let config = ModelFallbackConfig {
        policies: vec![
            ModelFallbackPolicy {
                policy_id: "same".to_owned(),
                name: "Same".to_owned(),
                description: String::new(),
                enabled: true,
                strategy: ModelFallbackStrategy::OtherProviderOnly,
                max_hops: 1,
                cooldown_seconds: 1,
            },
            ModelFallbackPolicy {
                policy_id: "same".to_owned(),
                name: "Same".to_owned(),
                description: String::new(),
                enabled: true,
                strategy: ModelFallbackStrategy::OtherProviderOnly,
                max_hops: 1,
                cooldown_seconds: 1,
            },
        ],
    };

    assert!(validate_fallback_config(&config).is_err());
}