refactor: Refactor configuration structs directly into the provider definition to simplify validation, structs, and future extensions
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use gman::config::{Config, ProviderConfig, RunConfig};
|
||||
use gman::providers::SupportedProvider;
|
||||
use gman::providers::local::LocalProvider;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
use validator::Validate;
|
||||
@@ -161,65 +159,11 @@ mod tests {
|
||||
assert!(run_config.validate().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_provider_config_valid() {
|
||||
let config = ProviderConfig {
|
||||
name: Some("local-test".to_string()),
|
||||
provider_type: SupportedProvider::Local(LocalProvider),
|
||||
password_file: None,
|
||||
git_branch: None,
|
||||
git_remote_url: None,
|
||||
git_user_name: None,
|
||||
git_user_email: Some("test@example.com".to_string()),
|
||||
git_executable: None,
|
||||
};
|
||||
|
||||
assert!(config.validate().is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_provider_config_invalid_email() {
|
||||
let config = ProviderConfig {
|
||||
name: Some("local-test".to_string()),
|
||||
provider_type: SupportedProvider::Local(LocalProvider),
|
||||
password_file: None,
|
||||
git_branch: None,
|
||||
git_remote_url: None,
|
||||
git_user_name: None,
|
||||
git_user_email: Some("test".to_string()),
|
||||
git_executable: None,
|
||||
};
|
||||
|
||||
assert!(config.validate().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_provider_config_missing_name() {
|
||||
let config = ProviderConfig {
|
||||
name: None,
|
||||
provider_type: SupportedProvider::Local(LocalProvider),
|
||||
password_file: None,
|
||||
git_branch: None,
|
||||
git_remote_url: None,
|
||||
git_user_name: None,
|
||||
git_user_email: None,
|
||||
git_executable: None,
|
||||
};
|
||||
|
||||
assert!(config.validate().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_provider_config_default() {
|
||||
let config = ProviderConfig::default();
|
||||
|
||||
assert_eq!(config.name, Some("local".to_string()));
|
||||
assert_eq!(config.git_user_email, None);
|
||||
assert_eq!(config.password_file, Config::local_provider_password_file());
|
||||
assert_eq!(config.git_branch, Some("main".into()));
|
||||
assert_eq!(config.git_remote_url, None);
|
||||
assert_eq!(config.git_user_name, None);
|
||||
assert_eq!(config.git_executable, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,21 +1,56 @@
|
||||
use gman::providers::local::LocalProviderConfig;
|
||||
use gman::config::Config;
|
||||
use gman::providers::local::LocalProvider;
|
||||
use pretty_assertions::assert_eq;
|
||||
use pretty_assertions::assert_str_eq;
|
||||
|
||||
#[test]
|
||||
fn test_local_provider_config_default() {
|
||||
let config = LocalProviderConfig::default();
|
||||
let expected_path = dirs::home_dir()
|
||||
.map(|p| p.join(".gman_vault"))
|
||||
.and_then(|p| p.to_str().map(|s| s.to_string()))
|
||||
.unwrap_or_else(|| ".gman_vault".into());
|
||||
assert_str_eq!(config.vault_path, expected_path);
|
||||
}
|
||||
use validator::Validate;
|
||||
|
||||
#[test]
|
||||
fn test_local_provider_name() {
|
||||
use gman::providers::SecretProvider;
|
||||
use gman::providers::local::LocalProvider;
|
||||
|
||||
let provider = LocalProvider;
|
||||
let provider = LocalProvider::default();
|
||||
assert_str_eq!(provider.name(), "LocalProvider");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_local_provider_valid() {
|
||||
let provider = LocalProvider {
|
||||
password_file: None,
|
||||
git_branch: None,
|
||||
git_remote_url: None,
|
||||
git_user_name: None,
|
||||
git_user_email: Some("test@example.com".to_string()),
|
||||
git_executable: None,
|
||||
};
|
||||
|
||||
assert!(provider.validate().is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_local_provider_invalid_email() {
|
||||
let config = LocalProvider {
|
||||
password_file: None,
|
||||
git_branch: None,
|
||||
git_remote_url: None,
|
||||
git_user_name: None,
|
||||
git_user_email: Some("test".to_string()),
|
||||
git_executable: None,
|
||||
};
|
||||
|
||||
assert!(config.validate().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_local_provider_default() {
|
||||
let provider = LocalProvider::default();
|
||||
assert_eq!(
|
||||
provider.password_file,
|
||||
Config::local_provider_password_file()
|
||||
);
|
||||
assert_eq!(provider.git_branch, Some("main".into()));
|
||||
assert_eq!(provider.git_remote_url, None);
|
||||
assert_eq!(provider.git_user_name, None);
|
||||
assert_eq!(provider.git_user_email, None);
|
||||
assert_eq!(provider.git_executable, None);
|
||||
}
|
||||
|
||||
@@ -1,49 +1,20 @@
|
||||
use gman::providers::local::LocalProvider;
|
||||
use gman::providers::{ParseProviderError, SupportedProvider};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use std::str::FromStr;
|
||||
|
||||
#[test]
|
||||
fn test_supported_provider_from_str() {
|
||||
assert_eq!(
|
||||
SupportedProvider::from_str("local").unwrap(),
|
||||
SupportedProvider::Local(LocalProvider)
|
||||
);
|
||||
assert_eq!(
|
||||
SupportedProvider::from_str(" Local ").unwrap(),
|
||||
SupportedProvider::Local(LocalProvider)
|
||||
);
|
||||
assert!(matches!(
|
||||
SupportedProvider::from_str("invalid"),
|
||||
Err(ParseProviderError::Unsupported(_))
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_supported_provider_display() {
|
||||
assert_str_eq!(SupportedProvider::Local(LocalProvider).to_string(), "local");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_supported_provider_from_str_valid() {
|
||||
assert_eq!(
|
||||
SupportedProvider::from_str("local").unwrap(),
|
||||
SupportedProvider::Local(LocalProvider)
|
||||
);
|
||||
assert_eq!(
|
||||
SupportedProvider::from_str("LOCAL").unwrap(),
|
||||
SupportedProvider::Local(LocalProvider)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_supported_provider_from_str_invalid() {
|
||||
let err = SupportedProvider::from_str("invalid").unwrap_err();
|
||||
assert_str_eq!(err.to_string(), "unsupported provider 'invalid'");
|
||||
}
|
||||
use gman::config::ProviderConfig;
|
||||
use gman::providers::ParseProviderError;
|
||||
use pretty_assertions::assert_eq;
|
||||
use validator::Validate;
|
||||
|
||||
#[test]
|
||||
fn test_parse_provider_error_display() {
|
||||
let err = ParseProviderError::Unsupported("test".to_string());
|
||||
assert_eq!(err.to_string(), "unsupported provider 'test'");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_provider_config_missing_name() {
|
||||
let config = ProviderConfig {
|
||||
name: None,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
assert!(config.validate().is_err());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user