mod common;
use common::{command, root_path};
use sqlarfs::Connection;
use xpct::{be_err, be_false, be_ok, expect};
#[test]
fn errors_when_path_is_root() -> eyre::Result<()> {
let temp_dir = tempfile::tempdir()?;
let archive_path = temp_dir.path().join("test.sqlar");
expect!(command(&[
"remove",
"--archive",
&archive_path.to_string_lossy(),
&root_path().to_string_lossy(),
]))
.to(be_err());
Ok(())
}
#[test]
fn errors_when_archive_does_not_exist() -> eyre::Result<()> {
expect!(command(&[
"remove",
"--archive",
"nonexistent.sqlar",
"path"
]))
.to(be_err());
Ok(())
}
#[test]
fn errors_when_path_does_not_exist() -> eyre::Result<()> {
let temp_dir = tempfile::tempdir()?;
let archive_path = temp_dir.path().join("test.sqlar");
Connection::create_new(&archive_path)?;
expect!(command(&[
"remove",
"--archive",
&archive_path.to_string_lossy(),
"nonexistent"
]))
.to(be_err());
Ok(())
}
#[test]
fn errors_when_path_is_absolute() -> eyre::Result<()> {
let temp_dir = tempfile::tempdir()?;
let archive_path = temp_dir.path().join("test.sqlar");
Connection::create_new(&archive_path)?;
let abs_path = if cfg!(windows) { r"C:\file" } else { "/file" };
expect!(command(&[
"remove",
"--archive",
&archive_path.to_string_lossy(),
abs_path,
]))
.to(be_err());
Ok(())
}
#[test]
fn removes_path_from_archive() -> eyre::Result<()> {
let temp_dir = tempfile::tempdir()?;
let archive_path = temp_dir.path().join("test.sqlar");
Connection::create_new(&archive_path)?.exec(|archive| {
archive.open("file")?.create_file()?;
sqlarfs::Result::Ok(())
})?;
expect!(command(&[
"remove",
"--archive",
&archive_path.to_string_lossy(),
"file"
]))
.to(be_ok());
let file_exists =
Connection::open(&archive_path)?.exec(|archive| archive.open("file")?.exists())?;
expect!(file_exists).to(be_false());
Ok(())
}