tests
This commit is contained in:
@@ -4,54 +4,55 @@ mod helpers;
|
||||
|
||||
use helpers::fake_tdclient::FakeTdClient;
|
||||
use helpers::test_data::{create_test_chat, TestMessageBuilder};
|
||||
use tele_tui::types::ChatId;
|
||||
|
||||
/// Test: Отправка текстового сообщения
|
||||
#[test]
|
||||
fn test_send_text_message() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_send_text_message() {
|
||||
let client = FakeTdClient::new();
|
||||
let chat = create_test_chat("Mom", 123);
|
||||
client = client.with_chat(chat);
|
||||
let client = client.with_chat(chat);
|
||||
|
||||
// Отправляем сообщение
|
||||
let msg_id = client.send_message(123, "Hello, Mom!".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Hello, Mom!".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Проверяем что сообщение было отправлено
|
||||
assert_eq!(client.sent_messages().len(), 1);
|
||||
assert_eq!(client.sent_messages()[0].chat_id, 123);
|
||||
assert_eq!(client.sent_messages()[0].text, "Hello, Mom!");
|
||||
assert_eq!(client.sent_messages()[0].reply_to, None);
|
||||
assert_eq!(client.get_sent_messages().len(), 1);
|
||||
assert_eq!(client.get_sent_messages()[0].chat_id, 123);
|
||||
assert_eq!(client.get_sent_messages()[0].text, "Hello, Mom!");
|
||||
assert_eq!(client.get_sent_messages()[0].reply_to, None);
|
||||
|
||||
// Проверяем что сообщение добавилось в список
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 1);
|
||||
assert_eq!(messages[0].id().as_i64(), msg_id);
|
||||
assert_eq!(messages[0].id(), msg.id());
|
||||
assert_eq!(messages[0].text(), "Hello, Mom!");
|
||||
assert_eq!(messages[0].is_outgoing(), true);
|
||||
}
|
||||
|
||||
/// Test: Отправка нескольких сообщений обновляет список
|
||||
#[test]
|
||||
fn test_send_multiple_messages_updates_list() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_send_multiple_messages_updates_list() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем первое сообщение
|
||||
let msg1_id = client.send_message(123, "Message 1".to_string(), None);
|
||||
let msg1 = client.send_message(ChatId::new(123), "Message 1".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Отправляем второе сообщение
|
||||
let msg2_id = client.send_message(123, "Message 2".to_string(), None);
|
||||
let msg2 = client.send_message(ChatId::new(123), "Message 2".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Отправляем третье сообщение
|
||||
let msg3_id = client.send_message(123, "Message 3".to_string(), None);
|
||||
let msg3 = client.send_message(ChatId::new(123), "Message 3".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Проверяем что все 3 сообщения отслеживаются
|
||||
assert_eq!(client.sent_messages().len(), 3);
|
||||
assert_eq!(client.get_sent_messages().len(), 3);
|
||||
|
||||
// Проверяем что все сообщения в списке
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 3);
|
||||
assert_eq!(messages[0].id().as_i64(), msg1_id);
|
||||
assert_eq!(messages[1].id().as_i64(), msg2_id);
|
||||
assert_eq!(messages[2].id().as_i64(), msg3_id);
|
||||
assert_eq!(messages[0].id(), msg1.id());
|
||||
assert_eq!(messages[1].id(), msg2.id());
|
||||
assert_eq!(messages[2].id(), msg3.id());
|
||||
assert_eq!(messages[0].text(), "Message 1");
|
||||
assert_eq!(messages[1].text(), "Message 2");
|
||||
assert_eq!(messages[2].text(), "Message 3");
|
||||
@@ -60,31 +61,31 @@ fn test_send_multiple_messages_updates_list() {
|
||||
/// Test: Отправка пустого сообщения (должно быть игнорировано на уровне App)
|
||||
/// Здесь мы тестируем что FakeTdClient технически может отправить пустое сообщение,
|
||||
/// но в реальном App это должно фильтроваться
|
||||
#[test]
|
||||
fn test_send_empty_message_technical() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_send_empty_message_technical() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// FakeTdClient технически может отправить пустое сообщение
|
||||
let msg_id = client.send_message(123, "".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Проверяем что оно отправилось (в реальном App это должно фильтроваться)
|
||||
assert_eq!(client.sent_messages().len(), 1);
|
||||
assert_eq!(client.sent_messages()[0].text, "");
|
||||
assert_eq!(client.get_sent_messages().len(), 1);
|
||||
assert_eq!(client.get_sent_messages()[0].text, "");
|
||||
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 1);
|
||||
assert_eq!(messages[0].id().as_i64(), msg_id);
|
||||
assert_eq!(messages[0].id(), msg.id());
|
||||
assert_eq!(messages[0].text(), "");
|
||||
}
|
||||
|
||||
/// Test: Отправка сообщения с форматированием (markdown сущности)
|
||||
/// В данном случае мы не проверяем парсинг markdown, только что текст сохраняется
|
||||
#[test]
|
||||
fn test_send_message_with_markdown() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_send_message_with_markdown() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
let text = "**Bold** *italic* `code`";
|
||||
client.send_message(123, text.to_string(), None);
|
||||
client.send_message(ChatId::new(123), text.to_string(), None, None).await.unwrap();
|
||||
|
||||
// Проверяем что текст сохранился как есть (парсинг markdown - отдельная логика)
|
||||
let messages = client.get_messages(123);
|
||||
@@ -93,21 +94,21 @@ fn test_send_message_with_markdown() {
|
||||
}
|
||||
|
||||
/// Test: Отправка сообщения в разные чаты
|
||||
#[test]
|
||||
fn test_send_messages_to_different_chats() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_send_messages_to_different_chats() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем в чат 123
|
||||
client.send_message(123, "Hello Mom".to_string(), None);
|
||||
client.send_message(ChatId::new(123), "Hello Mom".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Отправляем в чат 456
|
||||
client.send_message(456, "Hello Boss".to_string(), None);
|
||||
client.send_message(ChatId::new(456), "Hello Boss".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Отправляем ещё одно в чат 123
|
||||
client.send_message(123, "How are you?".to_string(), None);
|
||||
client.send_message(ChatId::new(123), "How are you?".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Проверяем общее количество отправленных
|
||||
assert_eq!(client.sent_messages().len(), 3);
|
||||
assert_eq!(client.get_sent_messages().len(), 3);
|
||||
|
||||
// Проверяем что сообщения распределены по чатам
|
||||
let chat123_messages = client.get_messages(123);
|
||||
@@ -122,19 +123,19 @@ fn test_send_messages_to_different_chats() {
|
||||
|
||||
/// Test: Новое сообщение появляется в реальном времени (симуляция)
|
||||
/// Тестируем что когда приходит новое входящее сообщение, оно добавляется в список
|
||||
#[test]
|
||||
fn test_receive_incoming_message() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_receive_incoming_message() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Добавляем существующее сообщение
|
||||
client.send_message(123, "My outgoing".to_string(), None);
|
||||
client.send_message(ChatId::new(123), "My outgoing".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Симулируем входящее сообщение от собеседника
|
||||
let incoming_msg = TestMessageBuilder::new("Hey there!", 2000)
|
||||
.sender("Alice")
|
||||
.build();
|
||||
|
||||
client = client.with_message(123, incoming_msg);
|
||||
let client = client.with_message(123, incoming_msg);
|
||||
|
||||
// Проверяем что в списке 2 сообщения
|
||||
let messages = client.get_messages(123);
|
||||
|
||||
Reference in New Issue
Block a user