tests
This commit is contained in:
@@ -4,36 +4,37 @@ mod helpers;
|
||||
|
||||
use helpers::fake_tdclient::FakeTdClient;
|
||||
use helpers::test_data::TestMessageBuilder;
|
||||
use tele_tui::types::{ChatId, MessageId};
|
||||
|
||||
/// Test: Редактирование сообщения изменяет текст
|
||||
#[test]
|
||||
fn test_edit_message_changes_text() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_edit_message_changes_text() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем сообщение
|
||||
let msg_id = client.send_message(123, "Original text".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Original text".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Редактируем сообщение
|
||||
client.edit_message(123, msg_id, "Edited text".to_string());
|
||||
client.edit_message(ChatId::new(123), msg.id(), "Edited text".to_string()).await.unwrap();
|
||||
|
||||
// Проверяем что редактирование записалось
|
||||
assert_eq!(client.edited_messages().len(), 1);
|
||||
assert_eq!(client.edited_messages()[0].message_id, msg_id);
|
||||
assert_eq!(client.edited_messages()[0].new_text, "Edited text");
|
||||
assert_eq!(client.get_edited_messages().len(), 1);
|
||||
assert_eq!(client.get_edited_messages()[0].message_id, msg.id());
|
||||
assert_eq!(client.get_edited_messages()[0].new_text, "Edited text");
|
||||
|
||||
// Проверяем что текст сообщения изменился
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 1);
|
||||
assert_eq!(messages[0].content.text, "Edited text");
|
||||
assert_eq!(messages[0].text(), "Edited text");
|
||||
}
|
||||
|
||||
/// Test: Редактирование устанавливает edit_date
|
||||
#[test]
|
||||
fn test_edit_message_sets_edit_date() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_edit_message_sets_edit_date() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем сообщение
|
||||
let msg_id = client.send_message(123, "Original".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Original".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Получаем дату до редактирования
|
||||
let messages_before = client.get_messages(123);
|
||||
@@ -41,7 +42,7 @@ fn test_edit_message_sets_edit_date() {
|
||||
assert_eq!(messages_before[0].edit_date(), 0); // Не редактировалось
|
||||
|
||||
// Редактируем сообщение
|
||||
client.edit_message(123, msg_id, "Edited".to_string());
|
||||
client.edit_message(ChatId::new(123), msg.id(), "Edited".to_string()).await.unwrap();
|
||||
|
||||
// Проверяем что edit_date установлена
|
||||
let messages_after = client.get_messages(123);
|
||||
@@ -50,21 +51,21 @@ fn test_edit_message_sets_edit_date() {
|
||||
}
|
||||
|
||||
/// Test: Редактирование только своих сообщений (проверка через can_be_edited)
|
||||
#[test]
|
||||
fn test_can_only_edit_own_messages() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_can_only_edit_own_messages() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Наше исходящее сообщение (можно редактировать)
|
||||
let outgoing_msg = TestMessageBuilder::new("My message", 1).outgoing().build();
|
||||
|
||||
client = client.with_message(123, outgoing_msg);
|
||||
let client = client.with_message(123, outgoing_msg);
|
||||
|
||||
// Входящее сообщение от собеседника (нельзя редактировать)
|
||||
let incoming_msg = TestMessageBuilder::new("Their message", 2)
|
||||
.sender("Alice")
|
||||
.build();
|
||||
|
||||
client = client.with_message(123, incoming_msg);
|
||||
let client = client.with_message(123, incoming_msg);
|
||||
|
||||
// Проверяем флаги
|
||||
let messages = client.get_messages(123);
|
||||
@@ -73,56 +74,57 @@ fn test_can_only_edit_own_messages() {
|
||||
}
|
||||
|
||||
/// Test: Множественные редактирования одного сообщения
|
||||
#[test]
|
||||
fn test_multiple_edits_of_same_message() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_multiple_edits_of_same_message() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
let msg_id = client.send_message(123, "Version 1".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Version 1".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Первое редактирование
|
||||
client.edit_message(123, msg_id, "Version 2".to_string());
|
||||
client.edit_message(ChatId::new(123), msg.id(), "Version 2".to_string()).await.unwrap();
|
||||
|
||||
// Второе редактирование
|
||||
client.edit_message(123, msg_id, "Version 3".to_string());
|
||||
client.edit_message(ChatId::new(123), msg.id(), "Version 3".to_string()).await.unwrap();
|
||||
|
||||
// Третье редактирование
|
||||
client.edit_message(123, msg_id, "Final version".to_string());
|
||||
client.edit_message(ChatId::new(123), msg.id(), "Final version".to_string()).await.unwrap();
|
||||
|
||||
// Проверяем что все 3 редактирования записаны
|
||||
assert_eq!(client.edited_messages().len(), 3);
|
||||
assert_eq!(client.edited_messages()[0].new_text, "Version 2");
|
||||
assert_eq!(client.edited_messages()[1].new_text, "Version 3");
|
||||
assert_eq!(client.edited_messages()[2].new_text, "Final version");
|
||||
assert_eq!(client.get_edited_messages().len(), 3);
|
||||
assert_eq!(client.get_edited_messages()[0].new_text, "Version 2");
|
||||
assert_eq!(client.get_edited_messages()[1].new_text, "Version 3");
|
||||
assert_eq!(client.get_edited_messages()[2].new_text, "Final version");
|
||||
|
||||
// Проверяем что сообщение содержит последнюю версию
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 1);
|
||||
assert_eq!(messages[0].content.text, "Final version");
|
||||
assert_eq!(messages[0].text(), "Final version");
|
||||
}
|
||||
|
||||
/// Test: Редактирование несуществующего сообщения (ничего не происходит)
|
||||
#[test]
|
||||
fn test_edit_nonexistent_message() {
|
||||
let mut client = FakeTdClient::new();
|
||||
/// Test: Редактирование несуществующего сообщения (возвращает ошибку)
|
||||
#[tokio::test]
|
||||
async fn test_edit_nonexistent_message() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Пытаемся отредактировать несуществующее сообщение
|
||||
client.edit_message(123, 999, "New text".to_string());
|
||||
let result = client.edit_message(ChatId::new(123), MessageId::new(999), "New text".to_string()).await;
|
||||
|
||||
// Редактирование записалось в историю (FakeTdClient всё записывает)
|
||||
assert_eq!(client.edited_messages().len(), 1);
|
||||
// Должна вернуться ошибка
|
||||
assert!(result.is_err());
|
||||
assert_eq!(result.unwrap_err(), "Message not found");
|
||||
|
||||
// Но в списке сообщений ничего нет
|
||||
// В списке сообщений ничего нет
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 0);
|
||||
}
|
||||
|
||||
/// Test: Отмена редактирования (Esc) - тестируем что можно восстановить original
|
||||
/// В данном случае проверяем что FakeTdClient сохраняет историю edits
|
||||
#[test]
|
||||
fn test_edit_history_tracking() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_edit_history_tracking() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
let msg_id = client.send_message(123, "Original".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Original".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Симулируем начало редактирования -> изменение -> отмена
|
||||
// Отменять на уровне FakeTdClient нельзя, но можно проверить что original сохранён
|
||||
@@ -132,19 +134,19 @@ fn test_edit_history_tracking() {
|
||||
let original = messages_before[0].text().to_string();
|
||||
|
||||
// Редактируем
|
||||
client.edit_message(123, msg_id, "Edited".to_string());
|
||||
client.edit_message(ChatId::new(123), msg.id(), "Edited".to_string()).await.unwrap();
|
||||
|
||||
// Проверяем что изменилось
|
||||
let messages_edited = client.get_messages(123);
|
||||
assert_eq!(messages_edited[0].content.text, "Edited");
|
||||
assert_eq!(messages_edited[0].text(), "Edited");
|
||||
|
||||
// Можем "отменить" редактирование вернув original
|
||||
client.edit_message(123, msg_id, original);
|
||||
client.edit_message(ChatId::new(123), msg.id(), original).await.unwrap();
|
||||
|
||||
// Проверяем что вернулось
|
||||
let messages_restored = client.get_messages(123);
|
||||
assert_eq!(messages_restored[0].content.text, "Original");
|
||||
assert_eq!(messages_restored[0].text(), "Original");
|
||||
|
||||
// История показывает 2 редактирования
|
||||
assert_eq!(client.edited_messages().len(), 2);
|
||||
assert_eq!(client.get_edited_messages().len(), 2);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user