This commit is contained in:
Mikhail Kilin
2026-01-28 11:39:21 +03:00
parent 051c4a0265
commit 68a2b7a982
56 changed files with 4424 additions and 5 deletions

202
tests/modals.rs Normal file
View File

@@ -0,0 +1,202 @@
// Modals UI snapshot tests
mod helpers;
use helpers::test_data::{TestChatBuilder, TestMessageBuilder, create_test_chat, create_test_profile};
use helpers::app_builder::TestAppBuilder;
use helpers::snapshot_utils::{render_to_buffer, buffer_to_string};
use insta::assert_snapshot;
#[test]
fn snapshot_delete_confirmation_modal() {
let chat = create_test_chat("Mom", 123);
let message = TestMessageBuilder::new("Delete me", 1)
.outgoing()
.build();
let app = TestAppBuilder::new()
.with_chat(chat)
.with_message(123, message)
.selected_chat(123)
.delete_confirmation(1)
.build();
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("delete_confirmation_modal", output);
}
#[test]
fn snapshot_emoji_picker_default() {
let chat = create_test_chat("Mom", 123);
let message = TestMessageBuilder::new("React to this", 1)
.build();
let app = TestAppBuilder::new()
.with_chat(chat)
.with_message(123, message)
.selected_chat(123)
.reaction_picker()
.build();
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("emoji_picker_default", output);
}
#[test]
fn snapshot_emoji_picker_with_selection() {
let chat = create_test_chat("Mom", 123);
let message = TestMessageBuilder::new("React to this", 1)
.build();
let mut app = TestAppBuilder::new()
.with_chat(chat)
.with_message(123, message)
.selected_chat(123)
.reaction_picker()
.build();
// Выбираем 5-ю реакцию (индекс 4)
app.selected_reaction_index = 4;
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("emoji_picker_with_selection", output);
}
#[test]
fn snapshot_profile_personal_chat() {
let chat = create_test_chat("Alice", 123);
let profile = create_test_profile("Alice", 123);
let mut app = TestAppBuilder::new()
.with_chat(chat)
.selected_chat(123)
.profile_mode()
.build();
app.profile_info = Some(profile);
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("profile_personal_chat", output);
}
#[test]
fn snapshot_profile_group_chat() {
let chat = TestChatBuilder::new("Work Group", 456)
.build();
let mut profile = create_test_profile("Work Group", 456);
profile.is_group = true;
profile.chat_type = "Группа".to_string();
profile.member_count = Some(25);
profile.description = Some("Work discussion group".to_string());
let mut app = TestAppBuilder::new()
.with_chat(chat)
.selected_chat(456)
.profile_mode()
.build();
app.profile_info = Some(profile);
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("profile_group_chat", output);
}
#[test]
fn snapshot_pinned_message() {
let chat = create_test_chat("Mom", 123);
let message1 = TestMessageBuilder::new("Regular message", 1)
.build();
let pinned_msg = TestMessageBuilder::new("Important pinned message!", 2)
.build();
let mut app = TestAppBuilder::new()
.with_chat(chat)
.with_messages(123, vec![message1])
.selected_chat(123)
.build();
// Устанавливаем закреплённое сообщение
app.td_client.current_pinned_message = Some(pinned_msg);
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("pinned_message", output);
}
#[test]
fn snapshot_search_in_chat() {
let chat = create_test_chat("Mom", 123);
let msg1 = TestMessageBuilder::new("Hello world", 1)
.build();
let msg2 = TestMessageBuilder::new("World is beautiful", 2)
.build();
let msg3 = TestMessageBuilder::new("Beautiful day", 3)
.build();
let mut app = TestAppBuilder::new()
.with_chat(chat)
.with_messages(123, vec![msg1.clone(), msg2.clone(), msg3])
.selected_chat(123)
.message_search("world")
.build();
// Устанавливаем результаты поиска
app.message_search_results = vec![msg1, msg2];
app.selected_search_result_index = 0;
let buffer = render_to_buffer(80, 24, |f| {
tele_tui::ui::messages::render(f, f.area(), &app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("search_in_chat", output);
}
#[test]
fn snapshot_forward_mode() {
let chat1 = create_test_chat("Mom", 123);
let chat2 = create_test_chat("Dad", 456);
let chat3 = create_test_chat("Work Group", 789);
let message = TestMessageBuilder::new("Forward this message", 1)
.build();
let mut app = TestAppBuilder::new()
.with_chats(vec![chat1.clone(), chat2, chat3])
.with_message(123, message)
.selected_chat(123)
.forward_mode(1)
.build();
let buffer = render_to_buffer(80, 24, |f| {
// В forward mode показывается chat_list для выбора чата
tele_tui::ui::chat_list::render(f, f.area(), &mut app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("forward_mode", output);
}