use libmake::{
generator::generate_from_config,
generators::{args::generate_from_args, yaml::generate_from_yaml},
macro_generate_files,
models::model_params::FileGenerationParams,
utils::{
create_directory, get_csv_field, get_json_field, get_yaml_field,
},
};
use tempfile::tempdir;
use std::path::Path;
use std::{env, io};
#[test]
fn test_get_csv_field() {
let file_path = "./tests/data/mylibrary.csv";
let field_author_index = 0;
let value = get_csv_field(Some(file_path), field_author_index);
assert_eq!(value, Some(vec!["Me".to_string()]));
}
#[test]
fn test_get_json_field() {
let file_path = "./tests/data/mylibrary.json";
let field_name = "mylibrary";
let value = if Path::new(file_path).exists() {
get_json_field(Some(file_path), field_name)
} else {
Ok(String::new())
};
assert_eq!(value.unwrap_or_default(), "".to_string());
}
#[test]
fn test_get_yaml_field() {
let file_path = "./tests/data/mylibrary.yaml";
let field_name = "mylibrary";
let value = if Path::new(file_path).exists() {
get_yaml_field(Some(file_path), field_name)
} else {
Ok(String::new())
};
assert_eq!(value.unwrap_or_default(), "".to_string());
}
#[test]
fn test_generate_from_config() {
let file_path = "./tests/data/mylibrary.yaml";
let file_type = "yaml";
generate_from_config(file_path, file_type).unwrap();
assert_eq!(true, true); }
#[test]
fn test_generate_from_csv() {
let file_path = "./tests/data/mylibrary.csv";
generate_from_config(file_path, "csv").unwrap();
assert_eq!(true, true); }
#[test]
fn test_generate_from_json() {
let file_path = "./tests/data/mylibrary.json";
generate_from_config(file_path, "json").unwrap();
assert_eq!(true, true); }
#[test]
fn test_generate_from_yaml() {
let file_path = "./tests/data/mylibrary.yaml";
generate_from_yaml(file_path).unwrap();
assert_eq!(true, true); }
#[test]
fn generate_from_toml() {
let file_path = "./tests/data/mylibrary.toml";
generate_from_config(file_path, "toml").unwrap();
assert_eq!(true, true); }
#[test]
fn test_generate_from_args() {
let args = "--author=Me --output=my_library"
.split(' ')
.map(ToString::to_string)
.collect::<Vec<String>>();
let args_str = args[1..].join(" ");
let result = generate_from_args(&args_str);
assert!(result.is_ok());
}
#[test]
fn test_from_args() {
let args = "--author=Me \
--build=build.rs \
--categories=[cat1,cat2] \
--description='test' \
--documentation= \
--edition=2018 \
--email='test@test.com' \
--homepage= \
--keywords= \
--license=MIT \
--output=my_library \
--readme= \
--repository= \
--rustversion= \
--version= \
--website="
.split(' ')
.map(ToString::to_string) .collect::<Vec<String>>();
let args_str = args[1..].join(" ");
let result = generate_from_args(&args_str);
assert!(result.is_ok());
}
#[test]
fn test_macro_generate_files() {
let temp_dir = env::temp_dir().join("my_library");
let mut params = FileGenerationParams::new();
params.output =
Some(temp_dir.as_path().to_str().unwrap().to_owned());
}
#[test]
#[allow(clippy::redundant_clone)]
fn test_generate_files() -> Result<(), String> {
let temp_directory = tempdir();
let temp_path = temp_directory.unwrap().path().to_owned();
let mut params = FileGenerationParams::new();
params.output = Some(temp_path.to_str().unwrap().to_owned());
macro_generate_files!(params.clone())?;
assert!(temp_path.exists());
std::fs::remove_dir_all(temp_path).unwrap();
Ok(())
}
#[test]
fn test_create_directory_error() -> io::Result<()> {
let temp_dir = env::current_dir()?.join("valid_path");
std::fs::create_dir(&temp_dir)?;
let result = create_directory(&temp_dir.join("invalid_path/test"));
assert!(result.is_err());
std::fs::remove_dir(&temp_dir)?;
Ok(())
}