teloxide/tests/sqlite.rs

76 lines
2.3 KiB
Rust
Raw Normal View History

2020-10-24 18:51:55 +02:00
use std::{
fmt::{Debug, Display},
sync::Arc,
};
use teloxide::dispatching::dialogue::{Serializer, SqliteStorage, SqliteStorageError, Storage};
2020-10-24 18:51:55 +02:00
2021-03-05 22:50:11 +01:00
#[tokio::test(flavor = "multi_thread")]
2020-10-24 18:51:55 +02:00
async fn test_sqlite_json() {
let storage =
SqliteStorage::open("./test_db1.sqlite", teloxide::dispatching::dialogue::serializer::Json)
2020-10-24 18:51:55 +02:00
.await
.unwrap();
test_sqlite(storage).await;
}
2021-03-05 22:50:11 +01:00
#[tokio::test(flavor = "multi_thread")]
2020-10-24 18:51:55 +02:00
async fn test_sqlite_bincode() {
let storage = SqliteStorage::open(
"./test_db2.sqlite",
teloxide::dispatching::dialogue::serializer::Bincode,
)
.await
.unwrap();
test_sqlite(storage).await;
}
2021-03-05 22:50:11 +01:00
#[tokio::test(flavor = "multi_thread")]
2020-10-24 18:51:55 +02:00
async fn test_sqlite_cbor() {
let storage =
SqliteStorage::open("./test_db3.sqlite", teloxide::dispatching::dialogue::serializer::Cbor)
2020-10-24 18:51:55 +02:00
.await
.unwrap();
test_sqlite(storage).await;
}
type Dialogue = String;
2021-03-28 04:20:35 +02:00
macro_rules! test_dialogues {
($storage:expr, $_0:expr, $_1:expr, $_2:expr) => {
assert_eq!(Arc::clone(&$storage).get_dialogue(1).await.unwrap(), $_0);
assert_eq!(Arc::clone(&$storage).get_dialogue(11).await.unwrap(), $_1);
assert_eq!(Arc::clone(&$storage).get_dialogue(256).await.unwrap(), $_2);
};
}
2020-10-24 18:51:55 +02:00
async fn test_sqlite<S>(storage: Arc<SqliteStorage<S>>)
where
S: Send + Sync + Serializer<Dialogue> + 'static,
<S as Serializer<Dialogue>>::Error: Debug + Display,
{
2021-03-28 04:20:35 +02:00
test_dialogues!(storage, None, None, None);
2020-10-24 18:51:55 +02:00
2021-03-28 04:20:35 +02:00
Arc::clone(&storage).update_dialogue(1, "ABC".to_owned()).await.unwrap();
Arc::clone(&storage).update_dialogue(11, "DEF".to_owned()).await.unwrap();
Arc::clone(&storage).update_dialogue(256, "GHI".to_owned()).await.unwrap();
2020-10-24 18:51:55 +02:00
2021-03-28 04:20:35 +02:00
test_dialogues!(
storage,
Some("ABC".to_owned()),
Some("DEF".to_owned()),
Some("GHI".to_owned())
);
2020-10-24 18:51:55 +02:00
2021-03-28 04:20:35 +02:00
Arc::clone(&storage).remove_dialogue(1).await.unwrap();
Arc::clone(&storage).remove_dialogue(11).await.unwrap();
Arc::clone(&storage).remove_dialogue(256).await.unwrap();
2020-10-24 18:51:55 +02:00
2021-03-28 04:20:35 +02:00
test_dialogues!(storage, None, None, None);
// Check that a try to remove a non-existing dialogue results in an error.
2021-05-08 15:00:38 +02:00
assert!(matches!(
Arc::clone(&storage).remove_dialogue(1).await.unwrap_err(),
SqliteStorageError::DialogueNotFound
));
2020-10-24 18:51:55 +02:00
}