use assert_cmd::Command;
use std::fs;
use tempfile::TempDir;
fn make_fake_data(tmp: &TempDir) -> std::path::PathBuf {
let data = tmp.path().join("atomcode-data");
fs::create_dir(&data).unwrap();
fs::write(data.join("auth.toml"), b"k=1").unwrap();
fs::write(data.join("config.toml"), b"x=1").unwrap();
fs::write(data.join("history"), b"hi").unwrap();
fs::create_dir(data.join("plugins")).unwrap();
data
}
#[test]
fn dry_run_makes_no_changes() {
let tmp = TempDir::new().unwrap();
let data = make_fake_data(&tmp);
Command::cargo_bin("atomcode")
.unwrap()
.env("ATOMCODE_HOME", &data)
.args(["uninstall", "--dry-run"])
.assert()
.success()
.stdout(predicates::str::contains("DRY RUN"));
assert!(data.join("auth.toml").exists());
assert!(data.join("history").exists());
assert!(data.join("plugins").exists());
}
#[test]
fn no_tty_no_flag_exits_2() {
let tmp = TempDir::new().unwrap();
let data = make_fake_data(&tmp);
Command::cargo_bin("atomcode")
.unwrap()
.env("ATOMCODE_HOME", &data)
.arg("uninstall")
.write_stdin("")
.assert()
.failure()
.code(2)
.stderr(predicates::str::contains("refusing to run interactively"));
assert!(data.join("auth.toml").exists());
}
#[test]
fn purge_and_keep_data_conflict_exit_2() {
let tmp = TempDir::new().unwrap();
let data = make_fake_data(&tmp);
Command::cargo_bin("atomcode")
.unwrap()
.env("ATOMCODE_HOME", &data)
.args(["uninstall", "--purge", "--keep-data"])
.assert()
.failure()
.code(2);
}