fixes
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

This commit is contained in:
Mikhail Kilin
2026-01-29 01:22:57 +03:00
parent 68a2b7a982
commit 126c7482af
39 changed files with 2861 additions and 74 deletions

152
tests/edit_message.rs Normal file
View File

@@ -0,0 +1,152 @@
// 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);
}