use crate::SignerMeta;
use signer_core::SignerKeys;
use tempfile::TempDir;
#[tokio::test]
async fn test_from_mem_creates_default_user() -> Result<(), Box<dyn std::error::Error>> {
let keys = SignerKeys::generate()?;
let meta = SignerMeta::from_mem(keys.clone()).await?;
let current_user = meta.get_current_user().await?;
assert_eq!(current_user.pub_key, keys.pub_key);
assert_eq!(current_user.username, "默认用户");
Ok(())
}
#[tokio::test]
async fn test_from_fs_creates_default_user() -> Result<(), Box<dyn std::error::Error>> {
let temp_dir = TempDir::new()?;
let temp_path = temp_dir.path().to_str().unwrap();
let keys = SignerKeys::generate()?;
let keys_path = format!("{}/signer_keys.json", temp_path);
let keys_json = serde_json::to_string(&keys)?;
std::fs::write(&keys_path, keys_json)?;
let meta = SignerMeta::from_fs(temp_path).await?;
let current_user = meta.get_current_user().await?;
assert_eq!(current_user.pub_key, keys.pub_key);
assert_eq!(current_user.username, "默认用户");
Ok(())
}
#[tokio::test]
async fn test_existing_user_not_overwritten() -> Result<(), Box<dyn std::error::Error>> {
let temp_dir = TempDir::new()?;
let temp_path = temp_dir.path().to_str().unwrap();
let keys = SignerKeys::generate()?;
let keys_path = format!("{}/signer_keys.json", temp_path);
let keys_json = serde_json::to_string(&keys)?;
std::fs::write(&keys_path, keys_json)?;
let meta1 = SignerMeta::from_fs(temp_path).await?;
let mut user = meta1.get_current_user().await?;
user.username = "自定义用户名".to_string();
let user_vo = crate::view::UserVO::from_user_data(&keys, &user).await?;
user_vo.put(&meta1).await?;
let meta2 = SignerMeta::from_fs(temp_path).await?;
let current_user = meta2.get_current_user().await?;
assert_eq!(current_user.username, "自定义用户名");
Ok(())
}