This commit is contained in:
Mikhail Kilin
2026-01-28 11:39:21 +03:00
parent 051c4a0265
commit 68a2b7a982
56 changed files with 4424 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
# Текущий контекст проекта
## Статус: Фаза 9 — ЗАВЕРШЕНО
## Статус: Фаза 9 — ЗАВЕРШЕНО + Тестирование (19%)
### Что сделано
@@ -127,6 +127,7 @@
```
src/
├── main.rs # Точка входа, event loop, TDLib инициализация, graceful shutdown
├── lib.rs # Библиотечный интерфейс (для тестов)
├── config.rs # Конфигурация (TOML), загрузка credentials
├── app/
│ ├── mod.rs # App структура и состояние (needs_redraw флаг)
@@ -147,8 +148,42 @@ src/
└── tdlib/
├── mod.rs # Модуль экспорта (TdClient, UserOnlineStatus, NetworkState)
└── client.rs # TdClient: авторизация, чаты, сообщения, кеш, NetworkState, ReactionInfo
tests/
├── helpers/
│ ├── mod.rs # Экспорт тестовых утилит
│ ├── app_builder.rs # TestAppBuilder для создания тестовых App
│ ├── fake_tdclient.rs # FakeTdClient (mock TDLib клиент, для будущих интеграционных тестов)
│ ├── snapshot_utils.rs # Утилиты для snapshot тестов (render_to_buffer, buffer_to_string)
│ └── test_data.rs # Builders для тестовых данных (TestChatBuilder, TestMessageBuilder)
├── chat_list.rs # Snapshot тесты для списка чатов (9 тестов)
└── messages.rs # Snapshot тесты для сообщений (19 тестов)
```
### Тестирование
**Статус**: В процессе (19% завершено)
**Стратегия**: Комбо подход — 70% snapshot tests, 25% integration tests, 5% e2e smoke tests
**Инфраструктура (Фаза 0)**: ✅ Завершена
- Добавлены зависимости: `insta = "1.34"`, `tokio-test = "0.4"`
- Создан `src/lib.rs` для экспорта модулей в тесты
- Созданы test helpers:
- `TestAppBuilder` — fluent builder для создания тестовых App
- `TestChatBuilder` / `TestMessageBuilder` — builders для тестовых данных
- `FakeTdClient` — in-memory mock TDLib клиента
- `render_to_buffer` / `buffer_to_string` — утилиты для snapshot тестов
**Snapshot Tests (Фаза 1)**: 28/57 (49%)
-**1.1 Chat List** (9/10): пустой список, множественные чаты, unread, pinned, muted, mentions, selected, long title, search mode
-**1.2 Messages** (19/19): empty chat, incoming/outgoing, date separators, sender grouping, read receipts, edited, long message wrap, markdown (bold/italic/code/links/mentions/spoiler), media placeholder, reply, forwarded, reactions (single/multiple), selected message
- [ ] **1.3-1.6**: Modals, Input Field, Footer, Screens (0/29)
**Прогресс**: 28/151 тестов (19%)
Подробный план и roadmap: см. [TESTING_ROADMAP.md](TESTING_ROADMAP.md)
### Ключевые решения
1. **Неблокирующий receive**: TDLib updates приходят в отдельном потоке и передаются в main loop через `mpsc::channel`. Это позволяет UI оставаться отзывчивым.
@@ -236,9 +271,39 @@ reaction_chosen = "yellow"
reaction_other = "gray"
```
## Последние обновления (2026-01-28)
### Тестирование — Фаза 1.3 завершена
**Добавлено**:
- 📝 8 snapshot тестов для модальных окон (`tests/modals.rs`)
- 🔧 Обновлён `TestAppBuilder` с методами: `with_chats()`, `message_search()`, `forward_mode()`
- 🐛 Исправлены нестабильные date separator тесты (заменены на фиксированную дату)
- 📚 Обновлена документация тестирования
**Покрытие**: 35/151 тестов (23%)
- ✅ Chat List: 9 тестов
- ✅ Messages: 18 тестов (empty chat, incoming/outgoing, date separators, grouping, read receipts, editing, wrap, markdown, media, reply, forward, reactions, selection)
- ✅ Modals: 8 тестов (delete confirmation, emoji picker x2, profile x2, pinned message, search, forward mode)
**Все тесты проходят**: `cargo test` → 71 passed ✅
Подробности: [TESTING_PROGRESS.md](TESTING_PROGRESS.md)
## Что НЕ сделано / TODO
Все пункты Фазы 9 завершены! Можно переходить к следующей фазе разработки.
Все пункты Фазы 9 завершены! Можно переходить к следующей фазе разработки или продолжить написание тестов.
## Технический долг
См. [REFACTORING_ROADMAP.md](REFACTORING_ROADMAP.md) для детального плана рефакторинга.
Основные области для улучшения:
1. **ChatState enum** — схлопнуть boolean состояния в type-safe enum
2. **Разделение TdClient** — слишком много ответственности в одном модуле
3. **Типобезопасность** — newtype pattern для ID, error enum
4. **UI компоненты** — выделить переиспользуемые компоненты
5. **Тестирование** — добавить юнит-тесты для критичных функций
## Известные проблемы