#![ allow( clippy ::doc_markdown ) ]
#[ cfg( feature = "secrets" ) ]
use workspace_tools ::testing;
#[ cfg( feature = "secrets" ) ]
use std ::fs;
#[ test ]
#[ cfg( feature = "secrets" ) ]
fn test_load_secrets_from_path()
{
let ( _temp_dir, workspace ) = testing ::create_test_workspace_with_structure();
let config_dir = workspace.join( "config" );
fs ::create_dir_all( &config_dir ).unwrap();
let secret_content = "API_KEY=path-test-key\nDATABASE_URL=path-test-db";
let config_secrets_file = config_dir.join( "secrets.env" );
fs ::write( &config_secrets_file, secret_content ).unwrap();
let secrets = workspace.load_secrets_from_path( "config/secrets.env" ).unwrap();
assert_eq!( secrets.len(), 2 );
assert_eq!( secrets.get( "API_KEY" ).unwrap(), "path-test-key" );
assert_eq!( secrets.get( "DATABASE_URL" ).unwrap(), "path-test-db" );
}
#[ test ]
#[ cfg( feature = "secrets" ) ]
fn test_path_method_solves_developer_issue()
{
let ( _temp_dir, workspace ) = testing ::create_test_workspace_with_structure();
let lib_dir = workspace.join( "lib/llm_tools/secret" );
fs ::create_dir_all( &lib_dir ).unwrap();
let secret_content = "API_KEY=correct-nested-secret\nTOKEN=nested-token-123";
let nested_secret_file = lib_dir.join( "-secrets.sh" );
fs ::write( &nested_secret_file, secret_content ).unwrap();
let secrets = workspace.load_secrets_from_path( "lib/llm_tools/secret/-secrets.sh" ).unwrap();
assert_eq!( secrets.len(), 2 );
assert_eq!( secrets.get( "API_KEY" ).unwrap(), "correct-nested-secret" );
assert_eq!( secrets.get( "TOKEN" ).unwrap(), "nested-token-123" );
}
#[ test ]
#[ cfg( feature = "secrets" ) ]
fn test_helper_methods()
{
let ( _temp_dir, workspace ) = testing ::create_test_workspace_with_structure();
let files = workspace.list_secrets_files().unwrap();
assert!( files.is_empty() );
assert!( !workspace.secrets_file_exists( "test.env" ) );
let path = workspace.resolve_secrets_path( "test.env" );
assert!( path.ends_with( "secret/test.env" ) );
let secret_content = "TEST_KEY=test-value";
let secret_file = workspace.secret_file( "test.env" );
fs ::write( &secret_file, secret_content ).unwrap();
let files = workspace.list_secrets_files().unwrap();
assert_eq!( files.len(), 1 );
assert!( files.contains( &"test.env".to_string() ) );
assert!( workspace.secrets_file_exists( "test.env" ) );
}
#[ test ]
#[ cfg( feature = "secrets" ) ]
fn test_load_secrets_from_absolute_path()
{
use tempfile ::NamedTempFile;
let ( _temp_dir, workspace ) = testing ::create_test_workspace_with_structure();
let temp_file = NamedTempFile ::new().unwrap();
let secret_content = "EXTERNAL_KEY=external-value\nEXTERNAL_TOKEN=external-token";
fs ::write( &temp_file, secret_content ).unwrap();
let secrets = workspace.load_secrets_from_absolute_path( temp_file.path() ).unwrap();
assert_eq!( secrets.len(), 2 );
assert_eq!( secrets.get( "EXTERNAL_KEY" ).unwrap(), "external-value" );
assert_eq!( secrets.get( "EXTERNAL_TOKEN" ).unwrap(), "external-token" );
}
#[ test ]
#[ cfg( feature = "secure" ) ]
fn test_secure_path_methods()
{
use secrecy ::ExposeSecret;
let ( _temp_dir, workspace ) = testing ::create_test_workspace_with_structure();
let config_dir = workspace.join( "config" );
fs ::create_dir_all( &config_dir ).unwrap();
let secret_content = "SECURE_KEY=secure-path-value";
let config_secrets_file = config_dir.join( "secure.env" );
fs ::write( &config_secrets_file, secret_content ).unwrap();
let secrets = workspace.load_secrets_from_path_secure( "config/secure.env" ).unwrap();
assert_eq!( secrets.len(), 1 );
let secure_value = secrets.get( "SECURE_KEY" ).unwrap();
assert_eq!( secure_value.expose_secret(), "secure-path-value" );
}
#[ test ]
#[ cfg( feature = "secrets" ) ]
fn test_path_error_messages()
{
let ( _temp_dir, workspace ) = testing ::create_test_workspace_with_structure();
let result = workspace.load_secrets_from_path( "nonexistent/secrets.env" );
assert!( result.is_err() );
let error_msg = result.unwrap_err().to_string();
assert!( error_msg.contains( "Failed to read secrets file" ) || error_msg.contains( "not found" ) );
assert!( error_msg.contains( "nonexistent/secrets.env" ) );
}
#[ cfg( not( feature = "secrets" ) ) ]
fn main()
{
println!( "This test requires the 'secrets' feature" );
}