orchestrate
Version:
Orchestrate is a database service. It is a simple REST API that is optimized for queries. Orchestrate combines full-text search, graph, time-series, and key/value.
167 lines (152 loc) • 4.14 kB
JavaScript
// Copyright 2014 Orchestrate, Inc.
/**
* @fileoverview Test data
*/
var assert = require('assert');
var Q = require('kew');
var db = require('./creds')();
var util = require('util');
// Test data.
function Users(collection) {
this.collection = collection;
this.steve = {
"name": "Steve Kaliski",
"email": "sjkaliski@gmail.com",
"location": "New York",
"type": "paid",
"gender": "male"
};
this.steve_v1 = {
"name": "Steve Kaliski",
"email": "sjkaliski@gmail.com",
"location": "New York, NY",
};
this.steve_v2 = {
"name": "Steve Kaliski",
"email": "sjkaliski@gmail.com",
"location": "New York, NY",
"type": "consultant"
};
this.steve_v3 = {
"name": "Steve Kaliski",
"email": "sjkaliski@gmail.com",
"location": "New York, NY",
"type": "salaried"
};
this.david = {
"name": "David Byrd",
"email": "byrd@bowery.io",
"location": "New York",
"type": "paid",
"gender": "male"
};
this.kelsey = {
"name": "Kelsey Jarblenkins",
"email": "kelsey@jarblenkins.com",
"location": "Boston, MA",
"type": "free",
"gender": "genderqueer"
};
this.kelsey_v1 = {
"name": "Kelsey Jarblenkins",
"email": "kelsey@jarblenkins.com",
"location": "Boston, MA",
"type": "consultant",
"gender": "genderqueer"
};
}
var USER_EVENTS = {
"steve" : {
"key": "sjkaliski@gmail.com",
"events" : {
"activities" : [
{
"activity": "followed",
"user": "sjkaliski@gmail.com",
"userName": "Steve Kaliski"
}
]
}
}
};
function delete_all(dels) {
return Q.all(dels)
.then(function (res) {
assert.equal(dels.length, res.length);
for (var i in res) {
assert.equal(204, res[i].statusCode);
}
return Q.resolve(res);
})
.fail(function(res) {
assert.equal(404, res.statusCode);
return Q.resolve(res);
});
}
Users.prototype.reset = function() {
var dels = [];
var obj = this;
var collection = this.collection;
return db.search(collection, '@path.kind:event', {limit:100})
.then(function(res) {
var results = res.body.results;
for(var i=0;i<results.length;i++) {
var path = results[i].path;
dels.push(db.newEventBuilder()
.from(path.collection, path.key)
.type(path.type)
.time(path.timestamp)
.ordinal(path.ordinal_str)
.remove());
}
return delete_all(dels);
})
.then(function(res){
dels = [];
dels.push(db.remove(collection, obj.steve.email, true));
dels.push(db.remove(collection, obj.steve.email+'_2', true));
dels.push(db.remove(collection, obj.david.email, true));
dels.push(db.remove(collection, obj.kelsey.email, true));
return delete_all(dels);
})
.then(function(res) {
return db.put(collection, obj.david.email, obj.david);
})
.then(function (res) {
assert.equal(201, res.statusCode);
return Q.resolve(res);
});
};
Users.prototype.insertAll = function() {
var inserts = [];
var collection = this.collection;
inserts.push(db.put(collection, this.steve.email, this.steve));
inserts.push(db.put(collection, this.kelsey.email, this.kelsey));
for (var user_id in USER_EVENTS) {
var user = USER_EVENTS[user_id];
var user_key = user.key;
for (var event_name in user.events) {
var event_list = user.events[event_name];
for (var i=0; i<event_list.length; i++) {
inserts.push(db.newEventBuilder()
.from(collection, user_key)
.type(event_name)
.data(event_list[i])
.create()
);
}
}
}
return Q.all(inserts)
.then(function (res) {
assert.equal(inserts.length, res.length);
for (var i in res) {
assert.equal(201, res[i].statusCode);
}
// Give search a chance to index all changes
return Q.delay(res, 3000);
});
};
module.exports = function(testName) {
return new Users(testName + "_users_" + process.version + "_" + Math.floor(Math.random() * 10000));
};