This commit is contained in:
Mikhail Kilin
2026-01-30 15:07:13 +03:00
parent 126c7482af
commit 4deb0fbe00
32 changed files with 1049 additions and 697 deletions

View File

@@ -1,11 +1,11 @@
// Test App builder
use tele_tui::app::{App, AppScreen};
use tele_tui::config::Config;
use tele_tui::tdlib::{ChatInfo, MessageInfo};
use tele_tui::tdlib::client::AuthState;
use ratatui::widgets::ListState;
use std::collections::HashMap;
use tele_tui::app::{App, AppScreen};
use tele_tui::config::Config;
use tele_tui::tdlib::client::AuthState;
use tele_tui::tdlib::{ChatInfo, MessageInfo};
/// Builder для создания тестового App
///
@@ -149,13 +149,19 @@ impl TestAppBuilder {
/// Добавить сообщение для чата
pub fn with_message(mut self, chat_id: i64, message: MessageInfo) -> Self {
self.messages.entry(chat_id).or_insert_with(Vec::new).push(message);
self.messages
.entry(chat_id)
.or_insert_with(Vec::new)
.push(message);
self
}
/// Добавить несколько сообщений для чата
pub fn with_messages(mut self, chat_id: i64, messages: Vec<MessageInfo>) -> Self {
self.messages.entry(chat_id).or_insert_with(Vec::new).extend(messages);
self.messages
.entry(chat_id)
.or_insert_with(Vec::new)
.extend(messages);
self
}
@@ -329,9 +335,7 @@ mod tests {
#[test]
fn test_builder_search_mode() {
let app = TestAppBuilder::new()
.searching("test query")
.build();
let app = TestAppBuilder::new().searching("test query").build();
assert!(app.is_searching);
assert_eq!(app.search_query, "test query");

View File

@@ -1,7 +1,7 @@
// Fake TDLib client for testing
use std::collections::HashMap;
use tele_tui::tdlib::{ChatInfo, MessageInfo, FolderInfo, NetworkState};
use tele_tui::tdlib::{ChatInfo, FolderInfo, MessageInfo, NetworkState};
/// Упрощённый mock TDLib клиента для тестов
#[derive(Clone)]
@@ -42,12 +42,7 @@ impl FakeTdClient {
Self {
chats: vec![],
messages: HashMap::new(),
folders: vec![
FolderInfo {
id: 0,
name: "All".to_string(),
},
],
folders: vec![FolderInfo { id: 0, name: "All".to_string() }],
user_names: HashMap::new(),
network_state: NetworkState::Ready,
typing_chat_id: None,
@@ -90,10 +85,7 @@ impl FakeTdClient {
/// Добавить папку
pub fn with_folder(mut self, id: i32, name: &str) -> Self {
self.folders.push(FolderInfo {
id,
name: name.to_string(),
});
self.folders.push(FolderInfo { id, name: name.to_string() });
self
}
@@ -116,10 +108,7 @@ impl FakeTdClient {
/// Получить сообщения для чата
pub fn get_messages(&self, chat_id: i64) -> Vec<MessageInfo> {
self.messages
.get(&chat_id)
.cloned()
.unwrap_or_default()
self.messages.get(&chat_id).cloned().unwrap_or_default()
}
/// Получить папки
@@ -131,11 +120,8 @@ impl FakeTdClient {
pub fn send_message(&mut self, chat_id: i64, text: String, reply_to: Option<i64>) -> i64 {
let message_id = (self.sent_messages.len() as i64) + 1000;
self.sent_messages.push(SentMessage {
chat_id,
text: text.clone(),
reply_to,
});
self.sent_messages
.push(SentMessage { chat_id, text: text.clone(), reply_to });
// Добавляем сообщение в список сообщений чата
let message = MessageInfo {
@@ -165,10 +151,8 @@ impl FakeTdClient {
/// Редактировать сообщение (мок)
pub fn edit_message(&mut self, chat_id: i64, message_id: i64, new_text: String) {
self.edited_messages.push(EditedMessage {
message_id,
new_text: new_text.clone(),
});
self.edited_messages
.push(EditedMessage { message_id, new_text: new_text.clone() });
// Обновляем сообщение в списке
if let Some(messages) = self.messages.get_mut(&chat_id) {

View File

@@ -1,9 +1,9 @@
// Snapshot testing utilities
use ratatui::backend::TestBackend;
use ratatui::Terminal;
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::Terminal;
/// Конвертирует Buffer в читаемую строку для snapshot тестов
pub fn buffer_to_string(buffer: &Buffer) -> String {
@@ -33,9 +33,7 @@ where
let backend = TestBackend::new(width, height);
let mut terminal = Terminal::new(backend).unwrap();
terminal
.draw(render_fn)
.unwrap();
terminal.draw(render_fn).unwrap();
terminal.backend().buffer().clone()
}
@@ -44,7 +42,7 @@ where
#[macro_export]
macro_rules! assert_ui_snapshot {
($name:expr, $width:expr, $height:expr, $render_fn:expr) => {{
use $crate::helpers::snapshot_utils::{render_to_buffer, buffer_to_string};
use $crate::helpers::snapshot_utils::{buffer_to_string, render_to_buffer};
let buffer = render_to_buffer($width, $height, $render_fn);
let output = buffer_to_string(&buffer);
insta::assert_snapshot!($name, output);
@@ -59,9 +57,7 @@ mod tests {
#[test]
fn test_buffer_to_string_simple() {
let buffer = render_to_buffer(10, 3, |f| {
let block = Block::default()
.borders(Borders::ALL)
.title("Hi");
let block = Block::default().borders(Borders::ALL).title("Hi");
f.render_widget(block, f.area());
});

View File

@@ -1,6 +1,6 @@
// Test data builders and fixtures
use tele_tui::tdlib::{ChatInfo, MessageInfo, ReactionInfo, ReplyInfo, ForwardInfo, ProfileInfo};
use tele_tui::tdlib::{ChatInfo, ForwardInfo, MessageInfo, ProfileInfo, ReactionInfo, ReplyInfo};
/// Builder для создания тестового чата
pub struct TestChatBuilder {
@@ -181,11 +181,8 @@ impl TestMessageBuilder {
}
pub fn reaction(mut self, emoji: &str, count: i32, chosen: bool) -> Self {
self.reactions.push(ReactionInfo {
emoji: emoji.to_string(),
count,
is_chosen: chosen,
});
self.reactions
.push(ReactionInfo { emoji: emoji.to_string(), count, is_chosen: chosen });
self
}