diff --git a/tests/add_mod_test.rs b/tests/add_mod_test.rs new file mode 100644 index 0000000..ef135c2 --- /dev/null +++ b/tests/add_mod_test.rs @@ -0,0 +1,45 @@ +use std::{collections::HashSet, error::Error, path::PathBuf}; + +use fomod_manager::{ + instance::{files_to_install_mod, insert_mod_to_instance}, + types::{Link, RootConfig}, +}; + +fn get_parent() -> PathBuf { + PathBuf::from(file!()).parent().unwrap().to_owned() +} + +fn load_root() -> RootConfig { + RootConfig::load_from_file(get_parent().join("data/root_config_complex.toml")).unwrap() +} + +#[test] +fn add_simple_mod() -> Result<(), Box> { + let root_config = load_root(); + let mut instance = root_config.load_instance_by_id("instance_minimal")?; + let mod_to_install = root_config.mod_by_id("add_test_1").expect("Mod not found"); + let files_to_add = files_to_install_mod(&root_config, &instance, &mod_to_install)?; + + insert_mod_to_instance(&mut instance, &mod_to_install, &files_to_add, 0)?; + + let installed_mods = instance.mods(); + + assert_eq!(installed_mods.len(), 1); + + let the_mod = installed_mods.first().expect("Asserted before"); + + assert_eq!(the_mod.mod_id(), "add_test_1"); + assert_eq!(the_mod.priority(), 0); + + let expected_files: HashSet<_> = [Link::new("plugin.esp", "Data/plugin.esp")] + .into_iter() + .collect(); + + assert_eq!( + *the_mod.files(), + expected_files, + "Installed files missmatch" + ); + + Ok(()) +} diff --git a/tests/data/mods/add_test_1/plugin.esp b/tests/data/mods/add_test_1/plugin.esp new file mode 100644 index 0000000..f11894c --- /dev/null +++ b/tests/data/mods/add_test_1/plugin.esp @@ -0,0 +1 @@ +plugin.esl-add_test_1