2016-10-10 21:37:46 +08:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
require('../helper');
|
|
|
|
var assert = require('assert');
|
|
|
|
var appServer = require('../../app/server');
|
|
|
|
|
|
|
|
function response(code) {
|
|
|
|
return {
|
|
|
|
status: code
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
var RESPONSE = {
|
|
|
|
OK: response(200),
|
|
|
|
CREATED: response(201)
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
function TestClient(config) {
|
|
|
|
this.config = config || {};
|
|
|
|
this.server = appServer();
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = TestClient;
|
|
|
|
|
|
|
|
|
2016-10-19 22:56:43 +08:00
|
|
|
TestClient.prototype.getResult = function(query, override, callback) {
|
|
|
|
if (!callback) {
|
|
|
|
callback = override;
|
|
|
|
override = {};
|
|
|
|
}
|
2016-10-10 21:37:46 +08:00
|
|
|
assert.response(
|
|
|
|
this.server,
|
|
|
|
{
|
2016-10-19 22:56:43 +08:00
|
|
|
url: this.getUrl(override),
|
2016-10-10 21:37:46 +08:00
|
|
|
headers: {
|
2016-10-19 22:56:43 +08:00
|
|
|
host: this.getHost(override),
|
2017-08-04 23:12:49 +08:00
|
|
|
'Content-Type': this.getContentType(override)
|
2016-10-10 21:37:46 +08:00
|
|
|
},
|
|
|
|
method: 'POST',
|
2017-08-04 23:12:49 +08:00
|
|
|
data: this.getParser(override)({
|
2017-08-04 01:15:24 +08:00
|
|
|
q: query,
|
|
|
|
format: this.getFormat(override)
|
2016-10-10 21:37:46 +08:00
|
|
|
})
|
|
|
|
},
|
2017-08-04 01:15:24 +08:00
|
|
|
this.getExpectedResponse(override),
|
2016-10-10 21:37:46 +08:00
|
|
|
function (err, res) {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
|
|
|
}
|
|
|
|
var result = JSON.parse(res.body);
|
|
|
|
|
2017-08-04 23:12:49 +08:00
|
|
|
if (res.statusCode > 299) {
|
2017-08-04 01:15:24 +08:00
|
|
|
return callback(null, result);
|
|
|
|
}
|
|
|
|
|
2016-10-10 21:37:46 +08:00
|
|
|
return callback(null, result.rows || []);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2016-10-19 22:56:43 +08:00
|
|
|
TestClient.prototype.getHost = function(override) {
|
|
|
|
return override.host || this.config.host || 'vizzuality.cartodb.com';
|
2016-10-10 21:37:46 +08:00
|
|
|
};
|
|
|
|
|
2017-08-04 23:12:49 +08:00
|
|
|
TestClient.prototype.getContentType = function(override) {
|
|
|
|
return override['Content-Type'] || this.config['Content-Type'] || 'application/json';
|
|
|
|
};
|
|
|
|
|
|
|
|
TestClient.prototype.getParser = function (override) {
|
|
|
|
return override.parser || this.config.parser || JSON.stringify
|
|
|
|
}
|
|
|
|
|
2016-10-19 22:56:43 +08:00
|
|
|
TestClient.prototype.getUrl = function(override) {
|
2017-08-04 23:12:49 +08:00
|
|
|
if (override.anonymous) {
|
|
|
|
return '/api/v1/sql?';
|
|
|
|
}
|
|
|
|
|
2016-10-19 22:56:43 +08:00
|
|
|
return '/api/v2/sql?api_key=' + (override.apiKey || this.config.apiKey || '1234');
|
2016-10-10 21:37:46 +08:00
|
|
|
};
|
2017-08-04 01:15:24 +08:00
|
|
|
|
|
|
|
TestClient.prototype.getExpectedResponse = function (override) {
|
|
|
|
return override.response || this.config.response || RESPONSE.OK;
|
|
|
|
};
|
|
|
|
|
|
|
|
TestClient.prototype.getFormat = function (override) {
|
|
|
|
return override.format || this.config.format || undefined;
|
|
|
|
};
|
2017-08-04 23:12:49 +08:00
|
|
|
|
|
|
|
|