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
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:
72
CONTEXT.md
72
CONTEXT.md
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user