commit
Some checks failed
CI / Check (pull_request) Has been cancelled
CI / Format (pull_request) Has been cancelled
CI / Clippy (pull_request) Has been cancelled
CI / Build (macos-latest) (pull_request) Has been cancelled
CI / Build (ubuntu-latest) (pull_request) Has been cancelled
CI / Build (windows-latest) (pull_request) Has been cancelled

This commit is contained in:
Mikhail Kilin
2026-02-02 03:18:55 +03:00
parent 9465f067fe
commit 2980e52113
3 changed files with 334 additions and 13 deletions

View File

@@ -330,6 +330,78 @@ reaction_chosen = "yellow"
reaction_other = "gray"
```
## Последние обновления (2026-02-02)
### Исправление интеграционных тестов — Проблема с TDLib в тестах ✅ (2026-02-02)
**Проблема**:
- 5 интеграционных тестов зависали более 60 секунд:
- `test_russian_keyboard_navigation`
- `test_backspace_with_cursor`
- `test_cursor_navigation_in_input`
- `test_esc_closes_chat`
- `test_home_end_in_input`
- `test_insert_char_at_cursor_position`
- Причина: тесты создавали настоящий `TdClient`, который вызывал `tdlib_rs::create_client()`
- TDLib не был инициализирован параметрами и блокировал async вызовы
- Verbose логи от TDLib загромождали вывод тестов
**Что исправлено**:
1.**Русская раскладка навигации** (src/input/main_input.rs:945):
- Исправлена ошибка: использовалась 'ц' вместо 'р' для движения вверх
- Правильно: `KeyCode::Char('р')` (русская k) для Up
2.**Timeout для send_chat_action при вводе** (src/input/main_input.rs:867-870):
```rust
let _ = tokio::time::timeout(
Duration::from_millis(100),
app.td_client.send_chat_action(ChatId::new(chat_id), ChatAction::Typing)
).await;
```
3. ✅ **Timeout для set_draft_message при закрытии чата** (src/input/main_input.rs:683-692):
```rust
let _ = tokio::time::timeout(
Duration::from_millis(100),
app.td_client.set_draft_message(chat_id, draft_text)
).await;
```
4. ✅ **Timeout для send_chat_action Cancel при отправке** (src/input/main_input.rs:592-594):
```rust
let _ = tokio::time::timeout(
Duration::from_millis(100),
app.td_client.send_chat_action(ChatId::new(chat_id), ChatAction::Cancel)
).await;
```
**Результат**:
- ✅ Все 6 тестов проходят успешно за **0.11 секунды** (вместо 60+ секунд зависания)
- ✅ Тесты стабильны и не блокируются
- ⚠️ Логи TDLib всё ещё выводятся (можно игнорировать или перенаправить stderr)
**Техническое решение**:
- Выбран **Вариант 3** (добавление timeout'ов) как временное прагматичное решение
- Timeout'ы защищают от зависания UI даже в продакшене (не критичные операции)
- Альтернатива (Dependency Injection через trait) задокументирована в `REFACTORING_ROADMAP.md` → Priority 6
**Добавлено в roadmap**:
- ✅ Создан **Priority 6: Улучшение тестируемости**
- P6.1 — Dependency Injection для TdClient
- Документированы 3 варианта решения с плюсами/минусами
- Оценка трудозатрат: 2-3 дня для trait-based DI
- Текущее состояние: Вариант 3 применён временно
**Все тесты проходят**: 196 passed (188 tests + 8 benchmarks) ✅
**Файлы изменены**:
- `src/input/main_input.rs` — добавлены 3 timeout обёртки
- `REFACTORING_ROADMAP.md` — добавлен Priority 6 с детальным анализом
- `CONTEXT.md` — обновлён контекст проекта
---
## Последние обновления (2026-02-01)
### Рефакторинг — Подготовка к разделению больших файлов (#2) ⏳ (2026-02-01)