tests
This commit is contained in:
@@ -4,74 +4,74 @@ mod helpers;
|
||||
|
||||
use helpers::fake_tdclient::FakeTdClient;
|
||||
use helpers::test_data::TestMessageBuilder;
|
||||
use tele_tui::types::MessageId;
|
||||
use tele_tui::types::{ChatId, MessageId};
|
||||
|
||||
/// Test: Удаление сообщения убирает его из списка
|
||||
#[test]
|
||||
fn test_delete_message_removes_from_list() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_delete_message_removes_from_list() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем сообщение
|
||||
let msg_id = client.send_message(123, "Delete me".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Delete me".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Проверяем что сообщение есть
|
||||
assert_eq!(client.get_messages(123).len(), 1);
|
||||
|
||||
// Удаляем сообщение
|
||||
client.delete_message(123, msg_id);
|
||||
client.delete_messages(ChatId::new(123), vec![msg.id()], false).await.unwrap();
|
||||
|
||||
// Проверяем что удаление записалось
|
||||
assert_eq!(client.deleted_messages().len(), 1);
|
||||
assert_eq!(client.deleted_messages()[0], msg_id);
|
||||
assert_eq!(client.get_deleted_messages().len(), 1);
|
||||
assert_eq!(client.get_deleted_messages()[0].message_ids[0], msg.id());
|
||||
|
||||
// Проверяем что сообщение удалено из списка
|
||||
assert_eq!(client.get_messages(123).len(), 0);
|
||||
}
|
||||
|
||||
/// Test: Удаление нескольких сообщений
|
||||
#[test]
|
||||
fn test_delete_multiple_messages() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_delete_multiple_messages() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем 3 сообщения
|
||||
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);
|
||||
let msg1 = client.send_message(ChatId::new(123), "Message 1".to_string(), None, None).await.unwrap();
|
||||
let msg2 = client.send_message(ChatId::new(123), "Message 2".to_string(), None, None).await.unwrap();
|
||||
let msg3 = client.send_message(ChatId::new(123), "Message 3".to_string(), None, None).await.unwrap();
|
||||
|
||||
assert_eq!(client.get_messages(123).len(), 3);
|
||||
|
||||
// Удаляем первое и третье
|
||||
client.delete_message(123, msg1_id);
|
||||
client.delete_message(123, msg3_id);
|
||||
client.delete_messages(ChatId::new(123), vec![msg1.id()], false).await.unwrap();
|
||||
client.delete_messages(ChatId::new(123), vec![msg3.id()], false).await.unwrap();
|
||||
|
||||
// Проверяем историю удалений
|
||||
assert_eq!(client.deleted_messages().len(), 2);
|
||||
assert_eq!(client.deleted_messages()[0], msg1_id);
|
||||
assert_eq!(client.deleted_messages()[1], msg3_id);
|
||||
assert_eq!(client.get_deleted_messages().len(), 2);
|
||||
assert_eq!(client.get_deleted_messages()[0].message_ids[0], msg1.id());
|
||||
assert_eq!(client.get_deleted_messages()[1].message_ids[0], msg3.id());
|
||||
|
||||
// Проверяем что осталось только второе сообщение
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 1);
|
||||
assert_eq!(messages[0].id(), MessageId::new(msg2_id));
|
||||
assert_eq!(messages[0].id(), msg2.id());
|
||||
assert_eq!(messages[0].content.text, "Message 2");
|
||||
}
|
||||
|
||||
/// Test: Удаление только своих сообщений (проверка через can_be_deleted_for_all_users)
|
||||
#[test]
|
||||
fn test_can_only_delete_own_messages_for_all() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_can_only_delete_own_messages_for_all() {
|
||||
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);
|
||||
@@ -84,55 +84,55 @@ fn test_can_only_delete_own_messages_for_all() {
|
||||
}
|
||||
|
||||
/// Test: Удаление несуществующего сообщения (ничего не происходит)
|
||||
#[test]
|
||||
fn test_delete_nonexistent_message() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_delete_nonexistent_message() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
// Отправляем одно сообщение
|
||||
let msg_id = client.send_message(123, "Exists".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Exists".to_string(), None, None).await.unwrap();
|
||||
|
||||
assert_eq!(client.get_messages(123).len(), 1);
|
||||
|
||||
// Пытаемся удалить несуществующее
|
||||
client.delete_message(123, 999);
|
||||
client.delete_messages(ChatId::new(123), vec![MessageId::new(999)], false).await.unwrap();
|
||||
|
||||
// Удаление записалось в историю
|
||||
assert_eq!(client.deleted_messages().len(), 1);
|
||||
assert_eq!(client.deleted_messages()[0], 999);
|
||||
assert_eq!(client.get_deleted_messages().len(), 1);
|
||||
assert_eq!(client.get_deleted_messages()[0].message_ids[0], MessageId::new(999));
|
||||
|
||||
// Но существующее сообщение осталось
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages.len(), 1);
|
||||
assert_eq!(messages[0].id(), MessageId::new(msg_id));
|
||||
assert_eq!(messages[0].id(), msg.id());
|
||||
}
|
||||
|
||||
/// Test: Подтверждение удаления (симуляция модалки)
|
||||
/// FakeTdClient сразу удаляет, но в реальном App должна быть модалка подтверждения
|
||||
#[test]
|
||||
fn test_delete_with_confirmation_flow() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_delete_with_confirmation_flow() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
let msg_id = client.send_message(123, "To delete".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "To delete".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Шаг 1: Пользователь нажал 'd' -> показывается модалка (в App)
|
||||
// В FakeTdClient просто проверяем что сообщение ещё есть
|
||||
assert_eq!(client.get_messages(123).len(), 1);
|
||||
assert_eq!(client.deleted_messages().len(), 0);
|
||||
assert_eq!(client.get_deleted_messages().len(), 0);
|
||||
|
||||
// Шаг 2: Пользователь подтвердил 'y' -> удаляем
|
||||
client.delete_message(123, msg_id);
|
||||
client.delete_messages(ChatId::new(123), vec![msg.id()], false).await.unwrap();
|
||||
|
||||
// Проверяем что удалено
|
||||
assert_eq!(client.get_messages(123).len(), 0);
|
||||
assert_eq!(client.deleted_messages().len(), 1);
|
||||
assert_eq!(client.get_deleted_messages().len(), 1);
|
||||
}
|
||||
|
||||
/// Test: Отмена удаления (Esc) - сообщение остаётся
|
||||
#[test]
|
||||
fn test_cancel_delete_keeps_message() {
|
||||
let mut client = FakeTdClient::new();
|
||||
#[tokio::test]
|
||||
async fn test_cancel_delete_keeps_message() {
|
||||
let client = FakeTdClient::new();
|
||||
|
||||
let msg_id = client.send_message(123, "Keep me".to_string(), None);
|
||||
let msg = client.send_message(ChatId::new(123), "Keep me".to_string(), None, None).await.unwrap();
|
||||
|
||||
// Шаг 1: Пользователь нажал 'd' -> показалась модалка
|
||||
assert_eq!(client.get_messages(123).len(), 1);
|
||||
@@ -141,10 +141,10 @@ fn test_cancel_delete_keeps_message() {
|
||||
|
||||
// Проверяем что сообщение осталось
|
||||
assert_eq!(client.get_messages(123).len(), 1);
|
||||
assert_eq!(client.deleted_messages().len(), 0);
|
||||
assert_eq!(client.get_deleted_messages().len(), 0);
|
||||
|
||||
// Сообщение на месте
|
||||
let messages = client.get_messages(123);
|
||||
assert_eq!(messages[0].id(), MessageId::new(msg_id));
|
||||
assert_eq!(messages[0].id(), msg.id());
|
||||
assert_eq!(messages[0].content.text, "Keep me");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user