forjar 1.4.2

Rust-native Infrastructure as Code — bare-metal first, BLAKE3 state, provenance tracing
Documentation
//! Additional doctor tests — boost coverage of fix mode, stale locks,
//! state dir checks, status label methods, and output formatting.

use super::doctor::*;

#[test]
fn doctor_fix_with_valid_config() {
    let dir = tempfile::tempdir().unwrap();
    let file = dir.path().join("forjar.yaml");
    std::fs::write(
        &file,
        "version: \"1.0\"\nname: fix-test\nmachines:\n  m:\n    hostname: m\n    addr: 127.0.0.1\nresources: {}\n",
    ).unwrap();
    // Doctor with fix mode — doesn't crash regardless of cwd
    let result = cmd_doctor(Some(&file), false, true);
    assert!(result.is_ok());
}

// NOTE: check_state_dir uses hardcoded Path::new("state") relative to cwd.
// Tests that depend on cwd changes are inherently flaky in parallel test runs.
// These are tested via integration tests instead.

#[test]
fn doctor_fix_mode_runs_without_crash() {
    // Just verify fix mode doesn't panic with a valid config
    let dir = tempfile::tempdir().unwrap();
    let file = dir.path().join("forjar.yaml");
    std::fs::write(
        &file,
        "version: \"1.0\"\nname: fix-mode\nmachines:\n  m:\n    hostname: m\n    addr: 127.0.0.1\nresources: {}\n",
    ).unwrap();
    // Don't change cwd — just verify fix mode doesn't crash
    let _result = cmd_doctor(Some(&file), false, true);
}

#[test]
fn doctor_fix_json_mode() {
    let dir = tempfile::tempdir().unwrap();
    let file = dir.path().join("forjar.yaml");
    std::fs::write(
        &file,
        "version: \"1.0\"\nname: fix-json\nmachines:\n  m:\n    hostname: m\n    addr: 127.0.0.1\nresources: {}\n",
    ).unwrap();
    let _result = cmd_doctor(Some(&file), true, true);
}

#[test]
fn doctor_json_with_fix_no_cwd() {
    let dir = tempfile::tempdir().unwrap();
    let file = dir.path().join("forjar.yaml");
    std::fs::write(
        &file,
        "version: \"1.0\"\nname: json-fix\nmachines:\n  m:\n    hostname: m\n    addr: 127.0.0.1\nresources: {}\n",
    ).unwrap();
    // Don't change cwd — just verify json+fix mode doesn't crash
    let _result = cmd_doctor(Some(&file), true, true);
}

#[test]
fn doctor_network_local_machine() {
    let dir = tempfile::tempdir().unwrap();
    let file = dir.path().join("forjar.yaml");
    std::fs::write(
        &file,
        r#"version: "1.0"
name: net-test
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  f:
    type: file
    machine: local
    path: /tmp/test
    content: test
"#,
    )
    .unwrap();
    let result = cmd_doctor_network(Some(&file), false);
    assert!(result.is_ok());
}

#[test]
fn doctor_network_json() {
    let dir = tempfile::tempdir().unwrap();
    let file = dir.path().join("forjar.yaml");
    std::fs::write(
        &file,
        r#"version: "1.0"
name: net-json
machines:
  local:
    hostname: local
    addr: 127.0.0.1
resources:
  f:
    type: file
    machine: local
    path: /tmp/test
    content: test
"#,
    )
    .unwrap();
    let result = cmd_doctor_network(Some(&file), true);
    assert!(result.is_ok());
}