jive-sdk
Version:
Node.js SDK for Jive Software to assist with the development of add-ons
392 lines (333 loc) • 13.4 kB
JavaScript
var q = require('q');
var assert = require('assert');
exports.testSave = function(testUtils, persistence ) {
var deferred = q.defer();
var obj = {
'data' : testUtils.guid()
};
try {
persistence.save(testUtils.guid(), testUtils.guid(), obj ).then( function(saved) {
if ( !saved ) {
deferred.reject(new Error('Did not save object'));
}
if ( saved['data'] !== obj['data'] ) {
deferred.reject(new Error('Data did not persist'));
} else {
deferred.resolve();
}
}, function(e) {
deferred.reject(e);
});
} catch( e ) {
deferred.reject(e);
}
return deferred.promise;
};
exports.testFind = function( testUtils, persistence ) {
var deferred = q.defer();
try {
function pretty(result) {
return '\n' + JSON.stringify(result, null, 4) + '\n';
}
// setup some data
persistence.save( 'myCollection', '123', { 'key': '1', 'sortme': 'foo', 'data': { 'name': 'aron', 'age': '6' } } )
.then( function( ) {
return persistence.save('myCollection', '456', { 'key': '2', 'sortme': 'bar', 'data': { 'name': 'allen' } });
})
.then( function( ) {
return persistence.save('myCollection', '789', { 'key': '3', 'sortme': 'baz', 'data': { 'name': 'abbey', 'age' : '6' } });
})
.then( function( ) {
return persistence.save('myOtherCollection', '1', { 'data' : { 'number' : 1 } } );
})
.then( function( ) {
return persistence.save('myOtherCollection', '2', { 'data' : { 'number' : 2 } } );
})
.then( function( ) {
return persistence.save('myOtherCollection', '3', { 'data' : { 'number' : 3 } } );
})
.then( function( ) {
return persistence.save('myOtherCollection', '4', { 'data' : { 'number' : 4 } } );
})
.then( function( ) {
return persistence.save('myOtherCollection', '5', { 'data' : { 'number' : 5 } } );
})
// find by ID
.then( function( ) {
return persistence.findByID('myCollection', '789').then( function(result) {
if ( !result ) {
deferred.reject('Failed find by ID');
}
if ( result['data']['name'] !== 'abbey') {
deferred.reject('Failed find by ID, found wrong result');
}
});
})
.then( function( ) {
return persistence.find('myCollection',
{ 'key' : '2' }
).then( function(result) {
if ( !result ) {
deferred.reject('Find by key search');
}
if ( result.length != 1 ) {
deferred.reject('Find by key search');
}
if ( result[0]['data']['name'] !== 'allen') {
deferred.reject('Failed find by ID, found wrong result');
}
});
})
.then( function( ) {
return persistence.find('myCollection',
{ 'data.age' : '6', 'data.name' : 'aron' }
).then( function(result) {
if ( !result ) {
deferred.reject('Failed nested find');
}
if ( result.length != 1 ) {
deferred.reject('Find by key search');
}
if ( result[0]['data']['name'] !== 'aron') {
deferred.reject('Failed find by ID, found wrong result');
}
});
})
// find
.then( function( ) {
return persistence.find('myCollection',
{ 'data.age' : '6' }
).then( function(result) {
if ( result.length != 2 ) {
deferred.reject('Failed find multiple results');
}
});
})
// find using gt operation
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$gt' : 2 } }
).then( function(result) {
if ( result.length != 3 ) {
deferred.reject('Failed gt');
}
});
})
// find using gt operation
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$gte' : 2 } }
).then( function(result) {
if ( result.length != 4 ) {
deferred.reject('Failed gt');
}
});
})
// find using lt operation
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$lt' : 3 } }
).then( function(result) {
if ( result.length != 2 ) {
deferred.reject('Failed lt');
}
});
})
// find using lte operation
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$lte' : 3 } }
).then( function(result) {
if ( result.length != 3 ) {
deferred.reject('Failed lt');
}
});
})
// find using lt and gt operation (range)
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$gt' : 2, '$lt' : 5 } }
).then( function(result) {
if ( result.length != 2 ) {
deferred.reject('Failed range (gt, lt)');
}
});
})
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$in' : [ 2, 3 ] } }
).then( function(result) {
if ( result.length != 2 ) {
deferred.reject('Failed in');
}
});
})
// find using cursor
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$lt' : 3 } }, true
).then( function(cursor) {
var p = q.defer();
var foundCount = 0;
cursor.on('end', function() {
if ( foundCount != 2 ) {
deferred.reject('failed cursor');
} else {
p.resolve();
}
});
cursor.on('error', function(e) {
p.reject(e);
});
cursor.on('readable', function(entry, key) {
if (undefined === entry) {
// Don't care as we've reach the end of the Array
} else if ( [1,2].indexOf( entry['data']['number']) < 0 ) {
deferred.reject("failed cursor");
} else {
foundCount++;
}
});
});
})
// sort cursor asc
.then(function() {
return persistence.find('myCollection',{}, true).then( function(cursor) {
var p = q.defer();
var c = cursor.sort({'sortme': 1}, function(err, items) {
assert.equal(items[0].sortme, 'bar');
assert.equal(items[1].sortme, 'baz');
assert.equal(items[2].sortme, 'foo');
p.resolve();
});
assert.equal(c, cursor);
return p;
});
})
// sort cursor desc
.then(function() {
return persistence.find('myCollection',{}, true).then( function(cursor) {
var p = q.defer();
var c = cursor.sort({'sortme': -1}, function(err, items) {
assert.equal(items[0].sortme, 'foo');
assert.equal(items[1].sortme, 'baz');
assert.equal(items[2].sortme, 'bar');
p.resolve();
});
assert.equal(c, cursor);
return p;
});
})
// sort cursor desc limit
.then(function() {
return persistence.find('myCollection',{}, true).then( function(cursor) {
var p = q.defer();
var c = cursor.sort({'sortme': -1}).limit(2, function(err, items) {
assert.equal(items.length, 2);
assert.equal(items[0].sortme, 'foo');
assert.equal(items[1].sortme, 'baz');
p.resolve();
});
assert.equal(c, cursor);
return p;
});
})
// find using iterator
.then( function( ) {
return persistence.find('myOtherCollection',
{ 'data.number' : { '$lt' : 3 } }, true
).then( function(cursor) {
var foundCount = 0;
var deferred = q.defer();
var process = function(entry) {
var p = q.defer();
if ( [1,2].indexOf( entry['data']['number']) < 0 ) {
deferred.reject("failed cursor");
} else {
foundCount++;
deferred.resolve();
}
return p.promise;
};
function processItem(err, item) {
if(item === null) {
if ( foundCount != 2 ) {
deferred.reject('failed cursor');
} else {
deferred.resolve();
}
return;
}
process(item).then( function() {
cursor.next(processItem);
})
}
cursor.next(processItem);
return deferred.promise;
});
})
.then( function() {
deferred.resolve();
});
} catch( e ) {
deferred.reject(e);
}
return deferred.promise;
};
exports.testRemove = function(testUtils, persistence ) {
var deferred = q.defer();
var obj = {
'data' : testUtils.guid()
};
try {
var key = testUtils.guid();
var collection = testUtils.guid();
persistence.save(collection, key, obj ).then( function(saved) {
if ( !saved ) {
deferred.reject(new Error('Did not save object'));
}
persistence.remove( collection, key )
.then( function() {
persistence.findByID(collection, key).then( function(found) {
if ( found ){
deferred.reject(new Error("Did not expect to find deleted object"));
} else {
deferred.resolve();
}
});
});
});
} catch( e ) {
deferred.reject(e);
}
return deferred.promise;
};
exports.testRemoveObject = function(testUtils, persistence ) {
var deferred = q.defer();
var obj = {
'data' : testUtils.guid(),
'foo': 'bar'
};
try {
var key = testUtils.guid();
var collection = testUtils.guid();
persistence.save(collection, key, obj ).then( function(saved) {
if ( !saved ) {
deferred.reject(new Error('Did not save object'));
}
persistence.remove( collection, { 'foo': 'bar'} )
.then( function() {
persistence.findByID(collection, key).then( function(found) {
if ( found ){
deferred.reject(new Error("Did not expect to find deleted object"));
} else {
deferred.resolve();
}
});
});
});
} catch( e ) {
deferred.reject(e);
}
return deferred.promise;
};