signer-crdt 0.4.1

Signer CRDT (Conflict-free Replicated Data Type) package.
Documentation
//! 测试用户自动创建功能

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>> {
    // 创建测试用的SignerKeys
    let keys = SignerKeys::generate()?;
    
    // 使用from_mem创建SignerMeta,应该自动创建默认用户
    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();
    
    // 创建测试用的SignerKeys并保存到文件
    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)?;
    
    // 使用from_fs创建SignerMeta,应该自动创建默认用户
    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();
    
    // 创建测试用的SignerKeys并保存到文件
    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)?;
    
    // 第一次创建SignerMeta(会自动创建默认用户)
    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?;
    
    // 再次创建SignerMeta(模拟重新启动,应该不会覆盖已存在的用户)
    let meta2 = SignerMeta::from_fs(temp_path).await?;
    
    // 验证用户名没有被重置为默认值
    let current_user = meta2.get_current_user().await?;
    assert_eq!(current_user.username, "自定义用户名");
    
    Ok(())
}