can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
95 lines (93 loc) • 2.5 kB
JavaScript
define(["doh", "dojo/store/Memory", "dojo/store/Cache"], function(doh, Memory, Cache){
var masterStore = new Memory({
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}
]
});
var cachingStore = new Memory();
var options = {};
var store = Cache(masterStore, cachingStore, options);
doh.register("dojo.tests.store.Cache",
[
function testGet(t){
t.is(store.get(1).name, "one");
t.is(cachingStore.get(1).name, "one"); // second one should be cached
t.is(store.get(1).name, "one");
t.is(store.get(4).name, "four");
t.is(cachingStore.get(4).name, "four");
t.is(store.get(4).name, "four");
},
function testQuery(t){
options.isLoaded = function(){ return false;};
t.is(store.query({prime: true}).length, 3);
t.is(store.query({even: true})[1].name, "four");
t.is(cachingStore.get(3), undefined);
options.isLoaded = function(){ return true;};
t.is(store.query({prime: true}).length, 3);
t.is(cachingStore.get(3).name, "three");
},
function testQueryWithSort(t){
t.is(store.query({prime: true}, {sort:[{attribute:"name"}]}).length, 3);
t.is(store.query({even: true}, {sort:[{attribute:"name"}]})[1].name, "two");
},
function testPutUpdate(t){
var four = store.get(4);
four.square = true;
store.put(four);
four = store.get(4);
t.t(four.square);
four = cachingStore.get(4);
t.t(four.square);
four = masterStore.get(4);
t.t(four.square);
},
function testPutNew(t){
store.put({
id: 6,
perfect: true
});
t.t(store.get(6).perfect);
t.t(cachingStore.get(6).perfect);
t.t(masterStore.get(6).perfect);
},
function testAddDuplicate(t){
var threw;
try{
store.add({
id: 6,
perfect: true
});
}catch(e){
threw = true;
}
t.t(threw);
},
function testAddNew(t){
store.add({
id: 7,
prime: true
});
t.t(store.get(7).prime);
t.t(cachingStore.get(7).prime);
t.t(masterStore.get(7).prime);
},
function testResultsFromMaster(t){
var originalAdd = masterStore.add;
masterStore.add = function(object){
return {
test: "value"
};
};
t.is(store.add({
id: 7,
prop: "doesn't matter"
}).test, "value");
masterStore.add = originalAdd;
}
]
);
});