#![allow(missing_docs)]
use std::sync::Arc;
use reqwest::{Client, StatusCode};
use tgbot::{
handler::{UpdateHandler, WebhookServer},
types::Update,
};
use tokio::sync::Mutex;
#[derive(Clone)]
struct Handler {
updates: Arc<Mutex<Vec<Update>>>,
}
impl UpdateHandler for Handler {
async fn handle(&self, update: Update) {
let mut updates = self.updates.lock().await;
updates.push(update);
}
}
#[tokio::test]
async fn webhook() {
let updates = Arc::new(Mutex::new(Vec::new()));
let webhook_server = WebhookServer::new(
"/",
Handler {
updates: updates.clone(),
},
);
tokio::spawn(async move {
webhook_server.run(([127, 0, 0, 1], 8080)).await.unwrap();
});
let client = Client::new();
let response = client
.post("http://localhost:8080/")
.json(&serde_json::json!({
"update_id":10000,
"message":{
"date":1441645532,
"chat":{
"last_name":"Test Lastname",
"id":1111111,
"first_name":"Test",
"username":"Test",
"type": "private"
},
"message_id":1365,
"from":{
"last_name":"Test Lastname",
"id":1111111,
"first_name":"Test",
"username":"Test",
"is_bot": false
},
"text":"/start"
}
}))
.send()
.await
.unwrap();
assert_eq!(response.status(), StatusCode::OK);
assert!(!updates.lock().await.is_empty())
}