use assert_cmd::prelude::*;
use assert_fs::prelude::*;
use predicates::prelude::*;
use secrecy::SecretString;
use std::process::Command;
use enc_file::{EncryptOptions, encrypt_file};
fn enc_file_cmd() -> Command {
Command::new(assert_cmd::cargo::cargo_bin!("enc-file"))
}
#[test]
fn dec_refuses_and_then_overwrites_with_explicit_out() -> Result<(), Box<dyn std::error::Error>> {
let td = assert_fs::TempDir::new()?;
let plain = td.child("plain.txt");
plain.write_str("hello secret\n")?;
let pw = SecretString::new("pw".to_string().into());
let pwfile = td.child("pw.txt");
pwfile.write_str("pw")?;
let ct = td.child("cipher.enc");
let opts = EncryptOptions::default();
encrypt_file(plain.path(), Some(ct.path()), pw, opts)?;
let out = td.child("out.txt");
out.write_str("preexisting")?;
enc_file_cmd()
.args(["dec", "--in"])
.arg(ct.path())
.args(["--out"])
.arg(out.path())
.args(["--password-file"])
.arg(pwfile.path())
.assert()
.failure()
.stderr(predicate::str::contains("use --force"));
out.assert("preexisting");
enc_file_cmd()
.args(["dec", "--in"])
.arg(ct.path())
.args(["--out"])
.arg(out.path())
.args(["--password-file"])
.arg(pwfile.path())
.args(["--force"])
.assert()
.success();
out.assert("hello secret\n");
td.close()?;
Ok(())
}
#[test]
fn dec_refuses_and_then_overwrites_with_default_out() -> Result<(), Box<dyn std::error::Error>> {
let td = assert_fs::TempDir::new()?;
let plain = td.child("data.txt");
plain.write_str("alpha\nbeta\ngamma\n")?;
let pwfile = td.child("pw.txt");
pwfile.write_str("pw")?;
let ct = td.child("data.txt.enc");
let opts = EncryptOptions::default();
let pw = SecretString::new("pw".to_string().into());
encrypt_file(plain.path(), Some(ct.path()), pw, opts)?;
plain.write_str("THIS WAS HERE BEFORE DEC\n")?;
enc_file_cmd()
.args(["dec", "--in"])
.arg(ct.path())
.args(["--password-file"])
.arg(pwfile.path())
.assert()
.failure()
.stderr(predicate::str::contains("use --force"));
plain.assert("THIS WAS HERE BEFORE DEC\n");
enc_file_cmd()
.args(["dec", "--in"])
.arg(ct.path())
.args(["--password-file"])
.arg(pwfile.path())
.args(["--force"])
.assert()
.success();
plain.assert("alpha\nbeta\ngamma\n");
td.close()?;
Ok(())
}