mod common;
use git_conform::core::api::{scan_dirs, scan_all};
use std::fs;
use std::path::Path;
use serial_test::serial;
#[test]
#[serial]
fn case_scan_dirs_hidden() {
let (_home_dir, tracking_file, tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
assert!(scan_dirs(vec![tests_dir.to_string()], &tracking_file, true).is_ok());
let track_file_up = fs::read_to_string(tracking_file.path).unwrap();
for n in 1..=3 {
assert!(track_file_up.contains(
format!("{tests_dir}/repo{n}").as_str()
));
assert!(track_file_up.contains(
format!("{tests_dir}/.hidden/repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/fake_repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/fake_repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/dir{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/dir{n}").as_str()
));
}
}
#[test]
#[serial]
fn case_scan_dirs_no_hidden() {
let (_home_dir, tracking_file, tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
assert!(scan_dirs(vec![tests_dir.to_string()], &tracking_file, false).is_ok());
let track_file_up = fs::read_to_string(tracking_file.path).unwrap();
for n in 1..=3 {
assert!(track_file_up.contains(
format!("{tests_dir}/repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/fake_repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/fake_repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/dir{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/dir{n}").as_str()
));
}
}
#[test]
#[serial]
fn case_scan_dirs_non_existent() {
let (_home_dir, tracking_file, _tests_dir) = common::setup().unwrap();
let dirs = vec![
format!("quegq4tq4q"),
format!("lvdslns"),
format!("fjioadbaob")
];
assert_eq!(scan_dirs(dirs, &tracking_file, true), Err(String::from("Directories validation failed")));
}
#[test]
#[serial]
fn case_scan_dirs_files() {
let (_home_dir, tracking_file, tests_dir) = common::setup().unwrap();
let mut dirs: Vec<String> = Vec::new();
for n in 1..=3 {
dirs.push(format!("{tests_dir}/file{n}"));
}
assert_eq!(scan_dirs(dirs, &tracking_file, true), Err(String::from("Directories validation failed")));
}
#[test]
#[serial]
fn case_scan_all() {
let (home_dir, tracking_file, tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
assert!(scan_all(home_dir, &tracking_file, true).is_ok());
let track_file_up = fs::read_to_string(tracking_file.path).unwrap();
for n in 1..=3 {
assert!(track_file_up.contains(
format!("{tests_dir}/repo{n}").as_str()
));
assert!(track_file_up.contains(
format!("{tests_dir}/.hidden/repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/fake_repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/fake_repo{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/dir{n}").as_str()
));
assert!(!track_file_up.contains(
format!("{tests_dir}/.hidden/dir{n}").as_str()
));
}
}
#[test]
#[serial]
fn case_scan_dirs_found_new() {
let (_home_dir, tracking_file, tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
let repos = scan_dirs(vec![tests_dir.to_string()], &tracking_file, true).unwrap();
for n in 1..=3 {
assert!(repos.contains(
format!("{tests_dir}/repo{n}").as_str()
));
assert!(repos.contains(
format!("{tests_dir}/.hidden/repo{n}").as_str()
));
}
}
#[test]
#[serial]
fn case_scan_dirs_found_none() {
let (_home_dir, mut tracking_file, tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
let dirs = vec![tests_dir.to_string()];
scan_dirs(dirs.clone(), &tracking_file, true).unwrap();
tracking_file.contents = fs::read_to_string(&tracking_file.path).unwrap();
assert!(scan_dirs(dirs, &tracking_file, true).unwrap().is_empty());
}
#[test]
#[serial]
fn case_scan_all_found_new() {
let (home_dir, tracking_file, tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
let repos = scan_all(home_dir, &tracking_file, true).unwrap();
for n in 1..=3 {
assert!(repos.contains(
format!("{tests_dir}/repo{n}").as_str()
));
assert!(repos.contains(
format!("{tests_dir}/.hidden/repo{n}").as_str()
));
}
}
#[test]
#[serial]
fn case_scan_all_found_none() {
let (home_dir, mut tracking_file, _tests_dir) = common::setup().unwrap();
if Path::new(tracking_file.path.as_str()).try_exists().unwrap() {
fs::remove_file(&tracking_file.path).unwrap();
}
scan_all(home_dir.clone(), &tracking_file, true).unwrap();
tracking_file.contents = fs::read_to_string(&tracking_file.path).unwrap();
assert!(scan_all(home_dir, &tracking_file, true).unwrap().is_empty());
}