From aae86d9e44bc8e7ce311fcabcfd1ce2f6e4be011 Mon Sep 17 00:00:00 2001 From: Talison Fabio <54823205+talis-fb@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:02:31 -0300 Subject: [PATCH] test: add overwrite and cancel tests --- tests/integration.rs | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/tests/integration.rs b/tests/integration.rs index 7241cd1..ae6606c 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -194,6 +194,83 @@ fn multiple_files( assert_same_directory(before, after, !matches!(ext, DirectoryExtension::Zip)); } +#[proptest(cases = 25)] +fn multiple_files_with_conflict_and_choce_to_overwrite( + ext: DirectoryExtension, + #[any(size_range(0..1).lift())] extra_extensions: Vec, + #[strategy(0u8..3)] depth: u8, +) { + let dir = tempdir().unwrap(); + let dir = dir.path(); + + let before = &dir.join("before"); + let before_dir = &before.join("dir"); + fs::create_dir_all(before_dir).unwrap(); + create_random_files(before_dir, depth, &mut SmallRng::from_entropy()); + + let after = &dir.join("after"); + let after_dir = &after.join("dir"); + fs::create_dir_all(after_dir).unwrap(); + create_random_files(after_dir, depth, &mut SmallRng::from_entropy()); + + let archive = &dir.join(format!("archive.{}", merge_extensions(&ext, extra_extensions))); + ouch!("-A", "c", before_dir, archive); + + crate::utils::cargo_bin() + .arg("decompress") + .arg(archive) + .arg("-d") + .arg(after) + .arg("--yes") + //.write_stdin("y") + .assert() + .success(); + + assert_same_directory(before, after, false); +} + +#[proptest(cases = 25)] +fn multiple_files_with_conflict_and_choce_to_not_overwrite( + ext: DirectoryExtension, + #[any(size_range(0..1).lift())] extra_extensions: Vec, + #[strategy(0u8..3)] depth: u8, +) { + let dir = tempdir().unwrap(); + let dir = dir.path(); + + let before = &dir.join("before"); + let before_dir = &before.join("dir"); + fs::create_dir_all(before_dir).unwrap(); + create_random_files(before_dir, depth, &mut SmallRng::from_entropy()); + + let after = &dir.join("after"); + let after_dir = &after.join("dir"); + fs::create_dir_all(after_dir).unwrap(); + + let after_backup = &dir.join("after_backup"); + let after_backup_dir = &after_backup.join("dir"); + fs::create_dir_all(after_backup_dir).unwrap(); + + // Create a file with the same name as one of the files in the after directory + fs::write(after_dir.join("something.txt"), "Some content").unwrap(); + fs::copy(after_dir.join("something.txt"), after_backup_dir.join("something.txt")).unwrap(); + + let archive = &dir.join(format!("archive.{}", merge_extensions(&ext, extra_extensions))); + ouch!("-A", "c", before_dir, archive); + + crate::utils::cargo_bin() + .arg("decompress") + .arg(archive) + .arg("-d") + .arg(after) + .arg("--no") + .assert() + .success(); + + assert_same_directory(after, after_backup, false); +} + + #[cfg(feature = "unrar")] #[test] fn unpack_rar() -> Result<(), Box> {