use crate::types::*;

#[test]
fn dice() {
    for value in [
        serde_json::json!({
            "emoji": DiceType::Basketball.to_string(),
            "value": 1,
        }),
        serde_json::json!({
            "emoji": DiceType::Bones.to_string(),
            "value": 2,
        }),
        serde_json::json!({
            "emoji": DiceType::Bowling.to_string(),
            "value": 3,
        }),
        serde_json::json!({
            "emoji": DiceType::Darts.to_string(),
            "value": 4,
        }),
        serde_json::json!({
            "emoji": DiceType::Football.to_string(),
            "value": 5,
        }),
        serde_json::json!({
            "emoji": DiceType::SlotMachine.to_string(),
            "value": 6,
        }),
    ] {
        let value: Dice = serde_json::from_value(value).unwrap();
        insta::assert_json_snapshot!(value);
        insta::assert_snapshot!(value.dice_type().to_string());
        insta::assert_snapshot!(value.value());
    }
}

#[test]
fn send_dice() {
    let method = SendDice::new(1, DiceType::Bones);
    assert_payload_eq!(POST JSON "sendDice" => method.clone());
    let method = method
        .with_allow_paid_broadcast(true)
        .with_business_connection_id("id")
        .with_direct_messages_topic_id(1)
        .with_disable_notification(true)
        .with_message_effect_id("effect-id")
        .with_message_thread_id(1)
        .with_protect_content(true)
        .with_reply_markup(ForceReply::new(true))
        .with_reply_parameters(ReplyParameters::new(1))
        .with_suggested_post_parameters(SuggestedPostParameters::default());
    assert_payload_eq!(POST JSON "sendDice" => method);
}
