use assert_cmd::prelude::*; use assert_fs::prelude::*; use predicates::prelude::*; use std::fs; use std::io::Write; use std::path::{Path}; use std::process::{Command}; fn empty_dir() -> Result { let dir = assert_fs::TempDir::new()?; Ok(dir) } fn init_dir(dir: &Path) -> Result<(), assert_cmd::cargo::CargoError> { let mut cmd = Command::cargo_bin("nancy")?; cmd.arg("init") .arg("--name").arg("Temporary data directory") .arg(dir) .assert() .success(); Ok(()) } fn add_some_files(dir: &Path) -> Result<(), Box> { let subdir = dir.join("foo").join("bar"); let bazpath = subdir.join("baz.txt"); fs::create_dir_all(subdir)?; let mut bazfile = fs::File::create(bazpath)?; write!( bazfile, "{}", "bat", )?; Ok(()) } #[test] fn init_missing_dir() -> Result<(), Box> { let mut cmd = Command::cargo_bin("nancy")?; cmd.arg("init") .arg("--name").arg("Missing data directory") .arg("/path/to/missing/dir") .assert() .failure(); Ok(()) } #[test] fn init_empty_dir() -> Result<(), Box> { let dir = empty_dir()?; init_dir(dir.path())?; Ok(()) } fn record_dir(dir: &Path) -> Result { let mut cmd = Command::cargo_bin("nancy")?; Ok(cmd.arg("record") .arg("--message").arg("Test recording") .arg(dir) .assert() .success()) } #[test] fn record_empty_dir() -> Result<(), Box> { let d = empty_dir()?; let path = d.path(); init_dir(path)?; record_dir(path)?; Ok(()) } #[test] fn re_record_with_files() -> Result<(), Box> { let d = empty_dir()?; let path = d.path(); init_dir(path)?; record_dir(path)?; add_some_files(path)?; record_dir(path)?; Ok(()) }