Add visual TUI test coverage

This commit is contained in:
Mikhail Kilin
2026-05-17 23:09:33 +03:00
parent 51e9cf5c10
commit ceca8ab67e
27 changed files with 3435 additions and 23 deletions

View File

@@ -4,8 +4,10 @@ mod helpers;
use helpers::app_builder::TestAppBuilder;
use helpers::snapshot_utils::{buffer_to_string, render_to_buffer};
use helpers::test_data::create_test_chat;
use helpers::test_data::{create_test_chat, TestChatBuilder, TestMessageBuilder};
use insta::assert_snapshot;
use tele_tui::accounts::AccountProfile;
use tele_tui::app::AccountSwitcherState;
use tele_tui::app::AppScreen;
use tele_tui::tdlib::AuthState;
@@ -113,3 +115,114 @@ fn snapshot_main_screen_terminal_too_small() {
let output = buffer_to_string(&buffer);
assert_snapshot!("main_screen_terminal_too_small", output);
}
#[test]
fn snapshot_main_screen_chat_list_loaded() {
let mut app = TestAppBuilder::new()
.screen(AppScreen::Main)
.with_chats(sample_chats())
.build();
let buffer = render_to_buffer(100, 30, |f| {
tele_tui::ui::render(f, &mut app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("main_screen_chat_list_loaded", output);
}
#[test]
fn snapshot_main_screen_chat_open_with_messages() {
let mut app = TestAppBuilder::new()
.screen(AppScreen::Main)
.with_chats(sample_chats())
.selected_chat(102)
.with_messages(102, sample_work_messages())
.message_input("Draft reply")
.insert_mode()
.build();
let buffer = render_to_buffer(100, 30, |f| {
tele_tui::ui::render(f, &mut app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("main_screen_chat_open_with_messages", output);
}
#[test]
fn snapshot_main_screen_chat_open_narrow_valid() {
let mut app = TestAppBuilder::new()
.screen(AppScreen::Main)
.with_chats(sample_chats())
.selected_chat(102)
.with_messages(102, sample_work_messages())
.build();
let buffer = render_to_buffer(60, 16, |f| {
tele_tui::ui::render(f, &mut app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("main_screen_chat_open_narrow_valid", output);
}
#[test]
fn snapshot_main_screen_account_switcher_overlay() {
let mut app = TestAppBuilder::new()
.screen(AppScreen::Main)
.with_chats(sample_chats())
.build();
app.current_account_name = "personal".to_string();
app.account_switcher = Some(AccountSwitcherState::SelectAccount {
accounts: vec![
AccountProfile {
name: "personal".to_string(),
display_name: "Personal".to_string(),
},
AccountProfile {
name: "work".to_string(),
display_name: "Work".to_string(),
},
],
selected_index: 1,
current_account: "personal".to_string(),
});
let buffer = render_to_buffer(100, 30, |f| {
tele_tui::ui::render(f, &mut app);
});
let output = buffer_to_string(&buffer);
assert_snapshot!("main_screen_account_switcher_overlay", output);
}
fn sample_chats() -> Vec<tele_tui::tdlib::ChatInfo> {
vec![
TestChatBuilder::new("Mom", 101)
.last_message("Dinner at 7?")
.unread_count(2)
.build(),
TestChatBuilder::new("Work Group", 102)
.last_message("Standup notes are ready")
.unread_mentions(1)
.build(),
TestChatBuilder::new("Boss", 103)
.last_message("Please review the deck")
.build(),
]
}
fn sample_work_messages() -> Vec<tele_tui::tdlib::MessageInfo> {
vec![
TestMessageBuilder::new("Morning, team", 201)
.sender("Alice")
.build(),
TestMessageBuilder::new("Standup notes are ready", 202)
.sender("Bob")
.build(),
TestMessageBuilder::new("Thanks, I will review them after lunch", 203)
.outgoing()
.build(),
]
}