objectiveai-sdk 2.0.7

ObjectiveAI SDK, definitions, and utilities
Documentation
use super::{InstallError, build_headers};
use indexmap::IndexMap;
use std::path::PathBuf;

#[test]
fn install_error_display_strings_are_useful() {
    let e = InstallError::ManifestBadStatus {
        code: reqwest::StatusCode::NOT_FOUND,
        url: "https://raw.githubusercontent.com/o/r/HEAD/objectiveai.json".to_string(),
        body: "Not Found".to_string(),
    };
    let s = e.to_string();
    assert!(s.contains("404"), "{s}");
    assert!(s.contains("objectiveai.json"), "{s}");
    assert!(s.contains("Not Found"), "{s}");

    let e = InstallError::BinaryBadStatus {
        code: reqwest::StatusCode::FORBIDDEN,
        url: "https://github.com/o/r/releases/download/v1.0.0/myplugin".to_string(),
    };
    let s = e.to_string();
    assert!(s.contains("403"), "{s}");
    assert!(s.contains("myplugin"), "{s}");

    let e = InstallError::BinaryWrite(
        PathBuf::from("/tmp/oai/plugins/r/plugin"),
        std::io::Error::other("disk full"),
    );
    let s = e.to_string();
    assert!(s.contains("plugin"), "{s}");
    assert!(s.contains("disk full"), "{s}");

    let e = InstallError::InvalidHeaderName {
        name: "bad name!".to_string(),
        reason: "invalid HTTP header name".to_string(),
    };
    let s = e.to_string();
    assert!(s.contains("bad name!"), "{s}");
}

#[test]
fn build_headers_rejects_invalid_name() {
    let mut h = IndexMap::new();
    h.insert("invalid header!".to_string(), "v".to_string());
    let result = build_headers(Some(&h));
    match result {
        Err(InstallError::InvalidHeaderName { name, .. }) => {
            assert_eq!(name, "invalid header!");
        }
        Err(other) => panic!("expected InvalidHeaderName, got {other:?}"),
        Ok(_) => panic!("expected error"),
    }
}

#[test]
fn build_headers_accepts_valid_pair() {
    let mut h = IndexMap::new();
    h.insert("Authorization".to_string(), "token abc".to_string());
    let map = build_headers(Some(&h)).unwrap();
    assert_eq!(map.get("authorization").unwrap().to_str().unwrap(), "token abc");
}

#[test]
fn build_headers_none_returns_empty_map() {
    let map = build_headers(None).unwrap();
    assert!(map.is_empty());
}