botrs 0.13.0

A Rust QQ Bot framework based on QQ Guild Bot API
Documentation
use super::*;

#[test]
fn test_remind_type_conversion() {
    assert_eq!(RemindType::from(0), RemindType::None);
    assert_eq!(RemindType::from(1), RemindType::OnStart);
    assert_eq!(RemindType::from(5), RemindType::Before1Hour);
    assert_eq!(u8::from(RemindType::Before15Minutes), 3);
    assert_eq!(u8::from(RemindType::Before1Day), 7);

    assert_eq!(RemindType::from(99), RemindType::Unknown(99));
    assert_eq!(u8::from(RemindType::Unknown(99)), 99);
}

#[test]
fn test_schedule_creation() {
    let schedule = Schedule::new(
        "Team Meeting",
        "1640995200",
        "1640998800",
        Some("channel123".to_string()),
        RemindType::Before15Minutes,
    );

    assert_eq!(schedule.name, "Team Meeting");
    assert_eq!(schedule.start_timestamp, "1640995200");
    assert_eq!(schedule.end_timestamp, "1640998800");
    assert_eq!(schedule.jump_channel_id, "channel123");
    assert_eq!(schedule.remind_type, "3");
}

#[test]
fn test_schedule_no_reminder() {
    let schedule = Schedule::new(
        "No Reminder Event",
        "1640995200",
        "1640998800",
        None,
        RemindType::None,
    );

    assert_eq!(schedule.remind_type, "0");
}

#[test]
fn schedule_uses_required_zero_value_fields() {
    let schedule: Schedule = serde_json::from_value(serde_json::json!({})).unwrap();

    assert_eq!(schedule.id, "");
    assert_eq!(schedule.name, "");
    assert_eq!(schedule.description, "");
    assert_eq!(schedule.start_timestamp, "");
    assert_eq!(schedule.end_timestamp, "");
    assert_eq!(schedule.jump_channel_id, "");
    assert_eq!(schedule.remind_type, "");
    assert!(schedule.creator.is_none());

    let value = serde_json::to_value(&schedule).unwrap();
    assert!(value.as_object().unwrap().is_empty());
}

#[test]
fn schedule_keeps_official_json_shape() {
    let schedule = Schedule {
        id: "schedule-1".to_string(),
        name: "meeting".to_string(),
        description: "planning".to_string(),
        start_timestamp: "1640995200".to_string(),
        end_timestamp: "1640998800".to_string(),
        jump_channel_id: "channel-1".to_string(),
        remind_type: "3".to_string(),
        creator: None,
    };
    let value = serde_json::to_value(&schedule).unwrap();

    assert_eq!(value["id"], "schedule-1");
    assert_eq!(value["name"], "meeting");
    assert_eq!(value["description"], "planning");
    assert_eq!(value["start_timestamp"], "1640995200");
    assert_eq!(value["end_timestamp"], "1640998800");
    assert_eq!(value["jump_channel_id"], "channel-1");
    assert_eq!(value["remind_type"], "3");
}

#[test]
fn schedule_wrapper_allows_empty_zero_value_body() {
    let wrapper = ScheduleWrapper::default();
    let value = serde_json::to_value(&wrapper).unwrap();

    assert!(value.as_object().unwrap().is_empty());
}