This commit is contained in:
Mikhail Kilin
2026-01-31 23:02:53 +03:00
parent af3c36b9a1
commit c5896b7f14
17 changed files with 1899 additions and 567 deletions

View File

@@ -5,38 +5,45 @@ mod helpers;
use helpers::fake_tdclient::FakeTdClient;
use helpers::test_data::TestMessageBuilder;
use tele_tui::tdlib::{ForwardInfo, ReplyInfo};
use tele_tui::types::MessageId;
use tele_tui::types::{ChatId, MessageId};
/// Test: Reply создаёт сообщение с reply_to
#[test]
fn test_reply_creates_message_with_reply_to() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_reply_creates_message_with_reply_to() {
let client = FakeTdClient::new();
// Входящее сообщение от собеседника
let original_msg = TestMessageBuilder::new("Question?", 100)
.sender("Alice")
.build();
client = client.with_message(123, original_msg);
let client = client.with_message(123, original_msg);
// Создаём reply info
let reply_info = ReplyInfo {
message_id: MessageId::new(100),
sender_name: "Alice".to_string(),
text: "Question?".to_string(),
};
// Отвечаем на него
let reply_id = client.send_message(123, "Answer!".to_string(), Some(100));
let reply_msg = client.send_message(ChatId::new(123), "Answer!".to_string(), Some(MessageId::new(100)), Some(reply_info)).await.unwrap();
// Проверяем что ответ отправлен с reply_to
assert_eq!(client.sent_messages().len(), 1);
assert_eq!(client.sent_messages()[0].reply_to, Some(100));
assert_eq!(client.get_sent_messages().len(), 1);
assert_eq!(client.get_sent_messages()[0].reply_to, Some(MessageId::new(100)));
// Проверяем что в списке 2 сообщения
let messages = client.get_messages(123);
assert_eq!(messages.len(), 2);
assert_eq!(messages[1].id(), MessageId::new(reply_id));
assert_eq!(messages[1].id(), reply_msg.id());
assert_eq!(messages[1].content.text, "Answer!");
}
/// Test: Reply отображает превью оригинального сообщения
#[test]
fn test_reply_shows_original_preview() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_reply_shows_original_preview() {
let client = FakeTdClient::new();
// Создаём сообщение с reply info
let reply_msg = TestMessageBuilder::new("Reply text", 101)
@@ -44,7 +51,7 @@ fn test_reply_shows_original_preview() {
.reply_to(100, "Alice", "Original")
.build();
client = client.with_message(123, reply_msg);
let client = client.with_message(123, reply_msg);
// Проверяем что reply_to сохранено
let messages = client.get_messages(123);
@@ -58,39 +65,39 @@ fn test_reply_shows_original_preview() {
}
/// Test: Отмена reply mode (Esc) - сообщение отправляется без reply_to
#[test]
fn test_cancel_reply_sends_without_reply_to() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_cancel_reply_sends_without_reply_to() {
let client = FakeTdClient::new();
// Входящее сообщение
let original = TestMessageBuilder::new("Question?", 100)
.sender("Alice")
.build();
client = client.with_message(123, original);
let client = client.with_message(123, original);
// Пользователь начал reply (r), потом отменил (Esc), затем отправил
// Это эмулируется отправкой без reply_to
client.send_message(123, "Regular message".to_string(), None);
client.send_message(ChatId::new(123), "Regular message".to_string(), None, None).await.unwrap();
// Проверяем что отправилось без reply_to
assert_eq!(client.sent_messages()[0].reply_to, None);
assert_eq!(client.get_sent_messages()[0].reply_to, None);
let messages = client.get_messages(123);
assert_eq!(messages[1].content.text, "Regular message");
}
/// Test: Forward создаёт сообщение с forward_from
#[test]
fn test_forward_creates_message_with_forward_from() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_forward_creates_message_with_forward_from() {
let client = FakeTdClient::new();
// Создаём пересланное сообщение
let forwarded_msg = TestMessageBuilder::new("Forwarded text", 200)
.forwarded_from("Bob")
.build();
client = client.with_message(456, forwarded_msg);
let client = client.with_message(456, forwarded_msg);
// Проверяем что forward_from сохранено
let messages = client.get_messages(456);
@@ -104,15 +111,15 @@ fn test_forward_creates_message_with_forward_from() {
/// Test: Forward показывает "↪ Переслано от ..."
/// Проверяем что у пересланного сообщения есть forward_from
#[test]
fn test_forward_displays_sender_name() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_forward_displays_sender_name() {
let client = FakeTdClient::new();
let msg = TestMessageBuilder::new("Important info", 300)
.forwarded_from("Charlie")
.build();
client = client.with_message(789, msg);
let client = client.with_message(789, msg);
let messages = client.get_messages(789);
let forward = messages[0].forward_from().unwrap();
@@ -122,23 +129,23 @@ fn test_forward_displays_sender_name() {
}
/// Test: Forward в другой чат
#[test]
fn test_forward_to_different_chat() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_forward_to_different_chat() {
let client = FakeTdClient::new();
// Исходное сообщение в чате 123
let original = TestMessageBuilder::new("Share this", 100)
.sender("Alice")
.build();
client = client.with_message(123, original);
let client = client.with_message(123, original);
// Пересылаем в чат 456
let forwarded = TestMessageBuilder::new("Share this", 101)
.forwarded_from("Alice")
.build();
client = client.with_message(456, forwarded);
let client = client.with_message(456, forwarded);
// Проверяем что в первом чате 1 сообщение
assert_eq!(client.get_messages(123).len(), 1);
@@ -149,32 +156,39 @@ fn test_forward_to_different_chat() {
}
/// Test: Reply + Forward комбинация (ответ на пересланное сообщение)
#[test]
fn test_reply_to_forwarded_message() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_reply_to_forwarded_message() {
let client = FakeTdClient::new();
// Пересланное сообщение
let forwarded = TestMessageBuilder::new("Forwarded", 100)
.forwarded_from("Bob")
.build();
client = client.with_message(123, forwarded);
let client = client.with_message(123, forwarded);
// Создаём reply info
let reply_info = ReplyInfo {
message_id: MessageId::new(100),
sender_name: "Bob".to_string(),
text: "Forwarded".to_string(),
};
// Отвечаем на пересланное сообщение
let reply_id = client.send_message(123, "Thanks for sharing!".to_string(), Some(100));
let reply_msg = client.send_message(ChatId::new(123), "Thanks for sharing!".to_string(), Some(MessageId::new(100)), Some(reply_info)).await.unwrap();
// Проверяем что reply содержит reply_to
assert_eq!(client.sent_messages()[0].reply_to, Some(100));
assert_eq!(client.get_sent_messages()[0].reply_to, Some(MessageId::new(100)));
let messages = client.get_messages(123);
assert_eq!(messages.len(), 2);
assert_eq!(messages[1].id(), MessageId::new(reply_id));
assert_eq!(messages[1].id(), reply_msg.id());
}
/// Test: Forward множества сообщений (batch forward)
#[test]
fn test_forward_multiple_messages() {
let mut client = FakeTdClient::new();
#[tokio::test]
async fn test_forward_multiple_messages() {
let client = FakeTdClient::new();
// Создаём 3 пересланных сообщения
let msg1 = TestMessageBuilder::new("Message 1", 100)
@@ -189,7 +203,7 @@ fn test_forward_multiple_messages() {
.forwarded_from("Alice")
.build();
client = client
let client = client
.with_message(456, msg1)
.with_message(456, msg2)
.with_message(456, msg3);