This commit is contained in:
Mikhail Kilin
2026-01-31 23:02:53 +03:00
parent af3c36b9a1
commit c5896b7f14
17 changed files with 1899 additions and 567 deletions

81
tests/e2e_smoke.rs Normal file
View File

@@ -0,0 +1,81 @@
// E2E Smoke tests для базовых сценариев запуска приложения
use tele_tui::tdlib::NetworkState;
/// Тест: Приложение запускается без краша
/// Проверяем что базовые структуры создаются корректно
#[tokio::test]
async fn test_app_starts_without_crash() {
// Проверяем что NetworkState enum работает корректно
let states = vec![
NetworkState::Ready,
NetworkState::WaitingForNetwork,
NetworkState::Connecting,
NetworkState::ConnectingToProxy,
NetworkState::Updating,
];
for state in states {
// Просто проверяем что состояния создаются без паники
let _text = match state {
NetworkState::Ready => "Ready",
NetworkState::WaitingForNetwork => "Waiting for network",
NetworkState::Connecting => "Connecting",
NetworkState::ConnectingToProxy => "Connecting to proxy",
NetworkState::Updating => "Updating",
};
}
}
/// Тест: Проверка минимального размера терминала
#[test]
fn test_minimum_terminal_size() {
const MIN_WIDTH: u16 = 80;
const MIN_HEIGHT: u16 = 20;
// Проверяем что константы установлены разумно
assert!(MIN_WIDTH >= 80, "Минимальная ширина должна быть >= 80");
assert!(MIN_HEIGHT >= 20, "Минимальная высота должна быть >= 20");
// Проверяем граничные случаи
let too_small_width = MIN_WIDTH - 1;
let too_small_height = MIN_HEIGHT - 1;
assert!(too_small_width < MIN_WIDTH);
assert!(too_small_height < MIN_HEIGHT);
}
/// Тест: Базовые константы приложения
#[test]
fn test_app_constants() {
use tele_tui::constants::*;
// Проверяем что лимиты установлены
assert!(MAX_MESSAGES_IN_CHAT > 0, "Лимит сообщений должен быть > 0");
assert!(MAX_CHATS > 0, "Лимит чатов должен быть > 0");
assert!(MAX_USER_CACHE_SIZE > 0, "Размер кэша пользователей должен быть > 0");
// Проверяем что лимиты разумные
assert!(MAX_MESSAGES_IN_CHAT <= 1000, "Слишком большой лимит сообщений");
assert!(MAX_CHATS <= 500, "Слишком большой лимит чатов");
}
/// Тест: Graceful shutdown флаг
#[test]
fn test_shutdown_flag() {
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
let shutdown = Arc::new(AtomicBool::new(false));
// Проверяем начальное состояние
assert!(!shutdown.load(Ordering::Relaxed), "Флаг должен быть false при создании");
// Проверяем установку флага
shutdown.store(true, Ordering::Relaxed);
assert!(shutdown.load(Ordering::Relaxed), "Флаг должен быть true после установки");
// Проверяем клонирование Arc
let shutdown_clone = Arc::clone(&shutdown);
assert!(shutdown_clone.load(Ordering::Relaxed), "Клон должен видеть то же значение");
}