use assert_cmd::prelude::*;
use assert_fs::prelude::*;
use predicates::prelude::*;
use serial_test::serial;
use std::process::Command;
mod util;
#[test]
#[serial]
fn restore_child_auto_includes_buried_parent_and_is_idempotent()
-> Result<(), Box<dyn std::error::Error>> {
let tmp = assert_fs::TempDir::new()?;
util::set_var("HOME", tmp.path());
util::set_var("XDG_DATA_HOME", tmp.child(".xdg/data").path());
util::set_var("XDG_CONFIG_HOME", tmp.child(".xdg/config").path());
let d = tmp.child("test");
d.create_dir_all()?;
let f = d.child("popo");
f.write_str("content")?;
Command::cargo_bin("nrip")?.arg(f.path()).assert().success();
f.assert(predicate::path::missing());
d.assert(predicate::path::exists());
Command::cargo_bin("nrip")?.arg(d.path()).assert().success();
d.assert(predicate::path::missing());
Command::cargo_bin("nrip")?
.args(["-r", "popo", "-y"])
.assert()
.success();
d.assert(predicate::path::exists());
f.assert(predicate::path::exists());
Command::cargo_bin("nrip")?
.args(["-r", "test", "-y"])
.assert()
.success();
d.assert(predicate::path::exists());
f.assert(predicate::path::exists());
let index = tmp.child(".xdg/data/nrip/index.json");
let idx_str = std::fs::read_to_string(index.path())?;
assert!(
idx_str.contains(r#""items":[]"#) || idx_str.contains(r#""items": []"#),
"index should be empty, got: {idx_str}"
);
tmp.close()?;
Ok(())
}
#[test]
#[serial]
fn restore_parent_then_child_also_works() -> Result<(), Box<dyn std::error::Error>> {
let tmp = assert_fs::TempDir::new()?;
util::set_var("HOME", tmp.path());
util::set_var("XDG_DATA_HOME", tmp.child(".xdg/data").path());
util::set_var("XDG_CONFIG_HOME", tmp.child(".xdg/config").path());
let d = tmp.child("test");
d.create_dir_all()?;
let f = d.child("popo");
f.write_str("content")?;
Command::cargo_bin("nrip")?.arg(f.path()).assert().success();
Command::cargo_bin("nrip")?.arg(d.path()).assert().success();
d.assert(predicate::path::missing());
Command::cargo_bin("nrip")?
.args(["-r", "test", "-y"])
.assert()
.success();
d.assert(predicate::path::exists());
f.assert(predicate::path::missing());
Command::cargo_bin("nrip")?
.args(["-r", "popo", "-y"])
.assert()
.success();
d.assert(predicate::path::exists());
f.assert(predicate::path::exists());
Ok(())
}