Zum Inhalt

tests/persistence.test.ts

import { describe, it, expect } from 'vitest';
import { deepMerge } from '../src/host-web/persistence';
import { DEFAULT_SCREENSAVER } from '../src/engine/data/defaults';

describe('settings forward-compat (deepMerge)', () => {
  it('an old save without `story` gets the default story', () => {
    const oldSave = { speed: 'fast', stats: { totalUptimeMs: 5 } }; // pre-Slice-3 shape
    const merged = deepMerge(structuredClone(DEFAULT_SCREENSAVER), oldSave);
    expect(merged.story).toEqual({ schema: 1, layerCounter: 0, arcsCompleted: [], endingsReached: {} });
    expect(merged.speed).toBe('fast');                    // user override preserved
    expect(merged.stats.scenesLoaded).toBe(0);            // default kept for unset stat
  });
  it('a saved `story` overrides the default', () => {
    const save = { story: { schema: 1, layerCounter: 9, arcsCompleted: ['wraith'], endingsReached: { wraith: 2 } } };
    const merged = deepMerge(structuredClone(DEFAULT_SCREENSAVER), save);
    expect(merged.story.layerCounter).toBe(9);
    expect(merged.story.arcsCompleted).toEqual(['wraith']);
  });
});