код системы никак не переделывали, но пришлось добавить моки в тех местах где оно генерировало уникальные id объектов, чтоб id были предсказуемыми (но вроде есть способы как этого избежать, какие-то shim, но мы по старой привычке сделали).
Насчёт конечного автомата не сильно понял. Стейт это, упрощённо, 3 типа объектов: Debt, Fee, Account. Debt ожет быть отдельностоящий, может быть перемещён на Account. Fee может быть только частью Account. И операции типа "перемести Debt с/на/между Account", "добавь/удали Fee", "пришел платежь, распредели его по Debt" "пользователь решил вернуть часть товаров из debt, а оно уже частично оплачено - перераспредели деньги на другие Debt/Fee" "пользователь не платит, давайте спишем всё" "пользователь заявляет что не получил товар, поставим debt на паузу" и т.п.
Основное что проверяем это конечно цифры долга. Но и есть всякие другие поля на объектах. Ещё каждая операция создаёт какое-то количество эвентов в Kafka, их тоже валидируем (но это скорее как бонус сбоку).
Само оно никуда не ходит, это правда
я правильно улавливаю, что в тестах описывается референсная модель, потом в нее и в реальный инстанс идет флуд командами с сравнением итогового стейта, а потом это всё как-то сводится к минимальной последовательности команд для воспроизведения?