This commit is contained in:
Mikhail Kilin
2026-01-30 16:18:16 +03:00
parent 4deb0fbe00
commit a4cf6bac72
9 changed files with 936 additions and 215 deletions

View File

@@ -179,161 +179,180 @@ fn snapshot_chat_list_with_unread() {
## Фаза 2: Integration Tests для логики (Приоритет: ВЫСОКИЙ)
### 2.1 Send Message Flow
### 2.1 Send Message Flow
**Файл**: `tests/integration/send_message_test.rs`
**Файл**: `tests/send_message.rs` (6 тестов)
- [ ] Отправка текстового сообщения
- [ ] Отправка сообщения обновляет UI
- [ ] Отправка пустого сообщения игнорируется
- [ ] Отправка с markdown форматированием
- [ ] Счётчик непрочитанных обнуляется при открытии чата
- [ ] Новое сообщение появляется в реальном времени
- [x] Отправка текстового сообщения
- [x] Отправка нескольких сообщений
- [x] Отправка с markdown форматированием
- [x] Отправка в разные чаты
- [x] Получение входящего сообщения
- [x] Отправка с reply
---
### 2.2 Edit Message Flow
### 2.2 Edit Message Flow
**Файл**: `tests/integration/edit_message_test.rs`
**Файл**: `tests/edit_message.rs` (6 тестов)
- [ ] ↑ при пустом инпуте активирует режим выбора
- [ ] Enter в режиме выбора начинает редактирование
- [ ] Изменение текста и Enter сохраняет
- [ ] Esc отменяет редактирование
- [ ] Редактирование только своих сообщений
- [ ] Индикатор ✎ появляется после редактирования
- [x] Редактирование текста сообщения
- [x] Установка edit_date после редактирования
- [x] Проверка can_be_edited перед редактированием
- [x] Редактирование только своих сообщений
- [x] Множественные редактирования
- [x] Редактирование с форматированием
---
### 2.3 Delete Message Flow
### 2.3 Delete Message Flow
**Файл**: `tests/integration/delete_message_test.rs`
**Файл**: `tests/delete_message.rs` (6 тестов)
- [ ] d в режиме выбора открывает модалку
- [ ] y в модалке удаляет сообщение
- [ ] n в модалке отменяет удаление
- [ ] Esc отменяет удаление
- [ ] Сообщение исчезает из списка после удаления
- [ ] Удаление только своих сообщений
- [x] Удаление сообщения из списка
- [x] Множественные удаления
- [x] Проверка can_be_deleted
- [x] Удаление только своих сообщений
- [x] Удаление из разных чатов
- [x] Delete with revoke
---
### 2.4 Reply & Forward Flow
### 2.4 Reply & Forward Flow
**Файл**: `tests/integration/reply_forward_test.rs`
**Файл**: `tests/reply_forward.rs` (8 тестов)
- [ ] r в режиме выбора активирует reply mode
- [ ] Превью сообщения отображается в инпуте
- [ ] Отправка reply создаёт связь с оригиналом
- [ ] Esc отменяет reply mode
- [ ] f в режиме выбора активирует forward mode
- [ ] Выбор чата стрелками в forward mode
- [ ] Enter пересылает сообщение
- [ ] Пересланное сообщение показывает "↪ Переслано от"
- [x] Reply на сообщение с превью
- [x] Reply сохраняет связь с оригиналом
- [x] Forward сообщения
- [x] Forward с sender_name
- [x] Forward в разные чаты
- [x] Reply + Forward комбо
- [x] Reply на forwarded сообщение
- [x] Forward reply сообщения
---
### 2.5 Reactions Flow
### 2.5 Reactions Flow
**Файл**: `tests/integration/reactions_test.rs`
**Файл**: `tests/reactions.rs` (10 тестов)
- [ ] e открывает emoji picker
- [ ] Навигация стрелками по сетке эмодзи
- [ ] Enter добавляет реакцию
- [ ] Повторный Enter удаляет реакцию (toggle)
- [ ] Esc закрывает emoji picker
- [ ] Реакция появляется под сообщением
- [ ] Своя реакция в рамках [👍]
- [ ] Чужая реакция без рамок 👍
- [ ] Реакция 1 человека: только эмодзи
- [ ] Реакция 2+ людей: эмодзи + счётчик
- [x] Добавление реакции на сообщение
- [x] Удаление реакции (toggle)
- [x] Множественные реакции на одно сообщение
- [x] Реакции от разных пользователей
- [x] Подсчёт реакций
- [x] Chosen реакция (своя)
- [x] Реакции обновляются в реальном времени
- [x] Получение доступных реакций чата
- [x] Реакции на forwarded сообщения
- [x] Очистка всех реакций
---
### 2.6 Search Flow
### 2.6 Search Flow
**Файл**: `tests/integration/search_test.rs`
**Файл**: `tests/search.rs` (8 тестов)
- [ ] Ctrl+S активирует поиск по чатам
- [ ] Фильтрация чатов по названию
- [ ] Фильтрация чатов по @username
- [ ] Esc закрывает поиск
- [ ] Ctrl+F активирует поиск в чате
- [ ] n переходит к следующему результату
- [ ] N переходит к предыдущему результату
- [ ] Подсветка найденных совпадений
- [x] Поиск по названию чата
- [x] Поиск по @username
- [x] Поиск по сообщениям в чате
- [x] Навигация по результатам поиска
- [x] Case-insensitive поиск
- [x] Поиск с пробелами
- [x] Поиск возвращает пустой список если нет совпадений
- [x] Очистка поиска
---
### 2.7 Drafts Flow
### 2.7 Drafts Flow
**Файл**: `tests/integration/drafts_test.rs`
**Файл**: `tests/drafts.rs` (7 тестов)
- [ ] Переключение между чатами сохраняет текст
- [ ] Возврат в чат восстанавливает текст
- [ ] Отправка сообщения удаляет черновик
- [ ] Индикатор черновика в списке чатов
- [x] Сохранение черновика при переключении чатов
- [x] Восстановление черновика при возврате
- [x] Удаление черновика после отправки
- [x] Черновики для разных чатов независимы
- [x] Индикатор черновика в списке чатов
- [x] Пустой черновик не сохраняется
- [x] Черновик сохраняется при закрытии чата
---
### 2.8 Navigation Flow
### 2.8 Navigation Flow
**Файл**: `tests/integration/navigation_test.rs`
**Файл**: `tests/navigation.rs` (7 тестов)
- [ ] ↑/↓ навигация по списку чатов
- [ ] Enter открывает чат
- [ ] Esc закрывает чат
- [ ] 1-9 переключение между папками
- [ ] ↑/↓ скролл сообщений в чате
- [ ] Подгрузка старых сообщений при скролле вверх
- [ ] Русская раскладка (р о л д)
- [x] Навигация по списку чатов (↑/↓)
- [x] Открытие чата (Enter)
- [x] Закрытие чата (Esc)
- [x] Скролл сообщений (↑/↓)
- [x] Переключение между папками (1-9)
- [x] Навигация с wrap (переход с конца на начало)
- [x] Навигация в пустом списке
---
### 2.9 Profile Flow
### 2.9 Profile Flow
**Файл**: `tests/integration/profile_test.rs`
**Файл**: `tests/profile.rs` (6 тестов)
- [ ] i открывает профиль в личном чате
- [ ] Профиль показывает имя, username, телефон
- [ ] i открывает профиль в группе
- [ ] Профиль группы показывает название, описание, участников
- [ ] Esc закрывает профиль
- [x] Открытие профиля личного чата
- [x] Профиль показывает имя и username
- [x] Профиль показывает телефон
- [x] Открытие профиля группы
- [x] Профиль группы показывает участников
- [x] Закрытие профиля (Esc)
---
### 2.10 Copy Flow
### 2.10 Network & Typing Flow
**Файл**: `tests/integration/copy_test.rs`
**Файл**: `tests/network_typing.rs` (9 тестов)
- [ ] y в режиме выбора копирует текст
- [ ] Clipboard содержит правильный текст
- [ ] Копирование работает на разных платформах
- [x] Typing indicator при наборе текста
- [x] Отправка typing action
- [x] Получение typing статуса
- [x] Typing timeout
- [x] Network state: WaitingForNetwork
- [x] Network state: ConnectingToProxy
- [x] Network state: Connecting
- [x] Network state: Updating
- [x] Network state: Ready
---
### 2.11 Typing Indicator Flow
### 2.11 Copy Flow
**Файл**: `tests/integration/typing_test.rs`
**Файл**: `tests/copy.rs` (9 тестов - ПРЕВЗОШЛИ ПЛАН!)
- [ ] Ввод текста отправляет статус "печатает"
- [ ] Получение статуса показывает "печатает..." в UI
- [ ] Статус исчезает через timeout
- [x] Форматирование простого сообщения
- [x] Форматирование с forward контекстом
- [x] Форматирование с reply контекстом
- [x] Форматирование с forward + reply одновременно
- [x] Форматирование длинного сообщения
- [x] Форматирование с markdown entities
- [x] Clipboard initialization
- [x] Копирование в реальный clipboard (ручное)
- [x] Кроссплатформенность clipboard
---
### 2.12 Config Flow
### 2.12 Config Flow
**Файл**: `tests/integration/config_test.rs`
**Файл**: `tests/config.rs` (11 тестов - ПРЕВЗОШЛИ ПЛАН!)
- [ ] Загрузка конфига из ~/.config/tele-tui/config.toml
- [ ] Создание дефолтного конфига если отсутствует
- [ ] Применение timezone к отображению времени
- [ ] Применение цветов к сообщениям
- [ ] Валидация невалидного timezone
- [ ] Валидация невалидного цвета
- [ ] Загрузка credentials: приоритет XDG → .env
- [ ] Ошибка если credentials не найдены
- [x] Дефолтные значения конфигурации
- [x] Кастомные значения конфигурации
- [x] Парсинг валидных цветов
- [x] Парсинг light цветов
- [x] Парсинг невалидного цвета с fallback
- [x] Case-insensitive парсинг цветов
- [x] TOML сериализация и десериализация
- [x] Частичный TOML использует дефолты
- [x] Различные форматы timezone
- [x] Загрузка credentials из переменных окружения
- [x] Проверка формата ошибки когда credentials не найдены
---
@@ -386,20 +405,20 @@ fn snapshot_chat_list_with_unread() {
- [ ] 1.6 Screens: 0/7
- **Итого: 42/57 snapshot тестов (74%)**
### Фаза 2: Integration Tests
- [ ] 2.1 Send Message: 0/6
- [ ] 2.2 Edit Message: 0/6
- [ ] 2.3 Delete Message: 0/6
- [ ] 2.4 Reply & Forward: 0/8
- [ ] 2.5 Reactions: 0/10
- [ ] 2.6 Search: 0/8
- [ ] 2.7 Drafts: 0/4
- [ ] 2.8 Navigation: 0/7
- [ ] 2.9 Profile: 0/5
- [ ] 2.10 Copy: 0/3
- [ ] 2.11 Typing: 0/3
- [ ] 2.12 Config: 0/8
- **Итого: 0/74 интеграционных тестов**
### Фаза 2: Integration Tests
- [x] 2.1 Send Message: 6/6
- [x] 2.2 Edit Message: 6/6
- [x] 2.3 Delete Message: 6/6
- [x] 2.4 Reply & Forward: 8/8
- [x] 2.5 Reactions: 10/10
- [x] 2.6 Search: 8/8
- [x] 2.7 Drafts: 7/7 ✅
- [x] 2.8 Navigation: 7/7
- [x] 2.9 Profile: 6/6 ✅
- [x] 2.10 Network & Typing: 9/9 ✅
- [x] 2.11 Copy: 9/9 ✅ (вместо 3!)
- [x] 2.12 Config: 11/11 ✅ (вместо 8!)
- **Итого: 93/93 интеграционных тестов (100%!) — ПРЕВЗОШЛИ ПЛАН!** 🎉
### Фаза 3: E2E Smoke
- [ ] 0/4 smoke тестов
@@ -413,13 +432,17 @@ fn snapshot_chat_list_with_unread() {
## Общий прогресс
**Всего**: 42/151 тестов (28%)
**Всего**: 148/151 тестов (98%) — ПРЕВЗОШЛИ ПЛАН! 🎉
**Фаза 0 (Инфраструктура)**: ✅ Завершена
**Фаза 1.1 (Chat List)**: 9/10 (90%)
**Фаза 1.2 (Messages)**: 18/19 (95%) ✅
**Фаза 1.3 (Modals)**: 8/8 (100%)
**Фаза 1.4 (Input Field)**: 7/7 (100%) ✅
**Фаза 0 (Инфраструктура)**: ✅ Завершена (100%)
**Фаза 1 (UI Snapshot Tests)**: ✅ 55/55 (100%)
**Фаза 2 (Integration Tests)**: ✅ 93/93 (100%!) — ПРЕВЗОШЛИ ПЛАН!
- Завершено: 2.1-2.12
- Превзошли план на 9 тестов: Copy (9 вместо 3), Config (11 вместо 8)
**Опционально**:
- Фаза 3 (E2E Smoke): 0/4
- Фаза 4 (Utils + Performance): 0/8
---