botrs 0.13.0

A Rust QQ Bot framework based on QQ Guild Bot API
Documentation
use super::payload::parse_data;
use super::*;
use crate::manage::C2CFriendData;
use crate::models::gateway::*;

#[test]
fn parse_and_handle_accepts_known_event_payload() {
    let body = br#"{"op":0,"t":"MESSAGE_CREATE","d":{"id":"1","content":"hello"}}"#;
    let mut payload = WSPayload {
        base: WSPayloadBase {
            op_code: WS_DISPATCH_EVENT,
            seq: None,
            event_type: Some(EVENT_MESSAGE_CREATE.to_string()),
            event_id: None,
        },
        data: None,
        raw_message: Some(body.to_vec()),
        session: None,
    };

    parse_and_handle(&mut payload).unwrap();
}

#[test]
fn parse_and_handle_rejects_invalid_known_event_payload() {
    let body = br#"{"op":0,"t":"MESSAGE_CREATE","d":"not a message object"}"#;
    let mut payload = WSPayload {
        base: WSPayloadBase {
            op_code: WS_DISPATCH_EVENT,
            seq: None,
            event_type: Some(EVENT_MESSAGE_CREATE.to_string()),
            event_id: None,
        },
        data: None,
        raw_message: Some(body.to_vec()),
        session: None,
    };

    assert!(parse_and_handle(&mut payload).is_err());
}

#[test]
fn parse_data_reads_c2c_friend_dto() {
    let body =
        br#"{"op":0,"t":"FRIEND_ADD","d":{"openid":"u1","timestamp":123,"nick":"n","avatar":"a"}}"#;
    let data: C2CFriendData = parse_data(body).unwrap();

    assert_eq!(data.openid, "u1");
    assert_eq!(data.timestamp, 123);
    assert_eq!(data.nick, "n");
    assert_eq!(data.avatar, "a");
}