tgbot 0.47.0

A Telegram Bot library
Documentation
#![allow(missing_docs)]

use tgbot::types::*;

mod cx;

use cx::Cx;

#[tokio::test]
async fn execute() {
    let mut cx = Cx::new().await;
    cx.execute_batch([
        (
            "send-checklist-base",
            SendChecklist::new(
                "c-id",
                1,
                InputChecklist::new([InputChecklistTask::new(1, "test")], "test"),
            ),
            |x| {
                assert_eq!(x.id, 1);
                if let MessageData::Checklist(data) = x.data {
                    assert_eq!(data.title, "test");
                    assert_eq!(data.tasks.len(), 1);
                    let task = &data.tasks[0];
                    assert_eq!(task.id, 1);
                    assert_eq!(task.text, "test");
                } else {
                    panic!("Got an unexpected message data: {:?}", x.data);
                }
            },
        ),
        (
            "send-checklist-full",
            SendChecklist::new(
                "c-id",
                1,
                InputChecklist::new(
                    [
                        InputChecklistTask::new(1, ("test 1", [TextEntity::bold(0..2)])),
                        InputChecklistTask::new(2, ("test 2", ParseMode::Html)),
                    ],
                    ("test", [TextEntity::bold(0..2)]),
                )
                .with_others_can_add_tasks(true)
                .with_others_can_mark_tasks_as_done(true),
            )
            .with_disable_notification(true)
            .with_protect_content(true)
            .with_reply_markup([[InlineKeyboardButton::for_url("text", "url")]])
            .with_reply_parameters(ReplyParameters::new(1))
            .with_message_effect_id("effect-id"),
            |x| {
                assert_eq!(x.id, 1);
                if let MessageData::Checklist(data) = x.data {
                    assert_eq!(data.title, "test");
                    let mut title_entities = data.title_entities.unwrap().into_iter();
                    let title_entity = title_entities.next().unwrap();
                    assert!(matches!(
                        title_entity,
                        TextEntity::Bold(TextEntityPosition { offset: 0, length: 2 })
                    ));
                    assert!(title_entities.next().is_none());
                    assert!(data.others_can_add_tasks.unwrap());
                    assert!(data.others_can_mark_tasks_as_done.unwrap());
                    let task_1 = &data.tasks[0];
                    assert_eq!(task_1.id, 1);
                    assert_eq!(task_1.text, "test 1");
                    assert!(task_1.text_entities.is_some());
                    assert_eq!(task_1.completed_by_user.as_ref().map(|x| x.id).unwrap(), 1);
                    assert!(task_1.completed_by_chat.is_none());
                    assert_eq!(task_1.completion_date.unwrap(), 0);
                    let task_2 = &data.tasks[1];
                    assert_eq!(task_2.id, 2);
                    assert!(task_2.completed_by_user.is_none());
                    assert!(task_2.completed_by_chat.is_some());
                } else {
                    panic!("Got an unexpected message data: {:?}", x.data);
                }
            },
        ),
    ])
    .await;
    cx.execute_batch([
        (
            "edit-message-checklist-base",
            EditMessageChecklist::new(
                "c-id",
                1,
                InputChecklist::new([InputChecklistTask::new(1, "test")], "test"),
                2,
            ),
            |x| assert_eq!(x.id, 1),
        ),
        (
            "edit-message-checklist-all",
            EditMessageChecklist::new(
                "c-id",
                1,
                InputChecklist::new([InputChecklistTask::new(1, "test")], "test"),
                2,
            )
            .with_reply_markup([[InlineKeyboardButton::for_url("text", "url")]]),
            |x| assert_eq!(x.id, 1),
        ),
    ])
    .await;
}