control-freak-ide/Code/client/build/dgrid/dstore/tests/Cache.js.consoleStripped.js
plastic-hub-dev-node-saturn 538369cff7 latest
2021-05-12 18:35:18 +02:00

233 lines
6.8 KiB
JavaScript

define("dstore/tests/Cache", [
'intern!object',
'intern/chai!assert',
'dojo/Deferred',
'dojo/when',
'dojo/json',
'dojo/aspect',
'dojo/_base/declare',
'dstore/Store',
'dstore/Memory',
'dstore/Request',
'./mockRequest',
'dstore/Cache'
], function (registerSuite, assert, Deferred, when, JSON, aspect, declare, Store, Memory, Request, mockRequest, Cache) {
/* jshint newcap: false */
var masterFetchCalled;
var Master = declare(Memory, {
fetch: function () {
masterFetchCalled = true;
return this.inherited(arguments);
}
});
function makeDeferred(){
return function () {
var result = this.inherited(arguments);
var deferred = new Deferred();
setTimeout(function () {
// Dojo's deferred resolve doesn't properly defer promises
when(result, function (result) {
deferred.resolve(result);
});
});
return deferred.promise;
};
}
var AsyncMemory = declare(Memory, {
fetch: makeDeferred(),
get: makeDeferred(),
put: makeDeferred(),
remove: makeDeferred()
});
var AsyncMaster = declare([AsyncMemory, Master], {});
function createTests(name, Master, cachingStore, createAfter){
var store;
return {
setup: function () {
var mixins = [Master];
if (!createAfter) {
mixins.push(Cache);
}
store = new declare(mixins)({
cachingStore: cachingStore,
data: [
{id: 1, name: 'one', prime: false},
{id: 2, name: 'two', even: true, prime: true},
{id: 3, name: 'three', prime: true},
{id: 4, name: 'four', even: true, prime: false},
{id: 5, name: 'five', prime: true}
]
});
if (createAfter) {
store = Cache.create(store, {
cachingStore: cachingStore
});
}
},
name: name,
'get': function () {
return when(store.get(1)).then(function (object) {
assert.strictEqual(object.name, 'one');
return cachingStore.get(1);
}).then(function (object) {
assert.strictEqual(object.name, 'one'); // second one should be cached
return store.get(1);
}).then(function (object) {
assert.strictEqual(object.name, 'one');
return store.get(4);
}).then(function (object) {
assert.strictEqual(object.name, 'four');
return cachingStore.get(4);
}).then(function (object) {
assert.strictEqual(object.name, 'four');
return store.get(4);
}).then(function (object) {
assert.strictEqual(object.name, 'four');
});
},
'filter': function () {
store.isLoaded = store.canCacheQuery = function () {
return false;
};
masterFetchCalled = false;
var collection = store.filter({prime: true});
return when(collection.fetch()).then(function (results) {
assert.isTrue(masterFetchCalled);
assert.strictEqual(results.length, 3);
return collection.cachingStore.get(3);
}).then(function (result) {
assert.strictEqual(result, undefined);
collection = store.filter({even: true});
masterFetchCalled = false;
collection.isLoaded = store.canCacheQuery = function () {
return true;
};
return collection.fetch();
}).then(function (results) {
assert.isTrue(masterFetchCalled);
assert.strictEqual(results[1].name, 'four');
collection.isValidFetchCache = true;
masterFetchCalled = false;
return collection.fetch();
}).then(function (results) {
assert.strictEqual(results.length, 2);
assert.isFalse(masterFetchCalled);
return store.put({id: 6, name: 'six', even: true});
}).then(function () {
masterFetchCalled = false;
return collection.fetch();
}).then(function (results) {
assert.isFalse(masterFetchCalled);
assert.strictEqual(results.length, 3);
store.remove(6);
store.isValidFetchCache = false;
return collection.cachingStore.get(3);
});
},
'filter with sort': function () {
return when(store.filter({prime: true}).sort('name').fetch()).then(function (results) {
assert.strictEqual(results.length, 3);
return store.filter({even: true}).sort('name').fetch();
}).then(function (results) {
assert.strictEqual(results[1].name, 'two');
});
},
'put update': function () {
return when(store.get(4)).then(function (four) {
four.square = true;
return store.put(four);
}).then(function () {
return store.get(4);
}).then(function (four) {
assert.isTrue(four.square);
return cachingStore.get(4);
}).then(function (four) {
assert.isTrue(four.square);
return store.get(4);
}).then(function (four) {
assert.isTrue(four.square);
});
},
'put new': function () {
return when(store.put({
id: 6,
perfect: true
})).then(function () {
return store.get(6);
}).then(function (six) {
assert.isTrue(six.perfect);
return cachingStore.get(6);
}).then(function (six) {
assert.isTrue(six.perfect);
});
},
'add duplicate': function () {
return when(store.add({
id: 6,
perfect: true
})).then(function () {
assert.fail('Should not succeed');
}, function () {
// successfully rejected
});
},
'add new': function () {
return when(store.add({
id: 7,
prime: true
})).then(function () {
return store.get(7);
}).then(function (seven) {
assert.isTrue(seven.prime);
return cachingStore.get(7);
}).then(function (seven) {
assert.isTrue(seven.prime);
});
},
'cached filtered data from all': function () {
store.isValidFetchCache = true;
delete store.isLoaded;
return when(store.fetch()).then(function () { // should result in everything being cached
masterFetchCalled = false;
return store.filter({prime: true}).fetch();
}).then(function (results) {
assert.strictEqual(results.length, 4);
assert.isFalse(masterFetchCalled);
});
},
'defaults to querier factories of the cachingStore': function () {
var store = new Store();
assert.isUndefined(store._getQuerierFactory('filter'));
var expectedQuerier = function () {};
var cachedStore = Cache.create(store, {
cachingStore: new Memory({
_createFilterQuerier: function () {
return expectedQuerier;
}
})
});
var cachedStoreQuerierFactory = cachedStore._getQuerierFactory('filter');
var cachingStoreQuerierFactory = cachedStore.cachingStore._getQuerierFactory('filter');
assert.strictEqual(cachedStoreQuerierFactory(), expectedQuerier);
assert.strictEqual(cachedStoreQuerierFactory(), cachingStoreQuerierFactory());
}
};
}
registerSuite(createTests('dstore Cache', Master, new Memory()));
registerSuite(createTests('dstore create Cache from instance', Master, new Memory(), true));
registerSuite(createTests('dstore Cache with async Master', AsyncMaster, new Memory()));
registerSuite(createTests('dstore Cache with both async', AsyncMaster, new AsyncMemory()));
});