sshconfig-lint 0.4.0

Linter for OpenSSH client config files
Documentation
use assert_cmd::cargo::cargo_bin_cmd;
use predicates::prelude::*;

#[test]
fn cli_clean_config_exits_0() {
    cargo_bin_cmd!("sshconfig-lint")
        .arg("--config")
        .arg("tests/fixtures/basic.config")
        .assert()
        .success()
        .stdout(predicate::str::contains("No issues found"));
}

#[test]
fn cli_missing_config_file_exits_2() {
    cargo_bin_cmd!("sshconfig-lint")
        .arg("--config")
        .arg("tests/fixtures/does_not_exist.config")
        .assert()
        .code(2)
        .stderr(predicate::str::contains("not found"));
}

#[test]
fn cli_error_severity_exits_1() {
    cargo_bin_cmd!("sshconfig-lint")
        .arg("--config")
        .arg("tests/fixtures/missing_identity.config")
        .assert()
        .code(1)
        .stdout(predicate::str::contains("identity-file-exists"));
}

#[test]
fn cli_json_format() {
    cargo_bin_cmd!("sshconfig-lint")
        .arg("--config")
        .arg("tests/fixtures/duplicate_host.config")
        .arg("--format")
        .arg("json")
        .assert()
        .success()
        .stdout(predicate::str::contains("\"rule\":\"duplicate-host\""))
        .stdout(predicate::str::contains("\"code\":\"DUP_HOST\""));
}

#[test]
fn cli_strict_treats_warnings_as_errors() {
    cargo_bin_cmd!("sshconfig-lint")
        .arg("--config")
        .arg("tests/fixtures/duplicate_host.config")
        .arg("--strict")
        .assert()
        .code(1)
        .stdout(predicate::str::contains("duplicate-host"));
}

#[test]
fn cli_no_includes_skips_resolution() {
    cargo_bin_cmd!("sshconfig-lint")
        .arg("--config")
        .arg("tests/fixtures/basic.config")
        .arg("--no-includes")
        .assert()
        .success();
}