Files
telegram-tui/tests/edit_message.rs
Mikhail Kilin 126c7482af
Some checks failed
CI / Check (pull_request) Has been cancelled
CI / Format (pull_request) Has been cancelled
CI / Clippy (pull_request) Has been cancelled
CI / Build (macos-latest) (pull_request) Has been cancelled
CI / Build (ubuntu-latest) (pull_request) Has been cancelled
CI / Build (windows-latest) (pull_request) Has been cancelled
fixes
2026-01-29 01:22:57 +03:00

153 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 edit message flow
mod helpers;
use helpers::fake_tdclient::FakeTdClient;
use helpers::test_data::TestMessageBuilder;
/// Test: Редактирование сообщения изменяет текст
#[test]
fn test_edit_message_changes_text() {
let mut client = FakeTdClient::new();
// Отправляем сообщение
let msg_id = client.send_message(123, "Original text".to_string(), None);
// Редактируем сообщение
client.edit_message(123, msg_id, "Edited text".to_string());
// Проверяем что редактирование записалось
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");
// Проверяем что текст сообщения изменился
let messages = client.get_messages(123);
assert_eq!(messages.len(), 1);
assert_eq!(messages[0].content, "Edited text");
}
/// Test: Редактирование устанавливает edit_date
#[test]
fn test_edit_message_sets_edit_date() {
let mut client = FakeTdClient::new();
// Отправляем сообщение
let msg_id = client.send_message(123, "Original".to_string(), None);
// Получаем дату до редактирования
let messages_before = client.get_messages(123);
let date_before = messages_before[0].date;
assert_eq!(messages_before[0].edit_date, 0); // Не редактировалось
// Редактируем сообщение
client.edit_message(123, msg_id, "Edited".to_string());
// Проверяем что edit_date установлена
let messages_after = client.get_messages(123);
assert!(messages_after[0].edit_date > 0);
assert!(messages_after[0].edit_date > date_before); // edit_date после date
}
/// Test: Редактирование только своих сообщений (проверка через can_be_edited)
#[test]
fn test_can_only_edit_own_messages() {
let mut client = FakeTdClient::new();
// Наше исходящее сообщение (можно редактировать)
let outgoing_msg = TestMessageBuilder::new("My message", 1)
.outgoing()
.build();
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 messages = client.get_messages(123);
assert_eq!(messages[0].can_be_edited, true); // Наше сообщение
assert_eq!(messages[1].can_be_edited, false); // Чужое сообщение
}
/// Test: Множественные редактирования одного сообщения
#[test]
fn test_multiple_edits_of_same_message() {
let mut client = FakeTdClient::new();
let msg_id = client.send_message(123, "Version 1".to_string(), None);
// Первое редактирование
client.edit_message(123, msg_id, "Version 2".to_string());
// Второе редактирование
client.edit_message(123, msg_id, "Version 3".to_string());
// Третье редактирование
client.edit_message(123, msg_id, "Final version".to_string());
// Проверяем что все 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");
// Проверяем что сообщение содержит последнюю версию
let messages = client.get_messages(123);
assert_eq!(messages.len(), 1);
assert_eq!(messages[0].content, "Final version");
}
/// Test: Редактирование несуществующего сообщения (ничего не происходит)
#[test]
fn test_edit_nonexistent_message() {
let mut client = FakeTdClient::new();
// Пытаемся отредактировать несуществующее сообщение
client.edit_message(123, 999, "New text".to_string());
// Редактирование записалось в историю (FakeTdClient всё записывает)
assert_eq!(client.edited_messages().len(), 1);
// Но в списке сообщений ничего нет
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();
let msg_id = client.send_message(123, "Original".to_string(), None);
// Симулируем начало редактирования -> изменение -> отмена
// Отменять на уровне FakeTdClient нельзя, но можно проверить что original сохранён
// Сохраняем original
let messages_before = client.get_messages(123);
let original = messages_before[0].content.clone();
// Редактируем
client.edit_message(123, msg_id, "Edited".to_string());
// Проверяем что изменилось
let messages_edited = client.get_messages(123);
assert_eq!(messages_edited[0].content, "Edited");
// Можем "отменить" редактирование вернув original
client.edit_message(123, msg_id, original);
// Проверяем что вернулось
let messages_restored = client.get_messages(123);
assert_eq!(messages_restored[0].content, "Original");
// История показывает 2 редактирования
assert_eq!(client.edited_messages().len(), 2);
}