burnchart/test/Store.js

140 lines
2.7 KiB
JavaScript
Raw Normal View History

2016-01-12 13:55:48 +00:00
import { assert } from 'chai';
2016-01-21 14:55:18 +00:00
import Store from '../src/js/lib/Store.js';
2016-01-26 17:34:07 +00:00
import actions from '../src/js/actions/appActions.js';
2016-01-12 13:55:48 +00:00
2018-04-21 16:47:51 +00:00
describe('Store', () => {
it('set', done => {
2016-01-26 17:34:07 +00:00
let s = new Store();
2018-04-21 16:47:51 +00:00
2016-01-26 17:51:10 +00:00
s.set('A.B', 1); // key as a string
s.set([ 'A', 'C' ], 2); // key as an array
assert.deepEqual({ A: { B: 1, C: 2 }}, s.get());
done();
2018-04-21 16:47:51 +00:00
});
2016-01-26 17:51:10 +00:00
2018-04-21 16:47:51 +00:00
it('push', done => {
2016-01-26 17:51:10 +00:00
let s = new Store({ 'list': [ 'A' ] });
2018-04-21 16:47:51 +00:00
2016-01-26 17:51:10 +00:00
s.push('list', 'B'); // key as a string
s.push([ 'list' ], 'C'); // key as an array
assert.deepEqual({ 'list': [ 'A', 'B', 'C' ] }, s.get());
done();
2018-04-21 16:47:51 +00:00
});
2016-01-26 17:51:10 +00:00
2018-04-21 16:47:51 +00:00
it('push with init', done => {
2016-01-26 17:51:10 +00:00
let s = new Store();
2018-04-21 16:47:51 +00:00
2016-01-26 17:51:10 +00:00
s.push('list', 'A');
2018-04-21 16:47:51 +00:00
2016-01-26 17:51:10 +00:00
assert.deepEqual({ 'list': [ 'A' ] }, s.get());
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
done();
2018-04-21 16:47:51 +00:00
});
2016-01-12 13:55:48 +00:00
2018-04-21 16:47:51 +00:00
it('get', done => {
2016-01-26 17:57:33 +00:00
let s = new Store({ 'A': [ 1, 2 ], 'B': { 'C': 3 } });
assert.equal(2, s.get('A.1')); // key as a string
assert.equal(3, s.get([ 'B', 'C' ])); // key as an array
done();
2018-04-21 16:47:51 +00:00
});
2016-01-26 17:57:33 +00:00
2018-04-21 16:47:51 +00:00
it('get with callback', done => {
2016-01-26 17:57:33 +00:00
let s = new Store({ 'A': 1 });
let vals = [];
let cb = (val) => vals.push(val);
s.get('A', cb);
s.get('B', cb);
s.set('B', 2); // value provided only now
assert.deepEqual([ 1, 2 ], vals);
done();
2018-04-21 16:47:51 +00:00
});
2016-01-26 17:57:33 +00:00
2018-04-21 16:47:51 +00:00
it('setSilent', done => {
2016-01-26 17:34:07 +00:00
let s = new Store();
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
let val;
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
s.onAny(v => val = v);
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
s.set('A.B', 1, true);
s.set('A.B', 2, false);
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
assert.deepEqual({ A: { B: 2 }}, s.get());
assert.equal(1, val);
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
done();
2018-04-21 16:47:51 +00:00
});
2016-01-12 13:55:48 +00:00
2018-04-21 16:47:51 +00:00
it('assign', done => {
2016-01-26 17:34:07 +00:00
let s = new Store({ A: 1 });
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
s.set({ B: 1 });
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
assert.deepEqual({ A: 1, B: 1 }, s.get());
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
done();
2018-04-21 16:47:51 +00:00
});
2016-01-26 17:34:07 +00:00
2018-04-21 16:47:51 +00:00
it('changes', done => {
2016-01-26 17:34:07 +00:00
let s = new Store({ A: { B: { C: 1 } } });
2018-04-21 16:47:51 +00:00
2016-01-26 17:34:07 +00:00
let key;
s.onAny((v, k) => key = k);
s.set('A', { B: { C: 2 } });
assert.equal('A.B.C', key);
done();
2018-04-21 16:47:51 +00:00
});
2016-01-26 17:34:07 +00:00
2018-04-21 16:47:51 +00:00
it('cb called', done => {
2016-01-26 17:34:07 +00:00
let s = new Store();
let events = [];
actions.on('system.loading', (val) => events.push(val));
let called = false;
let cb = s.cb(() => called = true);
2016-01-26 17:51:10 +00:00
assert.equal(1, Object.keys(s._cbs).length);
2016-01-26 17:34:07 +00:00
cb();
assert.ok(called);
2016-01-26 17:51:10 +00:00
assert.equal(0, Object.keys(s._cbs).length);
assert.deepEqual([ true, false ], events);
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
done();
2018-04-21 16:47:51 +00:00
});
2016-01-12 13:55:48 +00:00
2018-04-21 16:47:51 +00:00
it('cb cancelled', done => {
2016-01-26 17:34:07 +00:00
let s = new Store();
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
let events = [];
actions.on('system.loading', (val) => events.push(val));
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
let called = false;
let cb = s.cb(() => called = true);
2016-01-26 17:51:10 +00:00
assert.equal(1, Object.keys(s._cbs).length);
2016-01-26 17:34:07 +00:00
setTimeout(cb, 10);
s.clean();
2016-01-26 17:51:10 +00:00
assert.equal(0, Object.keys(s._cbs).length);
2016-01-12 13:55:48 +00:00
2016-01-26 17:34:07 +00:00
setTimeout(() => {
assert.ok(!called);
2016-01-26 17:51:10 +00:00
assert.deepEqual([ true, false ], events);
2016-01-12 13:55:48 +00:00
done();
2016-01-26 17:34:07 +00:00
}, 20);
2018-04-21 16:47:51 +00:00
});
});