falcor
Version:
A JavaScript library for efficient data fetching.
78 lines (73 loc) • 2.64 kB
JavaScript
var falcor = require("./../../../lib/");
var Model = falcor.Model;
var noOp = function() {};
var LocalDataSource = require('../../data/LocalDataSource');
var cacheGenerator = require('./../../CacheGenerator');
var strip = require('./../../cleanData').stripDerefAndVersionKeys;
var toObservable = require('../../toObs');
function Cache() {
return cacheGenerator(0, 50);
}
function M() {
return cacheGenerator(0, 1);
}
describe('DataSource and Deref', function() {
it('should get a value from from dataSource when bound.', function(done) {
var model = new Model({cache: M(), source: new LocalDataSource(Cache())});
model._root.unsafeMode = true;
var onNext = jest.fn();
toObservable(model.
get(['lolomo', 0, 0, 'item', 'title'])).
flatMap(function(x) {
return model.
deref(x.json.lolomo[0]).
get([1, 'item', 'title']);
}).
doAction(onNext).
doAction(noOp, noOp, function() {
expect(onNext).toHaveBeenCalledTimes(1);
expect(strip(onNext.mock.calls[0][0])).toEqual({
json: {
1: {
item: {
title: 'Video 1'
}
}
}
});
}).
subscribe(noOp, done, done);
});
it('should get a value from from dataSource after cache purge.', function(done) {
var model = new Model({cache: M(), source: new LocalDataSource(Cache())});
model._root.unsafeMode = true;
var onNext = jest.fn();
toObservable(model.
get(['lolomo', 0, 0, 'item', 'title'])).
map(function(x) {
return model.
deref(x.json.lolomo[0]);
}).
doAction(function() {
model.setCache({});
}).
flatMap(function(rowModel) {
return rowModel.
get([1, 'item', 'title']);
}).
doAction(onNext).
doAction(noOp, noOp, function() {
expect(onNext).toHaveBeenCalledTimes(1);
expect(strip(onNext.mock.calls[0][0])).toEqual({
json: {
1: {
item: {
title: 'Video 1'
}
}
}
});
}).
subscribe(noOp, done, done);
});
});