feat: Full AWS SecretsManager support

This commit is contained in:
2025-09-12 17:24:47 -06:00
parent 81989f8c94
commit ac45287336
12 changed files with 229 additions and 61 deletions
+47 -1
View File
@@ -1,5 +1,6 @@
use gman::config::Config;
use gman::config::{Config, ProviderConfig};
use gman::providers::local::LocalProvider;
use gman::providers::{SecretProvider, SupportedProvider};
use pretty_assertions::assert_eq;
use pretty_assertions::assert_str_eq;
use validator::Validate;
@@ -13,6 +14,17 @@ fn test_local_provider_name() {
assert_str_eq!(provider.name(), "LocalProvider");
}
#[test]
fn test_local_provider_display_and_validate() {
let sp = SupportedProvider::Local {
provider_def: LocalProvider::default(),
};
// Validate delegates to inner provider
assert!(sp.validate().is_ok());
// Display formatting for the enum variant
assert_eq!(sp.to_string(), "local");
}
#[test]
fn test_local_provider_valid() {
let provider = LocalProvider {
@@ -54,3 +66,37 @@ fn test_local_provider_default() {
assert_eq!(provider.git_user_email, None);
assert_eq!(provider.git_executable, None);
}
#[test]
fn test_provider_config_with_local_deserialize_and_extract() {
// Minimal ProviderConfig YAML using the local variant
let yaml = r#"---
name: local
type: local
"#;
let pc: ProviderConfig = serde_yaml::from_str(yaml).expect("valid provider config yaml");
assert!(pc.validate().is_ok());
let mut pc_owned = pc.clone();
let provider: &mut dyn SecretProvider = pc_owned.extract_provider();
assert_eq!(provider.name(), "LocalProvider");
// Round-trip through Config to ensure flattening works in a real list
let cfg_yaml = r#"---
default_provider: local
providers:
- name: local
type: local
password_file: /tmp/.gman_pass
git_branch: main
git_remote_url: git@github.com:username/repo.git
"#;
let cfg: Config = serde_yaml::from_str(cfg_yaml).expect("valid config yaml");
assert!(cfg.validate().is_ok());
let extracted = cfg
.extract_provider_config(None)
.expect("should find default provider");
assert_eq!(extracted.name.as_deref(), Some("local"));
}