use fs_more::error::FileRemoveError;
use fs_more_test_harness::{
prelude::*,
trees::structures::{empty::EmptyTree, simple::SimpleTree},
};
#[test]
fn remove_file_deletes_file() {
let harness = SimpleTree::initialize();
let removal_result = fs_more::file::remove_file(harness.yes.hello_world_txt.as_path());
assert!(
removal_result.is_ok(),
"failed to remove file: expected Ok, got {}",
removal_result.unwrap_err()
);
harness.empty_txt.assert_exists();
harness.yes.hello_world_txt.assert_not_exists();
harness.destroy();
}
#[test]
fn remove_file_does_not_follow_symlinks() {
let harness = SimpleTree::initialize();
let secondary_harness = SimpleTree::initialize();
harness.empty_txt.assert_is_file_and_remove();
harness.empty_txt.assert_not_exists();
secondary_harness.empty_txt.assert_is_file_and_not_symlink();
harness
.empty_txt
.symlink_to_file(secondary_harness.empty_txt.as_path());
harness
.empty_txt
.assert_is_valid_symlink_to_file_and_destination_matches(
secondary_harness.empty_txt.as_path(),
);
let captured_symlink_destination_file = secondary_harness.empty_txt.capture_with_content();
fs_more::file::remove_file(harness.empty_txt.as_path()).unwrap();
harness.empty_txt.assert_not_exists();
captured_symlink_destination_file.assert_unchanged();
harness.destroy();
}
#[test]
fn remove_file_errors_on_non_existent_file() {
let harness = EmptyTree::initialize();
let non_existent_file = harness.child_path("hello-world.txt");
non_existent_file.assert_not_exists();
let removal_result = fs_more::file::remove_file(&non_existent_file);
assert!(
removal_result.is_err(),
"failed to error on file removal: expected Err, got Ok"
);
assert_matches!(
removal_result.unwrap_err(),
FileRemoveError::NotFound { path }
if paths_equal_no_unc(&path, non_existent_file)
);
harness.destroy();
}