nancyrs/tests/record.rs
2022-11-22 09:16:03 -05:00

95 lines
2.0 KiB
Rust

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<assert_fs::TempDir, assert_fs::fixture::FixtureError> {
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<dyn std::error::Error>> {
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<dyn std::error::Error>> {
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<dyn std::error::Error>> {
let dir = empty_dir()?;
init_dir(dir.path())?;
Ok(())
}
fn record_dir(dir: &Path) -> Result<assert_cmd::assert::Assert, assert_cmd::cargo::CargoError> {
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<dyn std::error::Error>> {
let d = empty_dir()?;
let path = d.path();
init_dir(path)?;
record_dir(path)?;
Ok(())
}
#[test]
fn re_record_with_files() -> Result<(), Box<dyn std::error::Error>> {
let d = empty_dir()?;
let path = d.path();
init_dir(path)?;
record_dir(path)?;
add_some_files(path)?;
record_dir(path)?;
Ok(())
}