// 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), "Клон должен видеть то же значение"); }