style: auto-format entire codebase with cargo fmt (stable rustfmt.toml)
Some checks failed
ci/woodpecker/pr/check Pipeline 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
Some checks failed
ci/woodpecker/pr/check Pipeline 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:
@@ -65,16 +65,14 @@ fn test_incoming_message_shows_unread_badge() {
|
||||
.last_message("Как дела?")
|
||||
.build();
|
||||
|
||||
let mut app = TestAppBuilder::new()
|
||||
.with_chat(chat)
|
||||
.build();
|
||||
let mut app = TestAppBuilder::new().with_chat(chat).build();
|
||||
|
||||
// Рендерим UI - должно быть без "(1)"
|
||||
let buffer_before = render_to_buffer(80, 24, |f| {
|
||||
tele_tui::ui::chat_list::render(f, f.area(), &mut app);
|
||||
});
|
||||
let output_before = buffer_to_string(&buffer_before);
|
||||
|
||||
|
||||
// Проверяем что нет "(1)" в первой строке чата
|
||||
assert!(!output_before.contains("(1)"), "Before: should not contain (1)");
|
||||
|
||||
@@ -87,9 +85,13 @@ fn test_incoming_message_shows_unread_badge() {
|
||||
tele_tui::ui::chat_list::render(f, f.area(), &mut app);
|
||||
});
|
||||
let output_after = buffer_to_string(&buffer_after);
|
||||
|
||||
|
||||
// Проверяем что появилось "(1)" в первой строке чата
|
||||
assert!(output_after.contains("(1)"), "After: should contain (1)\nActual output:\n{}", output_after);
|
||||
assert!(
|
||||
output_after.contains("(1)"),
|
||||
"After: should contain (1)\nActual output:\n{}",
|
||||
output_after
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -127,39 +129,44 @@ async fn test_opening_chat_clears_unread_badge() {
|
||||
tele_tui::ui::chat_list::render(f, f.area(), &mut app);
|
||||
});
|
||||
let output_before = buffer_to_string(&buffer_before);
|
||||
|
||||
|
||||
// Проверяем что есть "(3)" в списке чатов
|
||||
assert!(output_before.contains("(3)"), "Before opening: should contain (3)\nActual output:\n{}", output_before);
|
||||
assert!(
|
||||
output_before.contains("(3)"),
|
||||
"Before opening: should contain (3)\nActual output:\n{}",
|
||||
output_before
|
||||
);
|
||||
|
||||
// Симулируем открытие чата - загружаем историю
|
||||
let chat_id = ChatId::new(999);
|
||||
let loaded_messages = app.td_client.get_chat_history(chat_id, 100).await.unwrap();
|
||||
|
||||
|
||||
// Собираем ID входящих сообщений (как в реальном коде)
|
||||
let incoming_message_ids: Vec<MessageId> = loaded_messages
|
||||
.iter()
|
||||
.filter(|msg| !msg.is_outgoing())
|
||||
.map(|msg| msg.id())
|
||||
.collect();
|
||||
|
||||
|
||||
// Проверяем что нашли 3 входящих сообщения
|
||||
assert_eq!(incoming_message_ids.len(), 3, "Should have 3 incoming messages");
|
||||
|
||||
// Добавляем в очередь для отметки как прочитанные (напрямую через Mutex)
|
||||
app.td_client.pending_view_messages
|
||||
app.td_client
|
||||
.pending_view_messages
|
||||
.lock()
|
||||
.unwrap()
|
||||
.push((chat_id, incoming_message_ids));
|
||||
|
||||
|
||||
// Обрабатываем очередь (как в main loop)
|
||||
app.td_client.process_pending_view_messages().await;
|
||||
|
||||
|
||||
// В FakeTdClient это должно записаться в viewed_messages
|
||||
let viewed = app.td_client.get_viewed_messages();
|
||||
assert_eq!(viewed.len(), 1, "Should have one batch of viewed messages");
|
||||
assert_eq!(viewed[0].0, 999, "Should be for chat 999");
|
||||
assert_eq!(viewed[0].1.len(), 3, "Should have viewed 3 messages");
|
||||
|
||||
|
||||
// В реальном приложении TDLib отправит Update::ChatReadInbox
|
||||
// который обновит unread_count в чате. Симулируем это:
|
||||
app.chats[0].unread_count = 0;
|
||||
@@ -169,9 +176,13 @@ async fn test_opening_chat_clears_unread_badge() {
|
||||
tele_tui::ui::chat_list::render(f, f.area(), &mut app);
|
||||
});
|
||||
let output_after = buffer_to_string(&buffer_after);
|
||||
|
||||
|
||||
// Проверяем что "(3)" больше нет
|
||||
assert!(!output_after.contains("(3)"), "After opening: should not contain (3)\nActual output:\n{}", output_after);
|
||||
assert!(
|
||||
!output_after.contains("(3)"),
|
||||
"After opening: should not contain (3)\nActual output:\n{}",
|
||||
output_after
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -202,7 +213,7 @@ async fn test_opening_chat_loads_many_messages() {
|
||||
// Открываем чат - загружаем историю (запрашиваем 100 сообщений)
|
||||
let chat_id = ChatId::new(888);
|
||||
let loaded_messages = app.td_client.get_chat_history(chat_id, 100).await.unwrap();
|
||||
|
||||
|
||||
// Проверяем что загрузились ВСЕ 50 сообщений, а не только последние 2-3
|
||||
assert_eq!(
|
||||
loaded_messages.len(),
|
||||
@@ -244,7 +255,7 @@ async fn test_chat_history_chunked_loading() {
|
||||
// Тест 1: Загружаем 100 сообщений (больше чем 50, меньше чем 120)
|
||||
let chat_id = ChatId::new(999);
|
||||
let loaded_messages = app.td_client.get_chat_history(chat_id, 100).await.unwrap();
|
||||
|
||||
|
||||
assert_eq!(
|
||||
loaded_messages.len(),
|
||||
100,
|
||||
@@ -254,13 +265,13 @@ async fn test_chat_history_chunked_loading() {
|
||||
|
||||
// Проверяем что сообщения в правильном порядке (от старых к новым)
|
||||
assert_eq!(loaded_messages[0].text(), "Message 1");
|
||||
assert_eq!(loaded_messages[49].text(), "Message 50"); // Граница первого чанка
|
||||
assert_eq!(loaded_messages[50].text(), "Message 51"); // Начало второго чанка
|
||||
assert_eq!(loaded_messages[49].text(), "Message 50"); // Граница первого чанка
|
||||
assert_eq!(loaded_messages[50].text(), "Message 51"); // Начало второго чанка
|
||||
assert_eq!(loaded_messages[99].text(), "Message 100");
|
||||
|
||||
// Тест 2: Загружаем все 120 сообщений
|
||||
let all_messages = app.td_client.get_chat_history(chat_id, 120).await.unwrap();
|
||||
|
||||
|
||||
assert_eq!(
|
||||
all_messages.len(),
|
||||
120,
|
||||
@@ -273,7 +284,7 @@ async fn test_chat_history_chunked_loading() {
|
||||
|
||||
// Тест 3: Запрашиваем 200 сообщений, но есть только 120
|
||||
let limited_messages = app.td_client.get_chat_history(chat_id, 200).await.unwrap();
|
||||
|
||||
|
||||
assert_eq!(
|
||||
limited_messages.len(),
|
||||
120,
|
||||
@@ -307,8 +318,12 @@ async fn test_chat_history_loads_all_without_limit() {
|
||||
|
||||
// Загружаем без лимита (i32::MAX)
|
||||
let chat_id = ChatId::new(1001);
|
||||
let all = app.td_client.get_chat_history(chat_id, i32::MAX).await.unwrap();
|
||||
|
||||
let all = app
|
||||
.td_client
|
||||
.get_chat_history(chat_id, i32::MAX)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(all.len(), 200, "Should load all 200 messages without limit");
|
||||
assert_eq!(all[0].text(), "Msg 1", "First message should be oldest");
|
||||
assert_eq!(all[199].text(), "Msg 200", "Last message should be newest");
|
||||
@@ -338,25 +353,29 @@ async fn test_load_older_messages_pagination() {
|
||||
.build();
|
||||
|
||||
let chat_id = ChatId::new(1002);
|
||||
|
||||
|
||||
// Шаг 1: Загружаем только последние 30 сообщений
|
||||
// get_chat_history загружает от конца, поэтому получим сообщения 1-30
|
||||
let initial_batch = app.td_client.get_chat_history(chat_id, 30).await.unwrap();
|
||||
assert_eq!(initial_batch.len(), 30, "Should load 30 messages initially");
|
||||
assert_eq!(initial_batch[0].text(), "Msg 1", "First message should be Msg 1");
|
||||
assert_eq!(initial_batch[29].text(), "Msg 30", "Last should be Msg 30");
|
||||
|
||||
|
||||
// Шаг 2: Загружаем все 150 сообщений для проверки load_older
|
||||
let all_messages = app.td_client.get_chat_history(chat_id, 150).await.unwrap();
|
||||
assert_eq!(all_messages.len(), 150);
|
||||
|
||||
|
||||
// Имитируем ситуацию: у нас есть сообщения 101-150, хотим загрузить 51-100
|
||||
// Берем ID сообщения 101 (первое в нашем "окне")
|
||||
let msg_101_id = all_messages[100].id(); // index 100 = Msg 101
|
||||
|
||||
|
||||
// Загружаем сообщения старше 101
|
||||
let older_batch = app.td_client.load_older_messages(chat_id, msg_101_id).await.unwrap();
|
||||
|
||||
let older_batch = app
|
||||
.td_client
|
||||
.load_older_messages(chat_id, msg_101_id)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// Должны получить сообщения 1-100 (все что старше 101)
|
||||
assert_eq!(older_batch.len(), 100, "Should load 100 older messages");
|
||||
assert_eq!(older_batch[0].text(), "Msg 1", "Oldest should be Msg 1");
|
||||
@@ -473,7 +492,7 @@ fn snapshot_chat_search_mode() {
|
||||
fn snapshot_chat_with_online_status() {
|
||||
use tele_tui::tdlib::UserOnlineStatus;
|
||||
use tele_tui::types::ChatId;
|
||||
|
||||
|
||||
let chat = TestChatBuilder::new("Alice", 123)
|
||||
.last_message("Hey there!")
|
||||
.build();
|
||||
@@ -493,4 +512,3 @@ fn snapshot_chat_with_online_status() {
|
||||
let output = buffer_to_string(&buffer);
|
||||
assert_snapshot!("chat_with_online_status", output);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user