OneByOne & Ripli
Привет, Рипли. Слушай, я тут подумал, как бы нам переписать этот старый, запутанный процесс авторизации, который до сих пор в продакшене, и сделать из него чистое конечное состояние. Какие у тебя идеи, как организовать переходы, чтобы это было и тестируемо, и эффективно?
Конечно. Представь себе вход как дерево, где каждый узел – это состояние, а каждая ветвь – событие. Начни с трех узлов: "Ожидание", "Аутентификация" и "Ошибка".
**Ожидание**
- событие `submit(данные)` → переходим к "Аутентификация"
- событие `отмена` → остаёмся в "Ожидание"
**Аутентификация**
- событие `успех(токен)` → переходим к "Ожидание" (или "Главная")
- событие `ошибка(причина)` → переходим к "Ошибка"
**Ошибка**
- событие `повторить` → возвращаемся к "Ожидание"
- событие `забыли пароль` → запускаем процесс восстановления пароля
Используй перечисление для состояний и отображение текущего состояния → разрешённые события → следующее состояние. Храни каждую переодизацию в чистой функции, чтобы ты мог изолированно протестировать её.
Для проверки используй регулярные выражения:
```
emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
```
Проверяй данные до отправки `submit`.
Это делает поток детерминированным, тестируемым, и ты можешь заменить базовый сервис аутентификации, не трогая логику конечного автомата. Если наткнёшься на ошибку, просто "сломай" дерево в проблемном узле и запусти тест снова.