#[cfg(test)]
mod tests {
use std::{os::unix::fs::PermissionsExt, path::PathBuf};
#[cfg(feature = "serde")]
use notox::JsonOutput;
use notox::{Notox, NotoxOutput};
#[test]
fn test_parse_args_clean_directory() {
let dir = "src".to_string();
let vec_args = ["notox".to_string(), dir.clone()];
let res = notox::parse_args(&vec_args);
let (options, vect) = res.ok().unwrap();
let res_path = Notox::new(options.clone()).run(&vect);
let number = std::fs::read_dir(dir)
.ok()
.unwrap()
.filter(|entry| entry.is_ok())
.count();
assert_eq!(
options,
notox::NotoxArgs {
dry_run: true,
output: NotoxOutput::Default
}
);
assert_eq!(res_path.len(), number + 1);
}
#[test]
fn test_check_similars_void() {
let res = notox::check_similar(None, &mut String::new(), false);
assert!(!res);
}
fn setup(dir: &String) {
let directory_path = PathBuf::from(dir);
if directory_path.exists() {
cleanup(dir);
}
std::fs::create_dir(&directory_path).unwrap();
std::fs::File::create(directory_path.join("test 1.txt")).unwrap();
std::fs::File::create(directory_path.join("test_2.txt")).unwrap();
let mut second_level = dir.clone();
second_level.push_str(" second");
let second_level = &directory_path.join(&second_level);
std::fs::create_dir(second_level).unwrap();
std::fs::File::create(second_level.join("test 3.txt")).unwrap();
std::fs::File::create(second_level.join("test_4.txt")).unwrap();
std::fs::File::create(second_level.join("test_5.txt")).unwrap();
let mut perms = std::fs::metadata(second_level.join("test_5.txt"))
.unwrap()
.permissions();
perms.set_mode(0o000);
std::fs::set_permissions(second_level.join("test_5.txt"), perms).unwrap();
let mut perms = std::fs::metadata(second_level).unwrap().permissions();
perms.set_mode(0o000);
std::fs::set_permissions(second_level, perms).unwrap();
}
fn cleanup(dir: &String) {
let directory_path = PathBuf::from(&dir);
let text_1 = directory_path.join("test_1.txt");
if text_1.exists() {
std::fs::remove_file(text_1).unwrap();
}
let text_2 = directory_path.join("test_2.txt");
if text_2.exists() {
std::fs::remove_file(text_2).unwrap();
}
let mut second_level = dir.clone();
second_level.push_str("_second");
let second_level = &directory_path.join(&second_level);
if second_level.exists() && second_level.is_dir() {
let mut perms = std::fs::metadata(second_level).unwrap().permissions();
perms.set_mode(0o777);
std::fs::set_permissions(second_level, perms).unwrap();
}
let text_3 = second_level.join("test 3.txt");
if text_3.exists() {
std::fs::remove_file(text_3).unwrap();
}
let text_4 = second_level.join("test_4.txt");
if text_4.exists() {
std::fs::remove_file(text_4).unwrap();
}
let text_5 = second_level.join("test_5.txt");
if text_5.exists() {
let mut perms = std::fs::metadata(&text_5).unwrap().permissions();
perms.set_mode(0o777);
std::fs::set_permissions(&text_5, perms).unwrap();
std::fs::remove_file(text_5).unwrap();
}
if second_level.exists() && second_level.is_dir() {
std::fs::remove_dir(second_level).unwrap();
}
if directory_path.exists() && directory_path.is_dir() {
std::fs::remove_dir(&directory_path).unwrap();
}
}
#[test]
#[cfg(feature = "serde")]
fn test_parse_args_clean_directory_recursive() {
let dir = "test_folder".to_string();
setup(&dir);
let vec_args = [
"notox".to_string(),
dir.clone(),
"-j".to_string(),
"-d".to_string(),
];
let res = notox::parse_args(&vec_args);
let (options, vect) = res.ok().unwrap();
let res_path = Notox::new(options.clone()).run(&vect);
assert_eq!(
options,
notox::NotoxArgs {
dry_run: false,
output: NotoxOutput::JsonOutput {
json: JsonOutput::JsonDefault,
pretty: false
}
}
);
assert_eq!(res_path.len(), 5);
cleanup(&dir);
}
#[test]
fn test_parse_args_clean_directory_recursive_verbose() {
let dir = "test_folder_verbose".to_string();
setup(&dir);
let vec_args = ["notox".to_string(), dir.clone(), "-d".to_string()];
let res = notox::parse_args(&vec_args);
let (options, vect) = res.ok().unwrap();
let res_path = Notox::new(options.clone()).run(&vect);
assert_eq!(
options,
notox::NotoxArgs {
dry_run: false,
output: NotoxOutput::Default
}
);
assert_eq!(res_path.len(), 5);
cleanup(&dir);
}
}