tests: add CLI argument and config tests
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ibf3751724aff64e6a901c2703d7778d16a6a6964
This commit is contained in:
parent
3414b9f1a4
commit
c8baf4a369
1 changed files with 257 additions and 0 deletions
257
src/cli/tests.rs
Normal file
257
src/cli/tests.rs
Normal file
|
|
@ -0,0 +1,257 @@
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use std::{fs, path::PathBuf};
|
||||||
|
|
||||||
|
use tempfile::TempDir;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
cli::{ExportArgs, ImportArgs, RmArgs},
|
||||||
|
model::config::Config,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rm_args_parsing_all_flag() {
|
||||||
|
let args = RmArgs::parse_from(&["pakker", "rm", "--all"]);
|
||||||
|
assert!(args.all);
|
||||||
|
assert!(args.inputs.is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rm_args_parsing_multiple_inputs() {
|
||||||
|
let args = RmArgs::parse_from(&["pakker", "rm", "mod1", "mod2", "mod3"]);
|
||||||
|
assert!(!args.all);
|
||||||
|
assert_eq!(args.inputs, vec!["mod1", "mod2", "mod3"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rm_args_parsing_all_with_yes() {
|
||||||
|
let args = RmArgs::parse_from(&["pakker", "rm", "--all", "--yes"]);
|
||||||
|
assert!(args.all);
|
||||||
|
assert!(args.yes);
|
||||||
|
assert!(args.inputs.is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rm_args_parsing_with_inputs_and_yes() {
|
||||||
|
let args = RmArgs::parse_from(&["pakker", "rm", "mod1", "--yes"]);
|
||||||
|
assert!(!args.all);
|
||||||
|
assert!(args.yes);
|
||||||
|
assert_eq!(args.inputs, vec!["mod1"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_import_args_parsing_deps_flag() {
|
||||||
|
let args =
|
||||||
|
ImportArgs::parse_from(&["pakker", "import", "--deps", "pack.zip"]);
|
||||||
|
assert!(args.deps);
|
||||||
|
assert_eq!(args.file, "pack.zip");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_import_args_parsing_no_deps_default() {
|
||||||
|
let args = ImportArgs::parse_from(&["pakker", "import", "pack.zip"]);
|
||||||
|
assert!(!args.deps);
|
||||||
|
assert_eq!(args.file, "pack.zip");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_import_args_parsing_deps_with_yes() {
|
||||||
|
let args = ImportArgs::parse_from(&[
|
||||||
|
"pakker", "import", "--deps", "--yes", "pack.zip",
|
||||||
|
]);
|
||||||
|
assert!(args.deps);
|
||||||
|
assert!(args.yes);
|
||||||
|
assert_eq!(args.file, "pack.zip");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_import_args_parsing_short_deps_flag() {
|
||||||
|
let args = ImportArgs::parse_from(&["pakker", "import", "-D", "pack.zip"]);
|
||||||
|
assert!(args.deps);
|
||||||
|
assert_eq!(args.file, "pack.zip");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_export_args_parsing_show_io_errors() {
|
||||||
|
let args =
|
||||||
|
ExportArgs::parse_from(&["pakker", "export", "--show-io-errors"]);
|
||||||
|
assert!(args.show_io_errors);
|
||||||
|
assert!(!args.no_server);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_export_args_parsing_no_server() {
|
||||||
|
let args = ExportArgs::parse_from(&["pakker", "export", "--no-server"]);
|
||||||
|
assert!(args.no_server);
|
||||||
|
assert!(!args.show_io_errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_export_args_parsing_both_flags() {
|
||||||
|
let args = ExportArgs::parse_from(&[
|
||||||
|
"pakker",
|
||||||
|
"export",
|
||||||
|
"--show-io-errors",
|
||||||
|
"--no-server",
|
||||||
|
"--profile",
|
||||||
|
"modrinth",
|
||||||
|
]);
|
||||||
|
assert!(args.show_io_errors);
|
||||||
|
assert!(args.no_server);
|
||||||
|
assert_eq!(args.profile, Some("modrinth".to_string()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_export_args_parsing_with_output() {
|
||||||
|
let args = ExportArgs::parse_from(&[
|
||||||
|
"pakker",
|
||||||
|
"export",
|
||||||
|
"--output",
|
||||||
|
"/tmp/export",
|
||||||
|
"--profile",
|
||||||
|
"curseforge",
|
||||||
|
]);
|
||||||
|
assert_eq!(args.output, Some("/tmp/export".to_string()));
|
||||||
|
assert_eq!(args.profile, Some("curseforge".to_string()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_export_args_parsing_pakker_layout() {
|
||||||
|
let args = ExportArgs::parse_from(&["pakker", "export", "--pakker-layout"]);
|
||||||
|
assert!(args.pakker_layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_with_export_server_side_projects_to_client_true() {
|
||||||
|
let config = Config {
|
||||||
|
name: "test-pack".to_string(),
|
||||||
|
version: "1.0.0".to_string(),
|
||||||
|
description: None,
|
||||||
|
author: None,
|
||||||
|
overrides: vec!["overrides".to_string()],
|
||||||
|
server_overrides: None,
|
||||||
|
client_overrides: None,
|
||||||
|
paths: std::collections::HashMap::new(),
|
||||||
|
projects: None,
|
||||||
|
export_profiles: None,
|
||||||
|
export_server_side_projects_to_client: Some(true),
|
||||||
|
};
|
||||||
|
assert_eq!(config.export_server_side_projects_to_client, Some(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_with_export_server_side_projects_to_client_false() {
|
||||||
|
let config = Config {
|
||||||
|
name: "test-pack".to_string(),
|
||||||
|
version: "1.0.0".to_string(),
|
||||||
|
description: None,
|
||||||
|
author: None,
|
||||||
|
overrides: vec!["overrides".to_string()],
|
||||||
|
server_overrides: None,
|
||||||
|
client_overrides: None,
|
||||||
|
paths: std::collections::HashMap::new(),
|
||||||
|
projects: None,
|
||||||
|
export_profiles: None,
|
||||||
|
export_server_side_projects_to_client: Some(false),
|
||||||
|
};
|
||||||
|
assert_eq!(config.export_server_side_projects_to_client, Some(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_without_export_server_side_projects_to_client() {
|
||||||
|
let config = Config {
|
||||||
|
name: "test-pack".to_string(),
|
||||||
|
version: "1.0.0".to_string(),
|
||||||
|
description: None,
|
||||||
|
author: None,
|
||||||
|
overrides: vec!["overrides".to_string()],
|
||||||
|
server_overrides: None,
|
||||||
|
client_overrides: None,
|
||||||
|
paths: std::collections::HashMap::new(),
|
||||||
|
projects: None,
|
||||||
|
export_profiles: None,
|
||||||
|
export_server_side_projects_to_client: None,
|
||||||
|
};
|
||||||
|
assert!(config.export_server_side_projects_to_client.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_serialization_with_export_server_side() {
|
||||||
|
let config = Config {
|
||||||
|
name: "test-pack".to_string(),
|
||||||
|
version: "1.0.0".to_string(),
|
||||||
|
description: Some("A test modpack".to_string()),
|
||||||
|
author: Some("Test Author".to_string()),
|
||||||
|
overrides: vec!["overrides".to_string()],
|
||||||
|
server_overrides: Some(vec![
|
||||||
|
"server-overrides".to_string(),
|
||||||
|
]),
|
||||||
|
client_overrides: Some(vec![
|
||||||
|
"client-overrides".to_string(),
|
||||||
|
]),
|
||||||
|
paths: std::collections::HashMap::new(),
|
||||||
|
projects: None,
|
||||||
|
export_profiles: None,
|
||||||
|
export_server_side_projects_to_client: Some(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
let json = serde_json::to_string_pretty(&config).unwrap();
|
||||||
|
assert!(json.contains("exportServerSideProjectsToClient"));
|
||||||
|
assert!(json.contains("true"));
|
||||||
|
|
||||||
|
let deserialized: Config = serde_json::from_str(&json).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
deserialized.export_server_side_projects_to_client,
|
||||||
|
Some(true)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_serialization_without_export_server_side() {
|
||||||
|
let config = Config {
|
||||||
|
name: "test-pack".to_string(),
|
||||||
|
version: "1.0.0".to_string(),
|
||||||
|
description: None,
|
||||||
|
author: None,
|
||||||
|
overrides: vec!["overrides".to_string()],
|
||||||
|
server_overrides: None,
|
||||||
|
client_overrides: None,
|
||||||
|
paths: std::collections::HashMap::new(),
|
||||||
|
projects: None,
|
||||||
|
export_profiles: None,
|
||||||
|
export_server_side_projects_to_client: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let json = serde_json::to_string_pretty(&config).unwrap();
|
||||||
|
assert!(!json.contains("exportServerSideProjectsToClient"));
|
||||||
|
|
||||||
|
let deserialized: Config = serde_json::from_str(&json).unwrap();
|
||||||
|
assert!(deserialized.export_server_side_projects_to_client.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_default_has_no_export_server_side() {
|
||||||
|
let config = Config::default();
|
||||||
|
assert!(config.export_server_side_projects_to_client.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_export_args_all_flags_together() {
|
||||||
|
let args = ExportArgs::parse_from(&[
|
||||||
|
"pakker",
|
||||||
|
"export",
|
||||||
|
"--profile",
|
||||||
|
"modrinth",
|
||||||
|
"--output",
|
||||||
|
"/tmp/out",
|
||||||
|
"--pakker-layout",
|
||||||
|
"--show-io-errors",
|
||||||
|
"--no-server",
|
||||||
|
]);
|
||||||
|
assert_eq!(args.profile, Some("modrinth".to_string()));
|
||||||
|
assert_eq!(args.output, Some("/tmp/out".to_string()));
|
||||||
|
assert!(args.pakker_layout);
|
||||||
|
assert!(args.show_io_errors);
|
||||||
|
assert!(args.no_server);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue