#![allow(clippy::field_reassign_with_default, dead_code)]
#[test]
fn test_duplicate_checker_is_duplicate() {
let msg_id = "MSG001";
let mut seen = std::collections::HashSet::new();
assert!(!seen.contains(msg_id));
seen.insert(msg_id.to_string());
assert!(seen.contains(msg_id));
}
#[test]
fn test_duplicate_checker_duplicate_message() {
let msg_id = "MSG002";
let mut seen = std::collections::HashSet::new();
assert!(seen.insert(msg_id.to_string()));
assert!(!seen.insert(msg_id.to_string()));
}
#[test]
fn test_duplicate_checker_multiple_messages() {
let mut seen = std::collections::HashSet::new();
for i in 0..10 {
let msg_id = format!("MSG_{:03}", i);
assert!(seen.insert(msg_id));
}
assert_eq!(seen.len(), 10);
assert!(!seen.insert("MSG_000".to_string()));
assert_eq!(seen.len(), 10);
}
#[test]
fn test_template_card_message_build() {
let body = serde_json::json!({
"touser": "user1",
"msgtype": "template_card",
"agentid": 1000001,
"template_card": {
"card_type": "text_notice",
"source": {
"icon_url": "http://example.com/icon.jpg",
"desc": "来源描述"
},
"main_title": {
"title": "卡片标题",
"desc": "卡片描述"
},
"emphasis_content": {
"title": "重点内容",
"desc": "重点描述"
}
}
});
assert_eq!(body["msgtype"], "template_card");
assert_eq!(body["template_card"]["card_type"], "text_notice");
}
#[test]
fn test_template_card_message_serde() {
let json_str = r#"{
"errcode": 0,
"errmsg": "ok",
"msgid": 123456
}"#;
let value: serde_json::Value = serde_json::from_str(json_str).expect("解析 JSON");
assert_eq!(value["errcode"], 0);
assert_eq!(value["msgid"], 123456);
}
#[test]
fn test_template_card_button_serde() {
let json_str = r#"{
"text": "按钮文本",
"style": 1,
"key": "btn_key"
}"#;
let value: serde_json::Value = serde_json::from_str(json_str).expect("解析 JSON");
assert_eq!(value["text"], "按钮文本");
assert_eq!(value["key"], "btn_key");
}
#[test]
fn test_wx_error_json_parse() {
let json_str = r#"{
"errcode": 40001,
"errmsg": "invalid credential"
}"#;
let value: serde_json::Value = serde_json::from_str(json_str).expect("解析 JSON");
assert_eq!(value["errcode"], 40001);
assert_eq!(value["errmsg"], "invalid credential");
}
#[test]
fn test_wx_error_success_response() {
let json_str = r#"{"errcode":0,"errmsg":"ok"}"#;
let value: serde_json::Value = serde_json::from_str(json_str).expect("解析 JSON");
assert_eq!(value["errcode"], 0);
assert_eq!(value["errmsg"], "ok");
}
#[test]
fn test_wx_error_common_codes() {
let error_codes = vec![
(0, "ok"),
(40001, "invalid credential"),
(40002, "invalid grant_type"),
(40003, "invalid openid"),
(40013, "invalid appid"),
(40029, "invalid code"),
(40066, "invalid url"),
(41001, "access_token expired"),
(42001, "access_token timeout"),
(45001, "media size out of limit"),
(48001, "api unauthorized"),
];
for (code, msg) in error_codes {
let json = format!(r#"{{"errcode":{},"errmsg":"{}"}}"#, code, msg);
let value: serde_json::Value = serde_json::from_str(&json).expect("解析 JSON");
assert_eq!(value["errcode"], code);
assert_eq!(value["errmsg"], msg);
}
}