use assert_json_diff::{assert_json_eq, assert_json_include};
use fs_mod_parser::mod_basic::parser;
use fs_mod_parser::shared::structs::{ModBadges, ModRecord};
use serde_json::json;
use std::path::Path;
#[test]
fn check_json_mod_record() {
let mut mod_record = ModRecord::new(Path::new("foo.txt"), false);
mod_record.update_badges();
let expected = json!({
"badgeArray": [
"noMP"
],
"canNotUse": false,
"currentCollection": "",
"detailIconLoaded" : false,
"fileDetail": {
"copyName": null,
"extraFiles": [],
"fileDate": "",
"fileSize": 0,
"fullPath": "foo.txt",
"i3dFiles": [],
"imageDDS": [],
"imageNonDDS": [],
"isFolder": false,
"isModPack": false,
"isSaveGame": false,
"pngTexture": [],
"shortName": "foo",
"spaceFiles": [],
"tooBigFiles": [],
"zipFiles": [],
},
"issues": [],
"includeDetail" : null,
"includeSaveGame" : null,
"l10n": {
"description": {
"en": "--"
},
"title": {
"en": "--"
},
},
"md5Sum": null,
"modDesc": {
"actions": {},
"binds": {},
"author": "--",
"scriptFiles": 0,
"storeItems": 0,
"cropInfo": null,
"cropWeather": null,
"depend": [],
"descVersion": 0,
"iconFileName": null,
"iconImage": null,
"mapConfigFile": null,
"mapCustomEnv": false,
"mapCustomCrop": false,
"mapCustomGrow": false,
"mapIsSouth": false,
"mapImage": null,
"multiPlayer": false,
"version": "--"
}
});
assert_json_include!(actual : json!(mod_record), expected : expected);
}
#[test]
fn check_json_badges() {
let mod_badges = ModBadges {
broken: true,
folder: true,
malware: true,
no_mp: true,
notmod: true,
pconly: true,
problem: true,
savegame: true,
};
let expected =
json!(["broken", "folder", "malware", "noMP", "notmod", "pconly", "problem", "savegame"]);
assert_json_eq!(json!(mod_badges), expected)
}
#[test]
fn simple_good_mod_unzipped() {
let test_file_path = Path::new("./tests/test_mods/PASS_Good_Simple_Mod");
assert!(test_file_path.exists());
let mod_record = parser(test_file_path);
assert_eq!(mod_record.can_not_use, false);
assert_eq!(mod_record.issues.len(), 1);
assert_eq!(
mod_record.badge_array,
ModBadges {
broken: false,
folder: true,
malware: false,
no_mp: true,
notmod: false,
pconly: false,
problem: false,
savegame: false,
}
);
assert_ne!(mod_record.mod_desc.icon_image, None);
let expected = json!({
"badgeArray": [],
"canNotUse": false,
"currentCollection": "",
"fileDetail": {
"copyName": null,
"extraFiles": [],
"i3dFiles": [],
"imageDDS": [
"modIcon.dds"
],
"imageNonDDS": [],
"isFolder": true,
"isSaveGame": false,
"isModPack": false,
"pngTexture": [],
"shortName": "PASS_Good_Simple_Mod",
"spaceFiles": [],
"tooBigFiles": [],
"zipFiles": []
},
"issues": [],
"l10n": {
"title": {
"en": "Totally valid FS22 Mod"
},
"description": {
"en": "Demonstrates how FSModAssist handles a good mod file."
}
},
"md5Sum": null,
"modDesc": {
"actions": {},
"binds": {},
"author": "FSModAssist Test",
"scriptFiles": 0,
"storeItems": 1,
"cropInfo": null,
"cropWeather": null,
"depend": [],
"descVersion": 69,
"iconFileName": "modIcon.dds",
"mapConfigFile": null,
"mapCustomEnv": false,
"mapCustomCrop": false,
"mapCustomGrow": false,
"mapIsSouth": false,
"mapImage": null,
"multiPlayer": true,
"version": "1.0.0.0"
},
});
assert_json_include!(actual : json!(mod_record), expected : expected);
}
#[test]
fn simple_good_mod() {
let test_file_path = Path::new("./tests/test_mods/PASS_Good_Simple_Mod.zip");
assert!(test_file_path.exists());
let mod_record = parser(test_file_path);
assert_eq!(mod_record.can_not_use, false);
assert_eq!(mod_record.issues.len(), 0);
assert_eq!(
mod_record.badge_array,
ModBadges {
broken: false,
folder: false,
malware: false,
no_mp: false,
notmod: false,
pconly: false,
problem: false,
savegame: false,
}
);
assert_ne!(mod_record.mod_desc.icon_image, None);
let expected = json!({
"badgeArray": [],
"canNotUse": false,
"currentCollection": "",
"fileDetail": {
"copyName": null,
"extraFiles": [],
"fileSize": 12530,
"i3dFiles": [],
"imageDDS": [
"modIcon.dds"
],
"imageNonDDS": [],
"isFolder": false,
"isSaveGame": false,
"isModPack": false,
"pngTexture": [],
"shortName": "PASS_Good_Simple_Mod",
"spaceFiles": [],
"tooBigFiles": [],
"zipFiles": []
},
"issues": [],
"l10n": {
"title": {
"en": "Totally valid FS22 Mod"
},
"description": {
"en": "Demonstrates how FSModAssist handles a good mod file."
}
},
"md5Sum": null,
"modDesc": {
"actions": {},
"binds": {},
"author": "FSModAssist Test",
"scriptFiles": 0,
"storeItems": 1,
"cropInfo": null,
"cropWeather": null,
"depend": [],
"descVersion": 69,
"iconFileName": "modIcon.dds",
"mapConfigFile": null,
"mapCustomEnv": false,
"mapCustomCrop": false,
"mapCustomGrow": false,
"mapIsSouth": false,
"mapImage": null,
"multiPlayer": true,
"version": "1.0.0.0"
},
});
assert_json_include!(actual : json!(mod_record), expected : expected);
}
#[test]
fn xml_recover() {
let test_file_path = Path::new("./tests/test_mods/PASS_Invalid_XML.zip");
assert!(test_file_path.exists());
let mod_record = parser(test_file_path);
assert_eq!(mod_record.can_not_use, false);
assert_eq!(mod_record.issues.len(), 0);
assert_eq!(
mod_record.badge_array,
ModBadges {
broken: false,
folder: false,
malware: false,
no_mp: false,
notmod: false,
pconly: false,
problem: false,
savegame: false,
}
);
assert_ne!(mod_record.mod_desc.icon_image, None);
let expected = json!({
"badgeArray": [],
"canNotUse": false,
"currentCollection": "",
"fileDetail": {
"copyName": null,
"extraFiles": [],
"fileSize": 12541,
"i3dFiles": [],
"imageDDS": [
"modIcon.dds"
],
"imageNonDDS": [],
"isFolder": false,
"isSaveGame": false,
"isModPack": false,
"pngTexture": [],
"shortName": "PASS_Invalid_XML",
"spaceFiles": [],
"tooBigFiles": [],
"zipFiles": []
},
"issues": [],
"l10n": {
"title": {
"en": "Totally valid FS22 Mod"
},
"description": {
"en": "\n\t\t\tDemonstrates how FSModAssist handles a good mod file.\n\t\t\t<!-- HI -->\n\t\t\t"
}
},
"md5Sum": null,
"modDesc": {
"actions": {},
"binds": {},
"author": "FSModAssist Test",
"scriptFiles": 0,
"storeItems": 1,
"cropInfo": null,
"cropWeather": null,
"depend": [],
"descVersion": 69,
"iconFileName": "modIcon.dds",
"mapConfigFile": null,
"mapCustomEnv": false,
"mapCustomCrop": false,
"mapCustomGrow": false,
"mapIsSouth": false,
"mapImage": null,
"multiPlayer": true,
"version": "1.0.0.0"
},
});
assert_json_include!(actual : json!(mod_record), expected : expected);
}