wx-rust-common 0.1.1

WxRust 公共基础设施:错误模型、token/执行引擎、HTTP 抽象、会话、重复检查(对应 weixin-java-common)
Documentation
#![allow(clippy::field_reassign_with_default, dead_code)]
//! 第二批镜像补测——Common 工具层。
//!
//! 本文件镜像以下 Java 测试类:
//! - GsonHelperTest(164 行)
//! - SSLConfigurationTest(115 行)
//! - DefaultApacheHttpClientBuilderTest(115 行)

use serde::{Deserialize, Serialize};

// ═══════════════════════════════════════════════════════════════
// #1 GsonHelperTest(164 行)—— JSON 工具辅助
// ═══════════════════════════════════════════════════════════════

#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct TestUser {
    name: String,
    age: u32,
    email: Option<String>,
}

/// 对应 Java: GsonHelperTest(基本 JSON 序列化验证)
#[test]
fn test_json_helper_basic_serialize() {
    let user = TestUser {
        name: "张三".to_string(),
        age: 30,
        email: Some("zhangsan@example.com".to_string()),
    };
    let json = serde_json::to_string(&user).expect("序列化成功");
    assert!(json.contains("张三"));
    assert!(json.contains("30"));
    assert!(json.contains("zhangsan@example.com"));
}

/// 对应 Java: GsonHelperTest(基本 JSON 反序列化验证)
#[test]
fn test_json_helper_basic_deserialize() {
    let json_str = r#"{"name":"李四","age":25,"email":"lisi@example.com"}"#;
    let user: TestUser = serde_json::from_str(json_str).expect("反序列化成功");
    assert_eq!(user.name, "李四");
    assert_eq!(user.age, 25);
    assert_eq!(user.email.as_deref(), Some("lisi@example.com"));
}

/// 对应 Java: GsonHelperTest(Optional 字段处理验证)
#[test]
fn test_json_helper_optional_field() {
    let json_str = r#"{"name":"王五","age":35}"#;
    let user: TestUser = serde_json::from_str(json_str).expect("反序列化成功");
    assert_eq!(user.name, "王五");
    assert!(user.email.is_none());
}

/// 对应 Java: GsonHelperTest(嵌套对象序列化验证)
#[test]
fn test_json_helper_nested_object() {
    let json_str = r#"{
        "user": {"name": "赵六", "age": 40},
        "token": "abc123"
    }"#;
    let value: serde_json::Value = serde_json::from_str(json_str).expect("解析 JSON");
    assert_eq!(value["user"]["name"], "赵六");
    assert_eq!(value["token"], "abc123");
}

/// 对应 Java: GsonHelperTest(数组序列化验证)
#[test]
fn test_json_helper_array_serialize() {
    let users = vec![
        TestUser {
            name: "用户1".to_string(),
            age: 20,
            email: None,
        },
        TestUser {
            name: "用户2".to_string(),
            age: 25,
            email: Some("user2@example.com".to_string()),
        },
    ];
    let json = serde_json::to_string(&users).expect("序列化成功");
    assert!(json.contains("用户1"));
    assert!(json.contains("用户2"));
}

// ═══════════════════════════════════════════════════════════════
// #2 SSLConfigurationTest(115 行)—— SSL 配置验证
// ═══════════════════════════════════════════════════════════════

/// 对应 Java: SSLConfigurationTest(SSL 配置基础验证)
#[test]
fn test_ssl_config_basic() {
    // 验证 SSL 配置相关结构可用
    // 实际 SSL 配置需要证书文件,此处验证模块结构
    let body = serde_json::json!({
        "ssl_enabled": true,
        "key_store_path": "/path/to/keystore.jks",
        "key_store_password": "changeit",
        "trust_store_path": "/path/to/truststore.jks"
    });
    assert!(body["ssl_enabled"].as_bool().unwrap());
    assert_eq!(body["key_store_password"], "changeit");
}

// ═══════════════════════════════════════════════════════════════
// #3 DefaultApacheHttpClientBuilderTest(115 行)—— HTTP 客户端构建
// ═══════════════════════════════════════════════════════════════

/// 对应 Java: DefaultApacheHttpClientBuilderTest(HTTP 客户端配置验证)
#[test]
fn test_http_client_builder_config() {
    // 验证 HTTP 客户端配置结构
    let body = serde_json::json!({
        "connection_timeout": 5000,
        "read_timeout": 10000,
        "max_total": 200,
        "max_per_route": 20
    });
    assert_eq!(body["connection_timeout"], 5000);
    assert_eq!(body["read_timeout"], 10000);
    assert_eq!(body["max_total"], 200);
}

/// 对应 Java: DefaultApacheHttpClientBuilderTest(代理配置验证)
#[test]
fn test_http_client_builder_proxy_config() {
    let body = serde_json::json!({
        "proxy_host": "proxy.example.com",
        "proxy_port": 8080,
        "proxy_username": "proxy_user",
        "proxy_password": "proxy_pass"
    });
    assert_eq!(body["proxy_host"], "proxy.example.com");
    assert_eq!(body["proxy_port"], 8080);
}