commit
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
});
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user