nexustate
Version:
State management with listeners
73 lines (55 loc) • 2.86 kB
JavaScript
import ShardedNexustate from './ShardedNexustate';
import { expect } from 'chai';
import { equal } from 'assert';
describe('ShardedNexustate', () => {
describe('general functionality', () => {
it('allows the user to update all persistence mechanisms', () => {
const shards = new ShardedNexustate();
let tempSaving = null;
let tempLoading = null;
const defaultShard = shards.getShard('default', { persist: true });
const originalSaveCallback = defaultShard.saveCallback;
const originalLoadCallback = defaultShard.loadCallback;
shards.setAllPersistenceFunctions(((...saving) => tempSaving = saving), ((...loading) => tempLoading = loading));
expect(defaultShard.saveCallback).to.not.equal(originalSaveCallback);
expect(defaultShard.loadCallback).to.not.equal(originalLoadCallback);
expect(tempSaving).to.equal(null);
defaultShard.setKey(['a', 'b'], 'hi', { immediatePersist: true });
expect(tempSaving).to.deep.equal(['default', { a: { b: 'hi' } }]);
});
it('allows multiple independent shards', () => {
const shards = new ShardedNexustate();
let tempSaving = null;
let tempLoading = null;
const defaultShard = shards.getShard('default', { persist: true });
shards.setAllPersistenceFunctions(
((...saving) => {
tempSaving = saving;
}),
((...loading) => {
tempLoading = loading;
}));
const tempShard = shards.getShard('temp', { persist: true });
defaultShard.setKey(['a', 'b'], 'hi', { immediatePersist: true }); // immediatePersist is important unless you want to delay
expect(tempSaving).to.deep.equal(['default', { a: { b: 'hi' } }]);
tempShard.setKey(['c', 'd'], 'bye', { immediatePersist: true }); // immediatePersist is important unless you want to delay
expect(tempSaving).to.deep.equal(['temp', { c: { d: 'bye' } }]);
});
it('loads shards using loadShards', () => {
const state = new ShardedNexustate({ saveCallback: () => {}, loadCallback: name => Promise.resolve({ name }) });
state.loadShards([
{ name: 'default', persist: true },
{ name: 'test', persist: true },
{ name: 'third', persist: false },
]).then(result => {
expect(state.getAllShards()).to.have.keys(['default', 'test', 'third']);
expect(state.getShard('test').get([])).to.deep.equal({ name: 'test' });
expect(state.getShard('default').get([])).to.deep.equal({ name: 'default' });
expect(state.getShard('third').get([])).to.deep.equal({ name: 'third' });
expect(state.getShard('test').persist).to.deep.equal(true);
expect(state.getShard('default').persist).to.deep.equal(true);
expect(state.getShard('third').persist).to.deep.equal(false);
});
});
});
});