Перейти к содержанию

Ручная проверка сохранений

Категория задачи: feature. Поведение не проверено. Перед проверками сохранить отдельную копию всего каталога Application.persistentDataPath; использовать отдельный тестовый профиль. Примеры здесь не являются реальными сохранениями пользователя.

v1-input.json — вход миграции. v2-migrated.json — точный результат преобразования до записи. Фиксация после загрузки даст revision 8 и текущее UTC-время. Успешная последующая загрузка сцены даст revision 9. Значения неизвестных полей должны совпадать с исходными; порядок JSON-полей несущественен. Миграционная копия должна содержать исходную версию 1.

Изменения core: старый LocationSaveSystem заменён на ProgressSaveSystem, чтобы записывать единый профиль целиком; FlowSystem загружает профиль до сцены, сохраняет его после загрузки и обрабатывает ошибки. GameProgress — единственный сериализуемый класс данных. Сцены и prefab не изменялись в этой задаче. Сторонние накопленные изменения workspace не относятся к задаче.

Все пункты ниже не проверены:

  • Новый тестовый каталог без следов сохранения: Boot сразу открывает Location01, появляется progress.json версии 2, playerId заполнен, revision положительный. Меню открывается по кнопке, закрытие сохраняет сцену и восстанавливает скорость игры.
  • Перейти в Location08, закрыть и запустить игру: сразу открывается Location08; playerId прежний, revision растёт. Открытие/закрытие меню не меняет currentLocationId.
  • Поместить v1-input.json как progress.json в изолированный каталог: открывается Location08, создаётся неизменная pre-migration копия, неизвестные поля/ID, настройки и группа эксперимента сохранены. Перезапуск версии 2 не повторяет миграцию.
  • Версия 1 без дополнительных полей: контейнер progress после переноса исчезает, локация и ID игрока сохранены. При конфликте корневого и вложенного currentLocationId файл не перезаписывается.
  • Повредить только основной файл при корректном backup: восстановить backup, следующая запись архивирует повреждённый основной отдельно и сохраняет исправный backup. Полный корректный tmp с большим revision того же игрока выбирается первым.
  • Оборвать все три кандидата, убрать saveVersion либо указать неподдерживаемую старую версию: экран ошибки, исходники не изменяются, чистый профиль не создаётся. После исправления файла кнопка повтора повторяет чтение.
  • Указать saveVersion 999 в основном, tmp или backup: запуск блокируется, ни один кандидат не перезаписывается. Разные playerId у корректных кандидатов тоже блокируют запись.
  • Указать отсутствующий в сборке currentLocationId: нет сброса на Location01 и перезаписи локации.
  • Заблокировать запись/убрать место: revision в памяти не увеличивается, успешная запись не заявляется, состояние удерживается. После устранения ошибки повтор записи возвращает игру к HUD без повторной загрузки сцены.
  • Уход приложения в фон и выход сохраняют весь профиль; возвращение из фона и меню сохраняет прежнюю локацию и паузу. Ошибка записи из HUD/меню показывает повтор; после успешного повтора восстанавливается исходный экран и прежняя скорость времени.
  • На целевых платформах прервать запись до/после flush и атомарной замены: основной/backup/tmp дают восстановимый профиль, миграционная копия не теряется. Проверить поддержку File.Replace, отсутствие потерь и повторной миграции.

При реализации новых мета-фич дополнить модель, миграцию и примеры реальными данными, проверкой согласованности награды/списания и отметок операции. Сейчас игровые награды, владение инвентарём и покупки ещё не реализованы.