docs: update roadmap - P4.11 and P4.13 complete (88% total)
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
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 <noreply@anthropic.com>
This commit is contained in:
@@ -506,51 +506,44 @@ if config.hotkeys.matches(KeyCode::Up, "up") {
|
|||||||
|
|
||||||
## Приоритет 4: Качество кода
|
## Приоритет 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
|
```rust
|
||||||
// tests/utils_test.rs
|
#[test]
|
||||||
#[cfg(test)]
|
fn test_format_timestamp_with_tz_positive_offset() {
|
||||||
mod tests {
|
let timestamp = 1640000000; // 2021-12-20 11:33:20 UTC
|
||||||
use super::*;
|
assert_eq!(format_timestamp_with_tz(timestamp, "+03:00"), "14:33");
|
||||||
|
|
||||||
#[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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// tests/config_test.rs
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_color() {
|
fn test_get_day_grouping() {
|
||||||
let config = Config::default();
|
let msg1 = 1640000000; // 2021-12-20 09:33:20
|
||||||
assert_eq!(config.parse_color("red"), Color::Red);
|
let msg2 = 1640040000; // 2021-12-20 20:40:00
|
||||||
assert_eq!(config.parse_color("invalid"), Color::White); // fallback
|
assert_eq!(get_day(msg1), get_day(msg2)); // Один день
|
||||||
}
|
|
||||||
|
|
||||||
// tests/grouping_test.rs
|
|
||||||
#[test]
|
|
||||||
fn test_message_grouping_by_date() {
|
|
||||||
// ...
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Запуск**: `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
|
```rust
|
||||||
impl Config {
|
impl Config {
|
||||||
pub fn validate(&self) -> Result<(), TeletuiError> {
|
pub fn validate(&self) -> Result<(), TeletuiError> {
|
||||||
@@ -732,11 +740,13 @@ tracing-subscriber = "0.3"
|
|||||||
- [x] P3.8 — Formatting модуль ✅
|
- [x] P3.8 — Formatting модуль ✅
|
||||||
- [x] P3.9 — Message Grouping ✅
|
- [x] P3.9 — Message Grouping ✅
|
||||||
- [x] P3.10 — Hotkey Mapping ✅
|
- [x] P3.10 — Hotkey Mapping ✅
|
||||||
- [ ] Priority 4: 1/4 задач ✅
|
- [ ] Priority 4: 3/4 задач ✅
|
||||||
|
- [x] P4.11 — Unit tests ✅
|
||||||
- [x] P4.12 — Rustdoc ✅
|
- [x] P4.12 — Rustdoc ✅
|
||||||
|
- [x] P4.13 — Config validation ✅
|
||||||
- [ ] Priority 5: 0/3 задач
|
- [ ] Priority 5: 0/3 задач
|
||||||
|
|
||||||
**Всего**: 13/17 задач (76%)
|
**Всего**: 15/17 задач (88%)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user