relay-knowledge 1.1.17

Graph-database-based knowledge graph project.
Documentation
use super::*;

#[test]
fn usage_and_runtime_failures_map_to_distinct_exit_codes() {
    assert_eq!(CliError::MissingValue("--query").exit_code(), 2);
    assert_eq!(
        CliError::RuntimeConfigFailed("invalid config".to_owned()).exit_code(),
        1
    );
}

#[test]
fn api_failures_preserve_structured_machine_readable_stderr() {
    let error = CliError::api_failed(
        ApiError::invalid_argument("invalid repository"),
        OutputFormat::Json,
    );
    let rendered: serde_json::Value =
        serde_json::from_str(&error.render_stderr()).expect("API stderr should be JSON");

    assert_eq!(rendered["error_kind"], "invalid_argument");
    assert_eq!(rendered["message"], "invalid repository");
}

#[test]
fn parse_diagnostics_render_context_in_text_and_json_formats() {
    let text = CliError::Diagnostic(Box::new(CliDiagnostic::new(
        "unknown command".to_owned(),
        Some("relay-knowledge help".to_owned()),
        Some("relay-knowledge status".to_owned()),
        vec!["repo".to_owned()],
        Some("stats".to_owned()),
        vec!["status".to_owned()],
        OutputFormat::Text,
    )));
    let json = CliError::Diagnostic(Box::new(CliDiagnostic::new(
        "unknown command".to_owned(),
        Some("relay-knowledge help".to_owned()),
        None,
        vec!["repo".to_owned()],
        Some("stats".to_owned()),
        vec!["status".to_owned()],
        OutputFormat::Json,
    )));

    assert_eq!(
        text.render_stderr(),
        "unknown command\nTry: relay-knowledge status\nUsage: relay-knowledge help"
    );
    let rendered: serde_json::Value =
        serde_json::from_str(&json.render_stderr()).expect("diagnostic stderr should be JSON");
    assert_eq!(rendered["matched_path"], serde_json::json!(["repo"]));
    assert_eq!(rendered["unexpected_token"], "stats");
    assert_eq!(rendered["expected"], serde_json::json!(["status"]));
}