mirror of
https://github.com/wekan/wekan.git
synced 2026-02-20 23:14:07 +01:00
- Clone @wekanteam/meteor-reactive-cache to npm-packages/ - Add .meteorignore to exclude npm-packages from Meteor - Update package.json to use local file path This allows direct modification of the package for Meteor 3.0 async migration while maintaining publishability to npm.
89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
/* global describe it */
|
|
import chai from 'chai';
|
|
import { ReactiveCache } from 'meteor-reactive-cache';
|
|
import { Tracker } from 'meteor/tracker';
|
|
import isEqual from 'lodash.isequal';
|
|
|
|
describe('ReactiveCache', () => {
|
|
it('should be reactive', () => {
|
|
const reactiveCache = new ReactiveCache();
|
|
|
|
let runs = 0;
|
|
Tracker.autorun(() => {
|
|
runs += 1;
|
|
const value = reactiveCache.get('foo'); // eslint-disable-line
|
|
});
|
|
|
|
chai.assert.equal(typeof reactiveCache.get('foo'), 'undefined');
|
|
chai.assert.equal(runs, 1);
|
|
|
|
reactiveCache.set('foo', 'bar');
|
|
Tracker.flush({ _throwFirstError: true });
|
|
chai.assert.equal(reactiveCache.get('foo'), 'bar');
|
|
chai.assert.equal(runs, 2);
|
|
|
|
reactiveCache.set('foo', 'bar');
|
|
Tracker.flush({ _throwFirstError: true });
|
|
chai.assert.equal(reactiveCache.get('foo'), 'bar');
|
|
chai.assert.equal(runs, 2);
|
|
|
|
reactiveCache.del('foo');
|
|
Tracker.flush({ _throwFirstError: true });
|
|
chai.assert.equal(typeof reactiveCache.get('foo'), 'undefined');
|
|
chai.assert.equal(runs, 3);
|
|
});
|
|
|
|
it('should be reactive with custom compare', () => {
|
|
const reactiveCache = new ReactiveCache();
|
|
const reactiveObjCache = new ReactiveCache((a, b) => isEqual(a, b));
|
|
|
|
reactiveCache.set('foo', { test: true });
|
|
reactiveObjCache.set('foo', { test: true });
|
|
|
|
let runs = 0;
|
|
Tracker.autorun(() => {
|
|
runs += 1;
|
|
const value = reactiveCache.get('foo'); // eslint-disable-line
|
|
});
|
|
|
|
let runsObj = 0;
|
|
Tracker.autorun(() => {
|
|
runsObj += 1;
|
|
const value = reactiveObjCache.get('foo'); // eslint-disable-line
|
|
});
|
|
|
|
chai.assert.equal(runs, 1);
|
|
chai.assert.equal(runsObj, 1);
|
|
|
|
reactiveCache.set('foo', { test: true });
|
|
reactiveObjCache.set('foo', { test: true });
|
|
Tracker.flush({ _throwFirstError: true });
|
|
|
|
chai.assert.equal(runs, 2);
|
|
chai.assert.equal(runsObj, 1);
|
|
});
|
|
|
|
it('gets invalidated if computation stops', (done) => {
|
|
const reactiveCache = new ReactiveCache();
|
|
|
|
let runs = 0;
|
|
const computation = Tracker.autorun(() => {
|
|
runs += 1;
|
|
const value = reactiveCache.get('foo'); // eslint-disable-line
|
|
});
|
|
|
|
chai.assert.equal(typeof reactiveCache.get('foo'), 'undefined');
|
|
chai.assert.equal(runs, 1);
|
|
|
|
reactiveCache.set('foo', 'bar');
|
|
Tracker.flush({ _throwFirstError: true });
|
|
chai.assert.equal(reactiveCache.get('foo'), 'bar');
|
|
chai.assert.equal(runs, 2);
|
|
|
|
computation.stop();
|
|
chai.assert.equal(typeof reactiveCache.get('foo'), 'undefined');
|
|
setTimeout(() => {
|
|
done();
|
|
}, 200);
|
|
});
|
|
});
|