use amp_rs::{ApiClient, Error};
use std::env;
use std::path::Path;
#[tokio::test]
async fn test_token_persistence_lifecycle() -> Result<(), Error> {
let _ = ApiClient::force_cleanup_token_files().await;
env::set_var("AMP_TOKEN_PERSISTENCE", "true");
env::set_var("AMP_USERNAME", "live_test_user");
env::set_var("AMP_PASSWORD", "live_test_password");
env::set_var("AMP_API_BASE_URL", "https://amp-test.blockstream.com/api");
let token_file = "token.json";
assert!(!Path::new(token_file).exists());
let _client = ApiClient::new().await?;
println!("✅ Token persistence lifecycle test completed");
let _ = ApiClient::force_cleanup_token_files().await;
Ok(())
}
#[tokio::test]
async fn test_token_file_structure() -> Result<(), Box<dyn std::error::Error>> {
use amp_rs::model::TokenData;
use chrono::{Duration, Utc};
let expires_at = Utc::now() + Duration::days(1);
let token_data = TokenData::new("test_token_12345".to_string(), expires_at);
let json = serde_json::to_string_pretty(&token_data)?;
println!("Token JSON structure:\n{}", json);
let deserialized: TokenData = serde_json::from_str(&json)?;
assert!(!deserialized.is_expired());
assert_eq!(deserialized.expires_at, expires_at);
println!("✅ Token serialization/deserialization test passed");
Ok(())
}
#[test]
fn test_token_persistence_environment_detection() {
use std::env;
let original_tests = env::var("AMP_TESTS").ok();
let original_persistence = env::var("AMP_TOKEN_PERSISTENCE").ok();
let original_username = env::var("AMP_USERNAME").ok();
let original_password = env::var("AMP_PASSWORD").ok();
env::set_var("AMP_USERNAME", "mock_user");
env::set_var("AMP_PASSWORD", "mock_pass");
env::set_var("AMP_TOKEN_PERSISTENCE", "true");
env::remove_var("AMP_USERNAME");
env::remove_var("AMP_PASSWORD");
env::set_var("AMP_TESTS", "live");
env::remove_var("AMP_TESTS");
env::set_var("AMP_TOKEN_PERSISTENCE", "true");
env::set_var("AMP_USERNAME", "real_user");
env::set_var("AMP_PASSWORD", "real_pass");
println!("✅ Environment detection test completed");
env::remove_var("AMP_TESTS");
env::remove_var("AMP_TOKEN_PERSISTENCE");
env::remove_var("AMP_USERNAME");
env::remove_var("AMP_PASSWORD");
if let Some(val) = original_tests {
env::set_var("AMP_TESTS", val);
}
if let Some(val) = original_persistence {
env::set_var("AMP_TOKEN_PERSISTENCE", val);
}
if let Some(val) = original_username {
env::set_var("AMP_USERNAME", val);
}
if let Some(val) = original_password {
env::set_var("AMP_PASSWORD", val);
}
}