empire
Version:
Empire API JavaScript client ========================
147 lines (118 loc) • 3.98 kB
JavaScript
var nock = require('nock'),
assert = require('assert'),
fs = require('fs');
var Empire = require('../lib/empire.js').Empire;
RESPONSE_DESCRIBE_ALL = '{"status": "OK", "name": "salesforce"}';
RESPONSE_DESCRIBE_SALESFORCE = '{"status": "OK", "name": "salesforce", "tables": ["table1"]}';
RESPONSE_DESCRIBE_TABLE = '{"status": "OK", "name": "table1"}';
RESPONSE_ERROR = '{"error": "Something is broken"}';
var empire = new Empire('MOCK_USER', {
enduser: 'MOCK_ENDUSER'
});
nock(empire.baseUrl)
.persist()
.post('/empire/session/create?enduser=MOCK_ENDUSER', {})
.reply(200, '{"status": "OK", "sessionkey": "TESTSESSION"}')
.get('/empire/services')
.reply(200, RESPONSE_DESCRIBE_ALL)
.get('/empire/services/salesforce')
.reply(200, RESPONSE_DESCRIBE_SALESFORCE)
.get('/empire/services/salesforce/table1')
.reply(200, RESPONSE_DESCRIBE_TABLE)
.get('/empire/services/salesforce/bad_table')
.reply(500, RESPONSE_ERROR);
exports['connects to services'] = function () {
var sf_data = {
"access_token": "MOCK_ACCESS_TOKEN",
"client_id": "MOCK_CLIENT",
"refresh_token": "MOCK_REFRESH_TOKEN",
"endpoint": "https://na15.salesforce.com"
}
var salesforce = nock(empire.baseUrl)
.post('/empire/services/salesforce/connect', sf_data)
.reply(200, {});
empire.connect('salesforce', sf_data);
this.on('exit', function () {
salesforce.done();
});
};
exports['describes all services'] = function () {
var response = null;
empire.describe().success(function (r) {
response = r;
});
this.on('exit', function () {
assert.eql(response, JSON.parse(RESPONSE_DESCRIBE_ALL));
});
};
exports['describes a service'] = function () {
var response = null;
empire.describe('salesforce').success(function (r) {
response = r;
});
this.on('exit', function () {
assert.eql(response, JSON.parse(RESPONSE_DESCRIBE_SALESFORCE));
});
};
exports['describes a table'] = function () {
var response = null;
empire.describe('salesforce', 'table1').success(function (r) {
response = r;
});
this.on('exit', function () {
assert.eql(response, JSON.parse(RESPONSE_DESCRIBE_TABLE));
});
};
exports["doesn't describe a table without a service"] = function () {
var exception = null;
try {
empire.describe(null, 'table1');
} catch (e) {
exception = e;
}
assert.equal(exception.message, 'Service must be specified if table is specified!');
};
exports["handles failure gracefully"] = function () {
var error = null;
empire.describe('salesforce', 'bad_table').error(function (e) {
error = e;
});
this.on('exit', function () {
assert.equal(error.body, JSON.parse(RESPONSE_ERROR).error);
});
};
exports['runs queries'] = function () {
var contents = null;
var response = null;
fs.readFile(process.cwd() + '/test/query_response_body.txt', 'utf8', function (err, data) {
contents = data;
var materialize = nock(empire.baseUrl)
.post('/empire/query', {'query': 'SELECT * FROM salesforce_account'})
.reply(200, data);
empire.query('SELECT * FROM salesforce_account').success(function (r) {
response = r;
});
});
this.on('exit', function () {
assert.isNotNull(response);
assert.equal(response, contents);
});
}
exports['creates views'] = function () {
var materialize = nock(empire.baseUrl)
.put('/empire/view/viewName', {'query': 'SELECT QUERY'})
.reply(200, {});
empire.materializeView('viewName', 'SELECT QUERY');
this.on('exit', function () {
materialize.done();
});
}
exports['deletes views'] = function () {
var deleteView = nock(empire.baseUrl)
.delete('/empire/view/viewName')
.reply(200, {});
empire.dropView('viewName');
this.on('exit', function () {
deleteView.done();
});
}