use crate::utils::ServiceBuilder;
use crate::utils::config::ServiceConfig;
use anyhow::anyhow;
use log::error;
use std::env;
use std::io::Error;
use std::io::ErrorKind;
const CONFIG_TOMLS_FOLDER: &str = "src/utils/tests/config";
fn config_to_toml(file_name: String) -> ServiceConfig {
let mut new_config_path = env::current_dir() .unwrap();
new_config_path.push(CONFIG_TOMLS_FOLDER);
new_config_path.push(file_name.clone());
if !new_config_path.exists() {
error!("Configuration file {} does not exist", file_name);
panic!();
}
let config_file = std::fs::read_to_string(new_config_path.clone())
.map_err(|e| {
error!(
"Failed to read config file from path: {:#?}\nError: {:#?}",
new_config_path, e
);
panic!();
})
.unwrap();
toml::from_str(&config_file)
.map_err(|e| {
error!("Failed to parse service configuration ({})", e);
panic!();
})
.unwrap()
}
#[test]
fn providers_same_type_default_name() {
let config_path: String = "providers_same_type_default_name.toml".to_string();
let config = config_to_toml(config_path);
let expected_error = anyhow!(Error::new(
ErrorKind::InvalidData,
"duplicate provider names found"
));
let err = ServiceBuilder::build_service(&config).unwrap_err();
assert_eq!(format!("{:#?}", err), format!("{:#?}", expected_error));
}
#[test]
fn providers_same_type_different_name() {
let config_path: String = "providers_same_type_different_name.toml".to_string();
let config = config_to_toml(config_path);
let _ = ServiceBuilder::build_service(&config).unwrap();
}
#[test]
fn providers_same_type_same_name() {
let config_path: String = "providers_same_type_same_name.toml".to_string();
let config = config_to_toml(config_path);
let expected_error = anyhow!(Error::new(
ErrorKind::InvalidData,
"duplicate provider names found"
));
let err = ServiceBuilder::build_service(&config).unwrap_err();
assert_eq!(format!("{:#?}", err), format!("{:#?}", expected_error));
}
#[test]
fn providers_different_type_same_name() {
let config_path: String = "providers_different_type_same_name.toml".to_string();
let config = config_to_toml(config_path);
let expected_error = anyhow!(Error::new(
ErrorKind::InvalidData,
"duplicate provider names found"
));
let err = ServiceBuilder::build_service(&config).unwrap_err();
assert_eq!(format!("{:#?}", err), format!("{:#?}", expected_error));
}
#[test]
fn providers_different_type() {
let config_path: String = "providers_different_type.toml".to_string();
let config = config_to_toml(config_path);
let _ = ServiceBuilder::build_service(&config).unwrap();
}