osp-cli 1.5.1

CLI and REPL for querying and managing OSP infrastructure data
Documentation
use crate::temp_support::make_temp_dir;
use crate::test_env::isolated_env;
use assert_cmd::Command;
use serde_json::Value;

fn run_repl_debug(args: &[&str]) -> std::process::Output {
    let home = make_temp_dir("osp-cli-repl-debug");
    let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("osp"));
    cmd.env_clear()
        .env("PATH", "/usr/bin:/bin")
        .env("TERM", "xterm-256color")
        .env("LANG", "C.UTF-8");
    for (key, value) in isolated_env(home.path()) {
        cmd.env(key, value);
    }
    cmd.args(args).assert().success().get_output().clone()
}

#[test]
fn repl_debug_highlight_reports_help_alias_projection_contract() {
    let output = run_repl_debug(&["repl", "debug-highlight", "--line", "help history -"]);
    let payload: Value =
        serde_json::from_slice(&output.stdout).expect("debug-highlight stdout should be json");
    assert_eq!(payload["projected_line"], "     history -");
    let spans = payload["spans"]
        .as_array()
        .expect("spans should render as an array");
    assert!(
        spans
            .iter()
            .any(|span| span["text"] == "help" && span["kind"] == "command_valid")
    );
    assert!(
        spans
            .iter()
            .any(|span| span["text"] == "history" && span["kind"] == "command_valid")
    );
    assert!(
        output.stderr.is_empty(),
        "unexpected stderr: {}",
        String::from_utf8_lossy(&output.stderr)
    );
}

#[test]
fn repl_debug_highlight_reports_hex_literal_rgb_contract() {
    let output = run_repl_debug(&["repl", "debug-highlight", "--line", "#ff00cc"]);
    let payload: Value =
        serde_json::from_slice(&output.stdout).expect("debug-highlight stdout should be json");
    let spans = payload["spans"]
        .as_array()
        .expect("spans should render as an array");
    assert_eq!(spans.len(), 1);
    assert_eq!(spans[0]["text"], "#ff00cc");
    assert_eq!(spans[0]["kind"], "color_literal");
    assert_eq!(spans[0]["rgb"], serde_json::json!([255, 0, 204]));
    assert!(
        output.stderr.is_empty(),
        "unexpected stderr: {}",
        String::from_utf8_lossy(&output.stderr)
    );
}