import { test } from 'node:test'; import assert from 'node:assert/strict'; import { Store } from '../src/store.js'; import { createLocalStorage } from './localstorage-shim.js'; function freshStore() { return new Store({ storage: createLocalStorage() }); } test('Store: starts empty', () => { const s = freshStore(); assert.equal(s.getTarget('strength'), null); }); test('Store: setTarget validates via parseTarget', () => { const s = freshStore(); assert.equal(s.setTarget('strength', '25M'), true); assert.equal(s.getTarget('strength'), 25_000_000); }); test('Store: setTarget rejects invalid and keeps previous', () => { const s = freshStore(); s.setTarget('strength', 25_000_000); assert.equal(s.setTarget('strength', 'abc'), false); assert.equal(s.getTarget('strength'), 25_000_000); }); test('Store: targets are per-attribute', () => { const s = freshStore(); s.setTarget('strength', 25_000_000); s.setTarget('speed', 50_000_000); assert.equal(s.getTarget('strength'), 25_000_000); assert.equal(s.getTarget('speed'), 50_000_000); }); test('Store: persists across instances via storage', () => { const storage = createLocalStorage(); const a = new Store({ storage }); a.setTarget('strength', 25_000_000); const b = new Store({ storage }); assert.equal(b.getTarget('strength'), 25_000_000); }); test('Store: corrupted JSON is wiped with a warning', () => { const storage = createLocalStorage(); storage.setItem('tat.targets', '{not json'); const warnings = []; const s = new Store({ storage, onWarn: (m) => warnings.push(m) }); assert.equal(s.getTarget('strength'), null); assert.equal(warnings.length, 1); });