SemanticScuttle/includes/js/dojox/rpc/tests/stores/JsonRestStore.js

238 lines
7.5 KiB
JavaScript
Raw Normal View History

if(!dojo._hasResource["dojox.data.tests.stores.JsonRestStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.data.tests.stores.JsonRestStore"] = true;
dojo.provide("dojox.data.tests.stores.JsonRestStore");
dojo.require("dojox.data.JsonRestStore");
dojo.require("dojo.data.api.Read");
dojo.require("dojox.rpc.Service");
dojox.data.tests.stores.JsonRestStore.error = function(t, d, errData){
// summary:
// The error callback function to be used for all of the tests.
d.errback(errData);
}
var testServices = new dojox.rpc.Service(dojo.moduleUrl("dojox.rpc.tests.resources", "test.smd"));
var jsonStore = new dojox.data.JsonRestStore({service:testServices.jsonRestStore});
doh.register("dojox.data.tests.stores.JsonRestStore",
[
{
name: "Fetch some items",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// Simple test of a basic fetch on JsonRestStore of a simple query.
var d = new doh.Deferred();
jsonStore.fetch({query:"query",
onComplete: function(items, request){
t.is(4, items.length);
d.callback(true);
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "fetch by id",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// Simple test of a basic fetch on JsonRestStore of a single item.
var d = new doh.Deferred();
jsonStore.fetch({query:"obj1",
onComplete: function(item, request){
t.is("Object 1", item.name);
t.t(jsonStore.hasAttribute(item,"name"));
t.is(jsonStore.getValues(item,"name").length,1);
t.t(jsonStore.isItem(item));
d.callback(true);
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "Modify,save, check by id",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// Fetch an item from a query, modify and save it, and check to see if it was modified correctly
var d = new doh.Deferred();
jsonStore.fetch({query:"query",
onComplete: function(items, request){
var now = new Date().getTime();
jsonStore.setValue(items[0],"updated",now);
jsonStore.setValue(items[0],"obj",{foo:'bar'});
jsonStore.setValue(items[0],"obj dup",items[0].obj);
jsonStore.setValue(items[0],"testArray",[1,2,3,4]);
jsonStore.save();
jsonStore.fetch({query:"obj1",
onComplete: function(item, request){
t.is("Object 1", item.name);
t.is(now, item.updated);
t.is("bar", item.obj.foo);
t.is(item.obj, item['obj dup']);
d.callback(true);
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "Post, delete, and put",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// append/post an item, delete it, sort the lists, resort the list, saving each time.
var d = new doh.Deferred();
jsonStore.fetch({query:"obj1",
onComplete: function(item, request){
var now = new Date().getTime();
var testArray = item.testArray;
var newObject = {"name":"new object"};
testArray.push(newObject);
jsonStore.save();
jsonStore.deleteItem(newObject,{parent:testArray});
jsonStore.save();
testArray.sort(function(obj1,obj2) { return obj1 < obj2; });
jsonStore.save();
testArray.sort(function(obj1,obj2) { return obj1 > obj2; });
jsonStore.save();
d.callback(true);
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "Revert",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// append/post an item, delete it, sort the lists, resort the list, saving each time.
var d = new doh.Deferred();
jsonStore.fetch({query:"obj1",
onComplete: function(item, request){
jsonStore.setValue(item,"name","new name");
jsonStore.setValue(item,"newProp","new value");
jsonStore.unsetAttribute(item,"updated");
t.is(jsonStore.getValue(item,"name"),"new name");
t.is(jsonStore.getValue(item,"newProp"),"new value");
t.is(jsonStore.getValue(item,"updated"),undefined);
jsonStore.revert();
t.is(jsonStore.getValue(item,"name"),"Object 1");
t.is(jsonStore.getValue(item,"newProp"),undefined);
t.t(typeof jsonStore.getValue(item,"updated") == 'number');
d.callback(true);
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "Lazy loading",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// test lazy loading
var d = new doh.Deferred();
jsonStore.fetch({query:"query",
onComplete: function(items, request){
/*var item = jsonStore.getValue(items,2); // sync lazy loading
t.is(item.name == 'Object 3');*/
jsonStore.getValue(items,3,function(item) { // async lazy loading
t.is(item.name,'Object 4');
d.callback(true);
});
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "Array manipulation",
timeout: 10000, //10 seconds.
runTest: function(t) {
// summary:
// test array manipulation
var d = new doh.Deferred();
jsonStore.fetch({query:"obj1",
onComplete: function(item, request){
var testArray = item.testArray;
testArray.reverse();
testArray.unshift(testArray.pop());
jsonStore.onSave = function(data) {
t.is(data.length,1);
d.callback(true);
jsonStore.onSave = function(){};
};
jsonStore.save();
},
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, doh, d)});
return d; //Object
}
},
{
name: "ReadAPI: Fetch_20_Streaming",
timeout: 10000, //10 seconds. Json can sometimes be slow.
runTest: function(t) {
// summary:
// fetching with paging
var d = new doh.Deferred();
var count = 0;
function onItem(item, requestObj){
t.assertTrue(typeof item == 'number');
count++;
}
function onComplete(items, request){
t.is(5, count);
t.is(null, items);
d.callback(true);
}
//Get everything...
jsonStore.fetch({
query: "bigQuery",
onBegin: null,
count: 5,
onItem: onItem,
onComplete: onComplete,
onError: dojo.partial(dojox.data.tests.stores.JsonRestStore.error, t, d)
});
return d; //Object
}
},
function testReadAPI_functionConformance(t){
// summary:
// Simple test read API conformance. Checks to see all declared functions are actual functions on the instances.
// description:
// Simple test read API conformance. Checks to see all declared functions are actual functions on the instances.
var readApi = new dojo.data.api.Read();
var passed = true;
for(i in readApi){
if(i.toString().charAt(0) !== '_')
{
var member = readApi[i];
//Check that all the 'Read' defined functions exist on the test store.
if(typeof member === "function"){
var testStoreMember = jsonStore [i];
if(!(typeof testStoreMember === "function")){
passed = false;
break;
}
}
}
}
}
]
);
}