pipedash-plugin-api 0.14.0

Plugin API for Pipedash - CI/CD pipeline dashboard
Documentation
use super::*;

fn config(pairs: &[(&str, &str)]) -> HashMap<String, String> {
    pairs
        .iter()
        .map(|(k, v)| (k.to_string(), v.to_string()))
        .collect()
}

#[test]
fn value_trims_and_rejects_blank() {
    let c = config(&[("a", "  x "), ("b", "   ")]);
    assert_eq!(value(&c, "a"), Some("x"));
    assert_eq!(value(&c, "b"), None);
    assert_eq!(value(&c, "c"), None);
    assert!(required_value(&c, "b", "missing b").is_err());
}

#[test]
fn comma_separated_drops_empty_and_keeps_duplicates() {
    let items: Vec<_> = comma_separated(" a, ,b,a ,").collect();
    assert_eq!(items, ["a", "b", "a"]);
}

#[test]
fn bool_value_is_strict() {
    let c = config(&[("t", "true"), ("u", "TRUE")]);
    assert!(bool_value(&c, "t"));
    assert!(!bool_value(&c, "u"));
    assert!(!bool_value(&c, "missing"));
}

#[test]
fn credential_and_selected_items() {
    let c = config(&[("token", " t "), ("selected_items", " a, ,b ")]);
    assert_eq!(credential(&c, "token").unwrap(), "t");
    assert_eq!(
        credential(&c, "key").unwrap_err().to_string(),
        PluginError::InvalidConfig("Missing key in config".to_string()).to_string()
    );
    assert_eq!(
        selected_items(&c),
        Some(vec!["a".to_string(), "b".to_string()])
    );
    assert_eq!(selected_items(&config(&[])), None);
    assert_eq!(
        selected_items(&config(&[("selected_items", "")])),
        Some(Vec::new())
    );
}

#[test]
fn insecure_is_true_only_for_the_word_true() {
    assert!(insecure(&config(&[("insecure", "true")])));
    assert!(!insecure(&config(&[("insecure", "yes")])));
    assert!(!insecure(&config(&[])));
}

#[test]
fn base_url_trims_trailing_slashes_and_rejects_blank() {
    let c = config(&[("a", " https://x.dev/// "), ("b", " / ")]);
    assert_eq!(base_url(&c, "a"), Some("https://x.dev"));
    assert_eq!(base_url(&c, "b"), None);
    assert_eq!(base_url(&c, "c"), None);
    assert!(required_base_url(&c, "b", "missing").is_err());
}

#[test]
fn http_base_url_validates_scheme_query_and_fragment() {
    let c = config(&[("u", "https://svc.dev/")]);
    let (raw, parsed) = http_base_url(&c, "u", "missing", "Svc").unwrap();
    assert_eq!(
        (raw, parsed.host_str()),
        ("https://svc.dev", Some("svc.dev"))
    );
    for bad in [
        "",
        "svc.dev",
        "ftp://svc.dev",
        "https://svc.dev?x=1",
        "https://svc.dev#f",
    ] {
        let c = config(&[("u", bad)]);
        let result = http_base_url(&c, "u", "missing", "Svc");
        assert!(
            matches!(result, Err(PluginError::InvalidConfig(_))),
            "{bad}"
        );
    }
}