frs 0.4.2

Rename files with RegEx patterns
Documentation
use super::*;

pub fn empty_cli() -> Cli {
    Cli {
        run: false,
        dry_run: false,
        continue_on_error: false,
        case_insensetive: false,
        file: false,
        directory: false,
        symlink: false,
        traverse_tree: false,
        verbose: 0,
        icons: false,
        search_pattern: String::new(),
        replace_pattern: String::new(),
        base_path: PathBuf::new(),
    }
}

#[test]
fn multiple_operation_modes() {
    let mut cli = empty_cli();
    cli.run = true;
    cli.dry_run = true;

    assert_matches!(cli.set_operation_mode(), Err(Error::MultipleOperationModes));
}

#[test]
fn invalid_env_var() {
    let mut cli = empty_cli();

    std::env::set_var("FRS_DEFAULT_OP", "invalid");
    assert_matches!(
        cli.set_operation_mode(),
        Err(Error::UnknownEnvVarContent { .. })
    );
}

#[test]
fn default_operation_run() {
    let mut cli = empty_cli();
    std::env::set_var("FRS_DEFAULT_OP", "run");

    assert_matches!(cli.set_operation_mode(), Ok(()));
    assert!(cli.run);
    assert!(!cli.dry_run);
}

#[test]
fn default_operation_run_with_run() {
    let mut cli = empty_cli();
    cli.run = true;
    std::env::set_var("FRS_DEFAULT_OP", "run");

    assert_matches!(cli.set_operation_mode(), Ok(()));
    assert!(cli.run);
    assert!(!cli.dry_run);
}

#[test]
fn default_operation_run_with_dry_run() {
    let mut cli = empty_cli();
    cli.dry_run = true;
    std::env::set_var("FRS_DEFAULT_OP", "run");

    assert_matches!(cli.set_operation_mode(), Ok(()));
    assert!(!cli.run);
    assert!(cli.dry_run);
}

#[test]
fn default_operation_dry_run() {
    let mut cli = empty_cli();
    std::env::set_var("FRS_DEFAULT_OP", "dry-run");

    assert_matches!(cli.set_operation_mode(), Ok(()));
    assert!(!cli.run);
    assert!(cli.dry_run);
}

#[test]
fn default_operation_dry_run_with_run() {
    let mut cli = empty_cli();
    cli.run = true;
    std::env::set_var("FRS_DEFAULT_OP", "dry-run");

    assert_matches!(cli.set_operation_mode(), Ok(()));
    assert!(cli.run);
    assert!(!cli.dry_run);
}

#[test]
fn default_operation_dry_run_with_dry_run() {
    let mut cli = empty_cli();
    cli.dry_run = true;
    std::env::set_var("FRS_DEFAULT_OP", "dry-run");

    assert_matches!(cli.set_operation_mode(), Ok(()));
    assert!(!cli.run);
    assert!(cli.dry_run);
}

#[test]
fn low_verbosity_on_run() {
    let mut cli = empty_cli();

    cli.set_verbosity();
    assert_eq!(cli.verbose, 0);
}

#[test]
fn high_verbosity_on_run() {
    let mut cli = empty_cli();
    cli.verbose = 10;

    cli.set_verbosity();
    assert_eq!(cli.verbose, 10);
}

#[test]
fn low_verbosity_on_dry_run() {
    let mut cli = empty_cli();
    cli.dry_run = true;

    cli.set_verbosity();
    assert_eq!(cli.verbose, 1);
}

#[test]
fn high_verbosity_on_dry_run() {
    let mut cli = empty_cli();
    cli.dry_run = true;
    cli.verbose = 10;

    cli.set_verbosity();
    assert_eq!(cli.verbose, 10);
}

#[test]
fn no_filetype_set() {
    let mut cli = empty_cli();

    cli.set_types();
    assert!(cli.file);
    assert!(cli.directory);
    assert!(cli.symlink);
}

#[test]
fn all_filetypes_set() {
    let mut cli = empty_cli();
    cli.file = true;
    cli.directory = true;
    cli.symlink = true;

    cli.set_types();
    assert!(cli.file);
    assert!(cli.directory);
    assert!(cli.symlink);
}

#[test]
fn file_filetype_set() {
    let mut cli = empty_cli();
    cli.file = true;

    cli.set_types();
    assert!(cli.file);
    assert!(!cli.directory);
    assert!(!cli.symlink);
}

#[test]
fn not_file_filetypes_set() {
    let mut cli = empty_cli();
    cli.directory = true;
    cli.symlink = true;

    cli.set_types();
    assert!(!cli.file);
    assert!(cli.directory);
    assert!(cli.symlink);
}

#[test]
fn no_filetype_set_with_traverse_tree() {
    let mut cli = empty_cli();
    cli.traverse_tree = true;

    cli.set_types();
    assert!(cli.file);
    assert!(!cli.directory);
    assert!(cli.symlink);
}

#[test]
fn all_filetypes_set_with_traverse_tree() {
    let mut cli = empty_cli();
    cli.traverse_tree = true;
    cli.file = true;
    cli.directory = true;
    cli.symlink = true;

    cli.set_types();
    assert!(cli.file);
    assert!(cli.directory);
    assert!(cli.symlink);
}

#[test]
fn dir_filetype_set_with_traverse_tree() {
    let mut cli = empty_cli();
    cli.traverse_tree = true;
    cli.directory = true;

    cli.set_types();
    assert!(!cli.file);
    assert!(cli.directory);
    assert!(!cli.symlink);
}

#[test]
fn not_dir_filetypes_set_with_traverse_tree() {
    let mut cli = empty_cli();
    cli.traverse_tree = true;
    cli.file = true;
    cli.symlink = true;

    cli.set_types();
    assert!(cli.file);
    assert!(!cli.directory);
    assert!(cli.symlink);
}