Files
telegram-tui/tests/send_message.rs
Mikhail Kilin 644e36597d fixes
2026-01-31 03:48:50 +03:00

147 lines
6.2 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Integration tests for send message flow
mod helpers;
use helpers::fake_tdclient::FakeTdClient;
use helpers::test_data::{create_test_chat, TestMessageBuilder};
/// Test: Отправка текстового сообщения
#[test]
fn test_send_text_message() {
let mut client = FakeTdClient::new();
let chat = create_test_chat("Mom", 123);
client = client.with_chat(chat);
// Отправляем сообщение
let msg_id = client.send_message(123, "Hello, Mom!".to_string(), None);
// Проверяем что сообщение было отправлено
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);
// Проверяем что сообщение добавилось в список
let messages = client.get_messages(123);
assert_eq!(messages.len(), 1);
assert_eq!(messages[0].id().as_i64(), 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();
// Отправляем первое сообщение
let msg1_id = client.send_message(123, "Message 1".to_string(), None);
// Отправляем второе сообщение
let msg2_id = client.send_message(123, "Message 2".to_string(), None);
// Отправляем третье сообщение
let msg3_id = client.send_message(123, "Message 3".to_string(), None);
// Проверяем что все 3 сообщения отслеживаются
assert_eq!(client.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].text(), "Message 1");
assert_eq!(messages[1].text(), "Message 2");
assert_eq!(messages[2].text(), "Message 3");
}
/// Test: Отправка пустого сообщения (должно быть игнорировано на уровне App)
/// Здесь мы тестируем что FakeTdClient технически может отправить пустое сообщение,
/// но в реальном App это должно фильтроваться
#[test]
fn test_send_empty_message_technical() {
let mut client = FakeTdClient::new();
// FakeTdClient технически может отправить пустое сообщение
let msg_id = client.send_message(123, "".to_string(), None);
// Проверяем что оно отправилось (в реальном App это должно фильтроваться)
assert_eq!(client.sent_messages().len(), 1);
assert_eq!(client.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].text(), "");
}
/// Test: Отправка сообщения с форматированием (markdown сущности)
/// В данном случае мы не проверяем парсинг markdown, только что текст сохраняется
#[test]
fn test_send_message_with_markdown() {
let mut client = FakeTdClient::new();
let text = "**Bold** *italic* `code`";
client.send_message(123, text.to_string(), None);
// Проверяем что текст сохранился как есть (парсинг markdown - отдельная логика)
let messages = client.get_messages(123);
assert_eq!(messages.len(), 1);
assert_eq!(messages[0].text(), text);
}
/// Test: Отправка сообщения в разные чаты
#[test]
fn test_send_messages_to_different_chats() {
let mut client = FakeTdClient::new();
// Отправляем в чат 123
client.send_message(123, "Hello Mom".to_string(), None);
// Отправляем в чат 456
client.send_message(456, "Hello Boss".to_string(), None);
// Отправляем ещё одно в чат 123
client.send_message(123, "How are you?".to_string(), None);
// Проверяем общее количество отправленных
assert_eq!(client.sent_messages().len(), 3);
// Проверяем что сообщения распределены по чатам
let chat123_messages = client.get_messages(123);
assert_eq!(chat123_messages.len(), 2);
assert_eq!(chat123_messages[0].text(), "Hello Mom");
assert_eq!(chat123_messages[1].text(), "How are you?");
let chat456_messages = client.get_messages(456);
assert_eq!(chat456_messages.len(), 1);
assert_eq!(chat456_messages[0].text(), "Hello Boss");
}
/// Test: Новое сообщение появляется в реальном времени (симуляция)
/// Тестируем что когда приходит новое входящее сообщение, оно добавляется в список
#[test]
fn test_receive_incoming_message() {
let mut client = FakeTdClient::new();
// Добавляем существующее сообщение
client.send_message(123, "My outgoing".to_string(), None);
// Симулируем входящее сообщение от собеседника
let incoming_msg = TestMessageBuilder::new("Hey there!", 2000)
.sender("Alice")
.build();
client = client.with_message(123, incoming_msg);
// Проверяем что в списке 2 сообщения
let messages = client.get_messages(123);
assert_eq!(messages.len(), 2);
assert_eq!(messages[0].is_outgoing(), true); // Наше сообщение
assert_eq!(messages[1].is_outgoing(), false); // Входящее
assert_eq!(messages[1].text(), "Hey there!");
assert_eq!(messages[1].sender_name(), "Alice");
}