dojo
Version:
Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.
226 lines (182 loc) • 5.78 kB
JavaScript
define([
'intern!object',
'intern/chai!assert',
'dojo/Deferred',
'dojo/_base/lang',
'dojo/_base/array',
'./support/xhrStub',
'require',
'sinon'
], function (registerSuite, assert, Deferred, lang, array, xhrStub, require, sinon) {
var globalHeaders = {
'test-global-header-a': true,
'test-global-header-b': 'yes'
};
var requestHeaders = {
'test-local-header-a': true,
'test-local-header-b': 'yes',
'test-override': 'overridden'
};
var store;
var JsonRest;
function assertHeaders(xhrHeaders) {
var expectedHeaders = Array.prototype.slice.call(arguments, 1);
expectedHeaders.push(globalHeaders);
array.forEach(expectedHeaders, function (headers) {
for (var key in headers) {
if (headers.hasOwnProperty(key)) {
assert.propertyVal(xhrHeaders, key, headers[key]);
}
}
});
}
registerSuite({
name: 'dojo/store/JsonRest',
setup: function () {
var dfd = new Deferred();
require({
map: {
'testing/store/JsonRest': {
'testing/_base/xhr': require.toAbsMid('./support/xhrStub')
}
}
}, [ 'testing/store/JsonRest' ], function (_JsonRest) {
JsonRest = _JsonRest;
dfd.resolve();
});
return dfd.promise;
},
beforeEach: function () {
xhrStub.reset();
xhrStub.objectToQuery = sinon.stub();
store = new JsonRest({
target: require.toUrl('dojo/tests/store/x.y').match(/(.+)x\.y$/)[1],
headers: lang.mixin({ 'test-override': false }, globalHeaders)
});
},
'.get': {
beforeEach: function () {
var data = {
id: 'node1.1',
name: 'node1.1',
someProperty: 'somePropertyA1',
children: [
{ $ref: 'node1.1.1', name: 'node1.1.1' },
{ $ref: 'node1.1.2', name: 'node1.1.2' }
]
};
var dfd = new Deferred();
dfd.resolve(data);
xhrStub.returns(dfd);
},
test: function () {
var dfd = this.async();
var expectedName = 'node1.1';
store.get(expectedName).then(dfd.callback(function (object) {
assert.equal(object.name, expectedName);
assert.equal(object.someProperty, 'somePropertyA1');
}), lang.hitch(dfd, 'reject'));
},
'headers provided as object': function () {
var xhrOptions;
store.get('destinationUrl', requestHeaders);
xhrOptions = xhrStub.lastCall.args[1];
assertHeaders(xhrOptions.headers, requestHeaders);
},
'headers provided in options': function () {
var xhrOptions;
store.get('destinationUrl', { headers: requestHeaders });
xhrOptions = xhrStub.lastCall.args[1];
assertHeaders(xhrOptions.headers, requestHeaders);
}
},
'.query': {
beforeEach: function () {
var data = [
{ id: 'node1', name: 'node1', someProperty: 'somePropertyA', children: [
{ $ref: 'node1.1', name: 'node1.1', children: true },
{ $ref: 'node1.2', name: 'node1.2' }
] },
{ id: 'node2', name: 'node2', someProperty: 'somePropertyB' },
{ id: 'node3', name: 'node3', someProperty: 'somePropertyC' },
{ id: 'node4', name: 'node4', someProperty: 'somePropertyA' },
{ id: 'node5', name: 'node5', someProperty: 'somePropertyB' }
];
var dfd = new Deferred();
dfd.resolve(data);
xhrStub.returns(dfd);
},
test: function () {
var dfd = this.async();
store.query('treeTestRoot').then(dfd.callback(function (results) {
var object = results[0];
assert.equal(object.name, 'node1');
assert.equal(object.someProperty, 'somePropertyA');
}), lang.hitch(dfd, 'reject'));
},
'null query': function () {
var dfd = this.async();
store.query().then(dfd.callback(function (results) {
var object = results[0];
assert.equal(object.name, 'node1');
assert.equal(object.someProperty, 'somePropertyA');
}), lang.hitch(dfd, 'reject'));
},
'result iteration': function () {
var dfd = this.async();
store.query('treeTestRoot').forEach(function (object, index) {
var expectedName = 'node' + (index + 1);
assert.equal(object.name, expectedName);
}).then(lang.hitch(dfd, 'resolve'), lang.hitch(dfd, 'reject'));
},
'headers provided in options with range elements': function () {
var expectedRangeHeaders = { 'X-Range': 'items=20-61', 'Range': 'items=20-61' };
var xhrOptions;
store.query({}, { headers: requestHeaders, start: 20, count: 42 });
xhrOptions = xhrStub.lastCall.args[1];
assertHeaders(xhrOptions.headers, requestHeaders, expectedRangeHeaders);
}
},
'.remove': {
'headers provied in options': function () {
var xhrOptions;
store.remove('destinationUrl', { headers: requestHeaders });
xhrOptions = xhrStub.lastCall.args[1];
assertHeaders(xhrOptions.headers, requestHeaders);
}
},
'.put': {
'headers provided in options': function () {
var xhrOptions;
store.put({}, { headers: requestHeaders });
xhrOptions = xhrStub.lastCall.args[1];
assertHeaders(xhrOptions.headers, requestHeaders);
}
},
'.add': {
'headers provided in options': function () {
var xhrOptions;
store.add({}, { headers: requestHeaders });
xhrOptions = xhrStub.lastCall.args[1];
assertHeaders(xhrOptions.headers, requestHeaders);
}
},
'._getTarget': {
'without slash': function () {
store.target = store.target.slice(0, -1);
assert.equal(store.target + '/foo', store._getTarget('foo'));
},
'with slash': function () {
assert.equal(store.target + 'foo', store._getTarget('foo'));
},
'with equals': function () {
store.target = store.target.slice(0, -1) + '=';
assert.equal(store.target + 'foo', store._getTarget('foo'));
}
},
teardown: function () {
// prevent accidental reuse after test completion
xhrStub.throws(new Error('this is a stub function'));
}
});
});