use anyhow::Result;
use assert_cmd::Command;
use std::path::Path;
use tempfile::NamedTempFile;
fn cmd(db: &Path, args: &[&str]) -> Result<Command> {
let mut cmd = Command::cargo_bin("jerbs")?;
cmd.arg(db);
cmd.args(args);
Ok(cmd)
}
#[test]
fn test_init() -> Result<()> {
let db_file = NamedTempFile::new()?;
let db = db_file.path();
cmd(db, &["init"])?.assert().success();
Ok(())
}
#[test]
fn test_take() -> Result<()> {
let db_file = NamedTempFile::new()?;
let db = db_file.path();
cmd(db, &["init"])?.assert().success();
cmd(db, &["create", "-c", "1", "-d", "JOBDATA"])?
.assert()
.success();
cmd(db, &["take", "WORKERDATA"])?.assert().success();
cmd(db, &["take", "WORKERDATA"])?.assert().failure();
Ok(())
}
#[test]
fn test_monitor() -> Result<()> {
let db_file = NamedTempFile::new()?;
let db = db_file.path();
cmd(db, &["init"])?.assert().success();
cmd(db, &["create", "-c", "12", "-d", "JOBDATA"])?
.assert()
.success();
cmd(db, &["log-start", "WORKERDATA1"])?.assert().failure();
cmd(db, &["log-finish", "WORKERDATA1", "0"])?
.assert()
.failure();
cmd(db, &["take", "WORKERDATA1"])?.assert().success();
cmd(db, &["log-start", "WORKERDATA1"])?.assert().success();
cmd(db, &["log-finish", "WORKERDATA1", "0"])?
.assert()
.success();
cmd(db, &["log-start", "WORKERDATA1"])?.assert().failure();
cmd(db, &["log-finish", "WORKERDATA1", "0"])?
.assert()
.failure();
cmd(db, &["take", "WORKERDATA1"])?.assert().success();
cmd(db, &["monitor", "WORKERDATA1", "--", "true"])?
.assert()
.success();
cmd(db, &["log-finish", "WORKERDATA1", "0"])?
.assert()
.failure();
cmd(db, &["take", "WORKERDATA1"])?.assert().success();
cmd(
db,
&["monitor", "WORKERDATA1", "--", "nosuchcommand_foobarbaz"],
)?
.assert()
.failure();
cmd(db, &["log-start", "WORKERDATA1"])?.assert().failure();
cmd(db, &["log-finish", "WORKERDATA1", "0"])?
.assert()
.failure();
cmd(db, &["take", "WORKERDATA1"])?.assert().success();
cmd(db, &["monitor", "WORKERDATA1", "--", "false"])?
.assert()
.failure();
cmd(db, &["log-start", "WORKERDATA1"])?.assert().failure();
cmd(db, &["log-finish", "WORKERDATA1", "0"])?
.assert()
.failure();
Ok(())
}