From a177ab66c61b6b237b624307fdf02a023131cff2 Mon Sep 17 00:00:00 2001 From: Mikhail Kilin Date: Sun, 1 Feb 2026 02:02:09 +0300 Subject: [PATCH] docs: update roadmap - P4.11 and P4.13 complete (88% total) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated REFACTORING_ROADMAP.md to reflect completion of P4.11 and P4.13: **P4.11 - Unit tests**: ЗАВЕРШЕНО 100% - Added 9 unit tests in src/utils.rs - Coverage for time/date formatting functions - All edge cases tested (timezones, midnight wrap, fallback) - Total: 54 unit tests pass (was 45, +9) **P4.13 - Config validation**: ЗАВЕРШЕНО 100% - Validation was already implemented (config.rs:344-389) - Added 15 comprehensive tests for full coverage - Total: 23 config tests pass (8 existing + 15 new) **Progress**: - Priority 4: 3/4 tasks complete (75%) - Total: 15/17 tasks complete (88%) **Remaining**: - P4.14 — Async/await consistency (last Priority 4 task) - Priority 5: 0/3 tasks Co-Authored-By: Claude Sonnet 4.5 --- REFACTORING_ROADMAP.md | 90 +++++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/REFACTORING_ROADMAP.md b/REFACTORING_ROADMAP.md index b59dce4..de95c85 100644 --- a/REFACTORING_ROADMAP.md +++ b/REFACTORING_ROADMAP.md @@ -506,51 +506,44 @@ if config.hotkeys.matches(KeyCode::Up, "up") { ## Приоритет 4: Качество кода -### 11. Добавить юнит-тесты +### 11. Добавить юнит-тесты ✅ ЗАВЕРШЕНО! -**Проблема**: Нет тестов, сложно убедиться в корректности. +**Статус**: ЗАВЕРШЕНО 100% (+106 строк тестов, 2026-02-01) -**Решение**: Добавить тесты для: +**Что сделано**: +- ✅ Добавлены 9 unit тестов в `src/utils.rs` (в секции `#[cfg(test)]`) +- ✅ Покрыты все edge cases для форматирования времени +- ✅ Тестирование приватных функций через публичный API +- ✅ Все 54 unit теста проходят (было 45, +9 новых) +**Добавленные тесты**: +- `format_timestamp_with_tz` - положительный offset (+03:00) +- `format_timestamp_with_tz` - отрицательный offset (-05:00) +- `format_timestamp_with_tz` - нулевой offset (UTC) +- `format_timestamp_with_tz` - переход через полночь +- `format_timestamp_with_tz` - невалидный timezone (fallback) +- `get_day` - расчет дня из timestamp +- `get_day_grouping` - группировка сообщений по дням +- `format_datetime` - полная дата и время с MSK +- `parse_timezone_offset` - через публичный API (приватная функция) + +**Примеры**: ```rust -// tests/utils_test.rs -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_format_timestamp_with_tz() { - let timestamp = 1640000000; // 2021-12-20 09:33:20 UTC - assert_eq!( - format_timestamp_with_tz(timestamp, "+03:00"), - "12:33" - ); - } - - #[test] - fn test_parse_timezone_offset() { - assert_eq!(parse_timezone_offset("+03:00"), 3); - assert_eq!(parse_timezone_offset("-05:00"), -5); - assert_eq!(parse_timezone_offset("invalid"), 3); // fallback - } +#[test] +fn test_format_timestamp_with_tz_positive_offset() { + let timestamp = 1640000000; // 2021-12-20 11:33:20 UTC + assert_eq!(format_timestamp_with_tz(timestamp, "+03:00"), "14:33"); } -// tests/config_test.rs #[test] -fn test_parse_color() { - let config = Config::default(); - assert_eq!(config.parse_color("red"), Color::Red); - assert_eq!(config.parse_color("invalid"), Color::White); // fallback -} - -// tests/grouping_test.rs -#[test] -fn test_message_grouping_by_date() { - // ... +fn test_get_day_grouping() { + let msg1 = 1640000000; // 2021-12-20 09:33:20 + let msg2 = 1640040000; // 2021-12-20 20:40:00 + assert_eq!(get_day(msg1), get_day(msg2)); // Один день } ``` -**Запуск**: `cargo test` +**Запуск**: `cargo test --lib utils::tests` --- @@ -596,11 +589,26 @@ pub struct AuthManager { ... } --- -### 13. Config валидация +### 13. Config валидация ✅ ЗАВЕРШЕНО! -**Проблема**: Невалидные значения в конфиге молча игнорируются. +**Статус**: ЗАВЕРШЕНО 100% (+149 строк тестов, 2026-02-01) -**Решение**: Добавить валидацию: +**Что сделано**: +- ✅ Валидация уже была реализована в `config.rs:344-389` +- ✅ Вызов валидации в `Config::load():450-456` +- ✅ Добавлено 15 comprehensive тестов для полного покрытия +- ✅ Все 23 config теста проходят (8 существующих + 15 новых) + +**Добавленные тесты**: +- Валидация дефолтного конфига +- Timezone: валидный (+03:00, -05:00), невалидный (без знака) +- Цвета: все 18 стандартных ratatui цветов +- Невалидные цвета (rainbow, purple, pink) +- Case-insensitive парсинг (RED, Green, YELLOW) +- parse_color() для всех вариантов (standard, light, gray/grey) +- Fallback к White для невалидных цветов + +**Реализация**: Уже была добавлена ранее: ```rust impl Config { pub fn validate(&self) -> Result<(), TeletuiError> { @@ -732,11 +740,13 @@ tracing-subscriber = "0.3" - [x] P3.8 — Formatting модуль ✅ - [x] P3.9 — Message Grouping ✅ - [x] P3.10 — Hotkey Mapping ✅ -- [ ] Priority 4: 1/4 задач ✅ +- [ ] Priority 4: 3/4 задач ✅ + - [x] P4.11 — Unit tests ✅ - [x] P4.12 — Rustdoc ✅ + - [x] P4.13 — Config validation ✅ - [ ] Priority 5: 0/3 задач -**Всего**: 13/17 задач (76%) +**Всего**: 15/17 задач (88%) ---