Files
Torn-Training-Tracker/tests/store.test.js
T

52 lines
1.6 KiB
JavaScript

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);
});