malvin 0.2.4

Non-interactive research and coding agent
use super::{seed_malvin_checks, seed_malvin_config};
use crate::MALVIN_TEST_ALLOW_HOME_CONFIG_MUTATION;
use crate::test_utils::{revoke_home_malvin_config_mutation_for_test, with_isolated_home};

#[test]
fn kiss_cov_unit_names() {
    let _ = seed_malvin_checks;
    let _ = seed_malvin_config;
    let _ = stringify!(ensure_git_repo_for_checks_seed);
}

#[test]
fn seed_malvin_checks_writes_under_git_root() {
    with_isolated_home(|work| {
        seed_malvin_checks(work, "true\n");
        assert!(crate::malvin_checks_path(work).is_file());
    });
}

#[test]
fn ensure_git_repo_for_checks_seed_idempotent() {
    let tmp = tempfile::tempdir().expect("tempdir");
    let work = tmp.path();
    super::ensure_git_repo_for_checks_seed(work);
    super::ensure_git_repo_for_checks_seed(work);
}

#[test]
fn seed_malvin_checks_skips_git_init_when_repo_exists() {
    let tmp = tempfile::tempdir().expect("tempdir");
    let work = tmp.path();
    std::process::Command::new("git")
        .args(["init"])
        .current_dir(work)
        .status()
        .expect("git init");
    seed_malvin_checks(work, "true\n");
    assert!(crate::malvin_checks_path(work).is_file());
}

#[test]
fn seed_malvin_config_requires_mutation_consent() {
    let _saved =
        crate::test_utils::SavedEnvVars::capture(&[MALVIN_TEST_ALLOW_HOME_CONFIG_MUTATION]);
    revoke_home_malvin_config_mutation_for_test();
    let tmp = tempfile::tempdir().expect("tempdir");
    let result = std::panic::catch_unwind(|| {
        seed_malvin_config(tmp.path(), "x\n");
    });
    assert!(result.is_err(), "seed without isolation consent must panic");
}

#[test]
fn seed_malvin_config_writes_under_isolated_home() {
    with_isolated_home(|work| {
        seed_malvin_config(work, "mem_limit_gb = 3\n");
        let text = std::fs::read_to_string(crate::malvin_config_path(work)).expect("read");
        assert_eq!(text, "mem_limit_gb = 3\n");
    });
}