fs_mod_parser 0.1.5

Mod File Parser for Farming Simulator
Documentation
use fs_mod_parser::mod_basic::parser;
use fs_mod_parser::shared::errors::ModError;
use fs_mod_parser::shared::structs::ModBadges;
use std::collections::HashSet;
use std::path::Path;

#[test]
fn broken_zip_file() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_Broken_Zip_File.zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([ModError::FileErrorUnreadableZip]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: true,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}

#[test]
fn bad_crc_moddesc() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_Bad_ModDesc_CRC.zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([ModError::ModDescMissing]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: true,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}

#[test]
fn garbage_file() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_Garbage_File.txt");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([
        ModError::FileErrorGarbageFile,
        ModError::FileErrorNameInvalid,
        ModError::FileErrorUnreadableZip,
    ]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: true,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}

#[test]
fn missing_desc_version() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_No_DescVersion.zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, false);

    let expected_errors: HashSet<ModError> = HashSet::from([
        ModError::ModDescVersionOldOrMissing,
        ModError::ModDescNoModVersion,
    ]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: false,
            pconly: false,
            problem: true,
            savegame: false,
        }
    );
}

#[test]
fn missing_moddesc() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_Missing_ModDesc.zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([ModError::ModDescMissing]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: true,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}

#[test]
fn invalid_file_copy() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_Copied_Mod (2).zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([
        ModError::FileErrorLikelyCopy,
        ModError::FileErrorNameInvalid,
    ]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.file_detail.copy_name,
        Some("FAILURE_Copied_Mod".to_owned())
    );

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: false,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}

#[test]
fn malformed_moddesc() {
    let test_file_path = Path::new("./tests/test_mods/FAILURE_Really_Malformed_ModDesc.zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([ModError::ModDescParseError]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: false,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}

#[test]
fn starts_with_digit() {
    let test_file_path = Path::new("./tests/test_mods/0FAILURE_Starts_With_Digit.zip");
    assert!(test_file_path.exists());

    let mod_record = parser(test_file_path);
    let _ = mod_record.to_json();

    assert_eq!(mod_record.can_not_use, true);

    let expected_errors: HashSet<ModError> = HashSet::from([
        ModError::FileErrorNameStartsDigit,
        ModError::FileErrorNameInvalid,
    ]);
    assert_eq!(mod_record.issues, expected_errors);

    assert_eq!(mod_record.file_detail.copy_name, None);

    assert_eq!(
        mod_record.badge_array,
        ModBadges {
            broken: true,
            folder: false,
            malware: false,
            no_mp: false,
            notmod: false,
            pconly: false,
            problem: false,
            savegame: false,
        }
    );
}