Change callback signature in assert.response

This commit is contained in:
Raul Ochoa 2016-09-26 14:37:40 +02:00
parent 8d74b9dcda
commit c9846a2437
38 changed files with 274 additions and 286 deletions

View File

@ -49,7 +49,7 @@ describe('app.auth', function() {
method: 'GET' method: 'GET'
}, },
{}, {},
function(res) { function(err, res) {
assert.equal(res.statusCode, scenario.statusCode, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, scenario.statusCode, res.statusCode + ': ' + res.body);
done(); done();
} }

View File

@ -31,7 +31,7 @@ it('GET /api/v1/version', function(done){
assert.response(server, { assert.response(server, {
url: '/api/v1/version', url: '/api/v1/version',
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);
var parsed = JSON.parse(res.body); var parsed = JSON.parse(res.body);
var sqlapi_version = require(__dirname + '/../../package.json').version; var sqlapi_version = require(__dirname + '/../../package.json').version;
@ -47,7 +47,7 @@ it('GET /api/v1/sql', function(done){
method: 'GET' method: 'GET'
},{ },{
status: 400 status: 400
}, function(res) { }, function(err, res) {
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
assert.deepEqual(JSON.parse(res.body), {"error":["You must indicate a sql query"]}); assert.deepEqual(JSON.parse(res.body), {"error":["You must indicate a sql query"]});
@ -62,7 +62,7 @@ it('GET /api/whatever/sql', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ },{
}, function(res) { }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
done(); done();
}); });
@ -75,7 +75,7 @@ it('GET /api/whatever/sql', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ },{
}, function(res) { }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.equal( assert.equal(
res.headers['access-control-allow-headers'], 'X-Requested-With, X-Prototype-Version, X-CSRF-Token' res.headers['access-control-allow-headers'], 'X-Requested-With, X-Prototype-Version, X-CSRF-Token'
@ -91,7 +91,7 @@ it('OPTIONS /api/x/sql', function(done){
url: '/api/x/sql?q=syntax%20error', url: '/api/x/sql?q=syntax%20error',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'OPTIONS' method: 'OPTIONS'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.equal(res.body, ''); assert.equal(res.body, '');
assert.equal( assert.equal(
@ -109,7 +109,7 @@ it('GET /api/v1/sql with SQL parameter on SELECT only. No oAuth included ', func
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&database=cartodb_test_user_1_db', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&database=cartodb_test_user_1_db',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
// Check cache headers // Check cache headers
assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4'); assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4');
@ -123,7 +123,7 @@ it('cache_policy=persist', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&database=cartodb_test_user_1_db&cache_policy=persist', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&database=cartodb_test_user_1_db&cache_policy=persist',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
// Check cache headers // Check cache headers
assert.ok(res.headers.hasOwnProperty('x-cache-channel')); assert.ok(res.headers.hasOwnProperty('x-cache-channel'));
@ -139,7 +139,7 @@ it('GET /api/v1/sql with SQL parameter on SELECT only. no database param, just i
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
done(); done();
}); });
@ -149,7 +149,7 @@ it('GET /user/vizzuality/api/v1/sql with SQL parameter on SELECT only', function
assert.response(server, { assert.response(server, {
url: '/user/vizzuality/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4', url: '/user/vizzuality/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4',
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
done(); done();
}); });
@ -164,7 +164,7 @@ it('SELECT from user-specific database', function(done){
url: '/api/v1/sql?q=SELECT+2+as+n', url: '/api/v1/sql?q=SELECT+2+as+n',
headers: {host: 'cartodb250user.cartodb.com'}, headers: {host: 'cartodb250user.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
global.settings.db_host = backupDBHost; global.settings.db_host = backupDBHost;
var err = null; var err = null;
try { try {
@ -187,7 +187,7 @@ it('SELECT with user-specific password', function(done){
url: '/api/v1/sql?q=SELECT+2+as+n&api_key=1234', url: '/api/v1/sql?q=SELECT+2+as+n&api_key=1234',
headers: {host: 'cartodb250user.cartodb.com'}, headers: {host: 'cartodb250user.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
global.settings.db_user_pass = backupDBUserPass; global.settings.db_user_pass = backupDBUserPass;
var err = null; var err = null;
try { try {
@ -208,7 +208,7 @@ function(done){
url: '/api/v1/sql?q=SELECT%20cartodb_id*2%20FROM%20untitle_table_4&api_key=1234', url: '/api/v1/sql?q=SELECT%20cartodb_id*2%20FROM%20untitle_table_4&api_key=1234',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
// Check cache headers // Check cache headers
assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4'); assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4');
@ -230,7 +230,7 @@ function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4'); assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4');
var parsed = JSON.parse(res.body); var parsed = JSON.parse(res.body);
@ -290,7 +290,7 @@ it("paging", function(done){
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'; req.headers['Content-Type'] = 'application/x-www-form-urlencoded';
req.data = data; req.data = data;
} }
assert.response(server, req, {}, function(res) { assert.response(server, req, {}, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsed = JSON.parse(res.body); var parsed = JSON.parse(res.body);
assert.equal(parsed.rows.length, nrows); assert.equal(parsed.rows.length, nrows);
@ -319,7 +319,7 @@ it("paging starting with comment", function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
}, {}, function(res) { }, {}, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsed = JSON.parse(res.body); var parsed = JSON.parse(res.body);
assert.equal(parsed.rows.length, 3); assert.equal(parsed.rows.length, 3);
@ -338,7 +338,7 @@ it('POST /api/v1/sql with SQL parameter on SELECT only. no database param, just
data: querystring.stringify({q: "SELECT * FROM untitle_table_4"}), data: querystring.stringify({q: "SELECT * FROM untitle_table_4"}),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
done(); done();
}); });
@ -351,7 +351,7 @@ it('GET /api/v1/sql with INSERT. oAuth not used, so public user - should fail',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ },{
}, function(res) { }, function(err, res) {
assert.equal(res.statusCode, 401, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 401, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -368,7 +368,7 @@ it('GET /api/v1/sql with DROP TABLE. oAuth not used, so public user - should fai
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ },{
}, function(res) { }, function(err, res) {
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -386,7 +386,7 @@ it('GET /api/v1/sql with INSERT. header based db - should fail', function (done)
method: 'GET' method: 'GET'
}, { }, {
status: 400 status: 400
}, function (res, err) { }, function (err, res) {
done(err); done(err);
}); });
}); });
@ -402,7 +402,7 @@ it('INSERT returns affected rows', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -427,7 +427,7 @@ it('UPDATE returns affected rows', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -452,7 +452,7 @@ it('DELETE returns affected rows', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -477,7 +477,7 @@ it('INSERT with RETURNING returns all results', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -501,7 +501,7 @@ it('UPDATE with RETURNING returns all results', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -525,7 +525,7 @@ it('DELETE with RETURNING returns all results', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -542,7 +542,7 @@ it('GET /api/v1/sql with SQL parameter on DROP TABLE. should fail', function(don
url: "/api/v1/sql?q=DROP%20TABLE%20untitle_table_4", url: "/api/v1/sql?q=DROP%20TABLE%20untitle_table_4",
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -564,7 +564,7 @@ it('Field name is not confused with UPDATE operation', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.private_table'); assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.private_table');
done(); done();
@ -579,7 +579,7 @@ it('CREATE TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
// Check cache headers // Check cache headers
// See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43 // See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43
@ -603,7 +603,7 @@ it('SELECT INTO with paging ', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { next(null, res); }); },{}, function(err, res) { next(null, res); });
}, },
function check_res_test_fake_into_1(err, res) { function check_res_test_fake_into_1(err, res) {
assert.ifError(err); assert.ifError(err);
@ -617,7 +617,7 @@ it('SELECT INTO with paging ', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { next(null, res); }); },{}, function(err, res) { next(null, res); });
}, },
function check_res_drop_table(err, res) { function check_res_drop_table(err, res) {
assert.ifError(err); assert.ifError(err);
@ -632,7 +632,7 @@ it('SELECT INTO with paging ', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { next(null, res); }); },{}, function(err, res) { next(null, res); });
}, },
function check_drop(err, res) { function check_drop(err, res) {
assert.ifError(err); assert.ifError(err);
@ -655,7 +655,7 @@ it('COPY TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
// We expect a problem, actually // We expect a problem, actually
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
@ -673,7 +673,7 @@ it('COPY TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
// We expect a problem, actually // We expect a problem, actually
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
@ -694,7 +694,7 @@ it('ALTER TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
// Check cache headers // Check cache headers
// See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43 // See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43
@ -713,7 +713,7 @@ it('multistatement insert, alter, select, begin, commit', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.equal(parsedBody.total_rows, 1); assert.equal(parsedBody.total_rows, 1);
@ -730,7 +730,7 @@ it('TRUNCATE TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
assert.ok(!res.hasOwnProperty('x-cache-channel')); assert.ok(!res.hasOwnProperty('x-cache-channel'));
assert.equal(res.headers['cache-control'], expected_rw_cache_control); assert.equal(res.headers['cache-control'], expected_rw_cache_control);
@ -743,7 +743,7 @@ it('TRUNCATE TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
// table should not get a cache channel as it won't get invalidated // table should not get a cache channel as it won't get invalidated
assert.ok(!res.headers.hasOwnProperty('x-cache-channel')); assert.ok(!res.headers.hasOwnProperty('x-cache-channel'));
@ -764,7 +764,7 @@ it('REINDEX TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
assert.ok(!res.hasOwnProperty('x-cache-channel')); assert.ok(!res.hasOwnProperty('x-cache-channel'));
assert.equal(res.headers['cache-control'], expected_rw_cache_control); assert.equal(res.headers['cache-control'], expected_rw_cache_control);
@ -782,7 +782,7 @@ it('DROP TABLE with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
// Check cache headers // Check cache headers
// See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43 // See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43
@ -800,7 +800,7 @@ it('CREATE FUNCTION with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
// Check cache headers // Check cache headers
// See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43 // See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43
@ -818,7 +818,7 @@ it('DROP FUNCTION with GET and auth', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
// Check cache headers // Check cache headers
// See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43 // See https://github.com/Vizzuality/CartoDB-SQL-API/issues/43
@ -833,7 +833,7 @@ it('sends a 400 when an unsupported format is requested', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=unknown', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=unknown',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 400, res.body); assert.equal(res.statusCode, 400, res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -847,7 +847,7 @@ it('GET /api/v1/sql with SQL parameter and no format, ensuring content-dispositi
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var ct = res.header('Content-Type'); var ct = res.header('Content-Type');
assert.ok(/json/.test(ct), 'Default format is not JSON: ' + ct); assert.ok(/json/.test(ct), 'Default format is not JSON: ' + ct);
@ -864,7 +864,7 @@ it('POST /api/v1/sql with SQL parameter and no format, ensuring content-disposit
data: querystring.stringify({q: "SELECT * FROM untitle_table_4" }), data: querystring.stringify({q: "SELECT * FROM untitle_table_4" }),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var ct = res.header('Content-Type'); var ct = res.header('Content-Type');
assert.ok(/json/.test(ct), 'Default format is not JSON: ' + ct); assert.ok(/json/.test(ct), 'Default format is not JSON: ' + ct);
@ -880,7 +880,7 @@ it('GET /api/v1/sql with SQL parameter and no format, but a filename', function(
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&filename=x', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&filename=x',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var ct = res.header('Content-Type'); var ct = res.header('Content-Type');
assert.ok(/json/.test(ct), 'Default format is not JSON: ' + ct); assert.ok(/json/.test(ct), 'Default format is not JSON: ' + ct);
@ -896,7 +896,7 @@ it('field named "the_geom_webmercator" is not skipped by default', function(done
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var row0 = JSON.parse(res.body).rows[0]; var row0 = JSON.parse(res.body).rows[0];
var checkfields = {'name':1, 'cartodb_id':1, 'the_geom':1, 'the_geom_webmercator':1}; var checkfields = {'name':1, 'cartodb_id':1, 'the_geom':1, 'the_geom_webmercator':1};
@ -916,7 +916,7 @@ it('skipfields controls included fields', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&skipfields=the_geom_webmercator,cartodb_id,unexistant', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&skipfields=the_geom_webmercator,cartodb_id,unexistant',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var row0 = JSON.parse(res.body).rows[0]; var row0 = JSON.parse(res.body).rows[0];
var checkfields = {'name':1, 'cartodb_id':0, 'the_geom':1, 'the_geom_webmercator':0}; var checkfields = {'name':1, 'cartodb_id':0, 'the_geom':1, 'the_geom_webmercator':0};
@ -937,7 +937,7 @@ it('multiple skipfields parameter do not kill the backend', function(done){
'&skipfields=cartodb_id,unexistant', '&skipfields=cartodb_id,unexistant',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var row0 = JSON.parse(res.body).rows[0]; var row0 = JSON.parse(res.body).rows[0];
var checkfields = {'name':1, 'cartodb_id':0, 'the_geom':1, 'the_geom_webmercator':0}; var checkfields = {'name':1, 'cartodb_id':0, 'the_geom':1, 'the_geom_webmercator':0};
@ -959,7 +959,7 @@ it('GET /api/v1/sql ensure cross domain set on errors', function(done){
method: 'GET' method: 'GET'
},{ },{
status: 400 status: 400
}, function(res){ }, function(err, res){
var cd = res.header('Access-Control-Allow-Origin'); var cd = res.header('Access-Control-Allow-Origin');
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -1022,7 +1022,7 @@ function testSystemQueries(description, queries, statusErrorCode, apiKey) {
method: 'GET', method: 'GET',
url: '/api/v1/sql?' + querystring.stringify(queryStringParams) url: '/api/v1/sql?' + querystring.stringify(queryStringParams)
}; };
assert.response(server, request, function(response) { assert.response(server, request, function(err, response) {
assert.equal(response.statusCode, statusErrorCode); assert.equal(response.statusCode, statusErrorCode);
done(); done();
}); });
@ -1035,7 +1035,7 @@ it('GET decent error if domain is incorrect', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson',
headers: {host: 'vizzualinot.cartodb.com'}, headers: {host: 'vizzualinot.cartodb.com'},
method: 'GET' method: 'GET'
}, {}, function(res){ }, {}, function(err, res){
assert.equal(res.statusCode, 404, res.statusCode + ( res.statusCode !== 200 ? ( ': ' + res.body ) : '')); assert.equal(res.statusCode, 404, res.statusCode + ( res.statusCode !== 200 ? ( ': ' + res.body ) : ''));
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -1056,7 +1056,7 @@ it('GET decent error if SQL is broken', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res){ },{}, function(err, res){
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -1075,7 +1075,7 @@ it('numeric arrays are rendered as such', function(done){
}), }),
headers: {host: 'vizzuality.localhost.lan:8080' }, headers: {host: 'vizzuality.localhost.lan:8080' },
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var out = JSON.parse(res.body); var out = JSON.parse(res.body);
assert.ok(out.hasOwnProperty('time')); assert.ok(out.hasOwnProperty('time'));
@ -1105,7 +1105,7 @@ it('field names and types are exposed', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.equal(_.keys(parsedBody.fields).length, 10); assert.equal(_.keys(parsedBody.fields).length, 10);
@ -1132,7 +1132,7 @@ it('schema response takes skipfields into account', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.equal(_.keys(parsedBody.fields).length, 2); assert.equal(_.keys(parsedBody.fields).length, 2);
@ -1161,7 +1161,7 @@ it('numeric fields are rendered as numbers in JSON', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
var row = parsedBody.rows[0]; var row = parsedBody.rows[0];
@ -1202,7 +1202,7 @@ it('timezone info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
@ -1222,7 +1222,7 @@ it('timezone info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
@ -1242,7 +1242,7 @@ it('timezone info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
@ -1262,7 +1262,7 @@ it('timezone info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
@ -1294,7 +1294,7 @@ it('notice and warning info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
var err = null; var err = null;
try { try {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
@ -1311,7 +1311,7 @@ it('notice and warning info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
var err = null; var err = null;
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
@ -1332,7 +1332,7 @@ it('notice and warning info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
var err = null; var err = null;
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
@ -1354,7 +1354,7 @@ it('notice and warning info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
var err = null; var err = null;
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
@ -1378,7 +1378,7 @@ it('notice and warning info in JSON output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
try { try {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
JSON.parse(res.body); JSON.parse(res.body);
@ -1400,7 +1400,7 @@ it('GET /api/v1/sql with SQL parameter on SELECT only should return CORS headers
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&database=cartodb_test_user_1_db', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&database=cartodb_test_user_1_db',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
// Check cache headers // Check cache headers
assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4'); assert.equal(res.headers['x-cache-channel'], 'cartodb_test_user_1_db:public.untitle_table_4');
@ -1419,7 +1419,7 @@ it('GET with callback param returns wrapped result set with callback as jsonp',
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&callback=foo_jsonp', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&callback=foo_jsonp',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.ok(res.body.match(/foo\_jsonp\(.*\)/)); assert.ok(res.body.match(/foo\_jsonp\(.*\)/));
done(); done();
@ -1431,7 +1431,7 @@ it('GET with callback must return 200 status error even if it is an error', func
url: "/api/v1/sql?q=DROP%20TABLE%20untitle_table_4&callback=foo_jsonp", url: "/api/v1/sql?q=DROP%20TABLE%20untitle_table_4&callback=foo_jsonp",
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var didRunJsonCallback = false; var didRunJsonCallback = false;
// jshint ignore:start // jshint ignore:start
@ -1455,7 +1455,7 @@ it('GET with callback must return 200 status error even if it is an error', func
{ {
status: 400 status: 400
}, },
function(res) { function(err, res) {
assert.ok(res.body.match(/was not able to finish.*try again/i)); assert.ok(res.body.match(/was not able to finish.*try again/i));
done(); done();
}); });

View File

@ -30,14 +30,11 @@ it('does not hang server', function(done){
var server = require('../../app/server')(); var server = require('../../app/server')();
step( step(
function sendQuery() { function sendQuery() {
var next = this;
assert.response(server, { assert.response(server, {
url: '/api/v1/sql?q=SELECT+1', url: '/api/v1/sql?q=SELECT+1',
method: 'GET', method: 'GET',
headers: {host: 'vizzuality.localhost' } headers: {host: 'vizzuality.localhost' }
},{}, function(res, err) { },{}, this);
next(err, res);
});
}, },
function checkResponse(err, res) { function checkResponse(err, res) {
assert.ifError(err); assert.ifError(err);
@ -49,14 +46,11 @@ it('does not hang server', function(done){
return null; return null;
}, },
function sendAnotherQuery() { function sendAnotherQuery() {
var next = this;
assert.response(server, { assert.response(server, {
url: '/api/v1/sql?q=SELECT+2', url: '/api/v1/sql?q=SELECT+2',
method: 'GET', method: 'GET',
headers: {host: 'vizzuality.localhost' } headers: {host: 'vizzuality.localhost' }
},{}, function(res, err) { },{}, this);
next(err, res);
});
}, },
function checkResponse(err, res) { function checkResponse(err, res) {
assert.ifError(err); assert.ifError(err);

View File

@ -16,7 +16,7 @@ it('GET /api/v1/sql as arraybuffer ', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.equal(res.headers['content-type'], "application/octet-stream"); assert.equal(res.headers['content-type'], "application/octet-stream");
done(); done();
@ -31,7 +31,7 @@ it('GET /api/v1/sql as arraybuffer does not support geometry types ', function(d
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 400, res.body); assert.equal(res.statusCode, 400, res.body);
var result = JSON.parse(res.body); var result = JSON.parse(res.body);
assert.equal(result.error[0], "geometry types are not supported"); assert.equal(result.error[0], "geometry types are not supported");

View File

@ -16,7 +16,7 @@ it('CSV format', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'CSV is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'CSV is not disposed as attachment: ' + cd);
@ -44,7 +44,7 @@ it('CSV format, bigger than 81920 bytes', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.ok(res.body.length > 81920, 'CSV smaller than expected: ' + res.body.length); assert.ok(res.body.length > 81920, 'CSV smaller than expected: ' + res.body.length);
done(); done();
}); });
@ -57,7 +57,7 @@ it('CSV format from POST', function(done){
data: querystring.stringify({q: "SELECT * FROM untitle_table_4 LIMIT 1", format: 'csv'}), data: querystring.stringify({q: "SELECT * FROM untitle_table_4 LIMIT 1", format: 'csv'}),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'CSV is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'CSV is not disposed as attachment: ' + cd);
@ -73,7 +73,7 @@ it('CSV format, custom filename', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=csv&filename=mycsv.csv', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=csv&filename=mycsv.csv',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'CSV is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'CSV is not disposed as attachment: ' + cd);
@ -100,7 +100,7 @@ it('skipfields controls fields included in CSV output', function(done){
'&skipfields=unexistant,cartodb_id', '&skipfields=unexistant,cartodb_id',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var row0 = res.body.substring(0, res.body.search(/[\n\r]/)).split(','); var row0 = res.body.substring(0, res.body.search(/[\n\r]/)).split(',');
var checkFields = { name: true, cartodb_id: false, the_geom: true, the_geom_webmercator: true }; var checkFields = { name: true, cartodb_id: false, the_geom: true, the_geom_webmercator: true };
@ -122,7 +122,7 @@ it('GET /api/v1/sql as csv', function(done){
'&format=csv', '&format=csv',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var expected = 'cartodb_id,geom\r\n1,"SRID=4326;POINT(-3.699732 40.423012)"\r\n'; var expected = 'cartodb_id,geom\r\n1,"SRID=4326;POINT(-3.699732 40.423012)"\r\n';
assert.equal(res.body, expected); assert.equal(res.body, expected);
@ -136,7 +136,7 @@ it('GET /api/v1/sql as csv with no rows', function(done){
url: '/api/v1/sql?q=SELECT%20true%20WHERE%20false&format=csv', url: '/api/v1/sql?q=SELECT%20true%20WHERE%20false&format=csv',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var obtained_lines = res.body.split('\r\n'); var obtained_lines = res.body.split('\r\n');
assert.ok(obtained_lines.length <= 2, // may or may not have an header assert.ok(obtained_lines.length <= 2, // may or may not have an header
@ -151,7 +151,7 @@ it('GET /api/v1/sql as csv, properly escaped', function(done){
url: '/api/v1/sql?q=SELECT%20cartodb_id,%20address%20FROM%20untitle_table_4%20LIMIT%201&format=csv', url: '/api/v1/sql?q=SELECT%20cartodb_id,%20address%20FROM%20untitle_table_4%20LIMIT%201&format=csv',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var expected = 'cartodb_id,address\r\n1,"Calle de Pérez Galdós 9, Madrid, Spain"\r\n'; var expected = 'cartodb_id,address\r\n1,"Calle de Pérez Galdós 9, Madrid, Spain"\r\n';
assert.equal(res.body, expected); assert.equal(res.body, expected);
@ -163,7 +163,7 @@ it('GET /api/v1/sql as csv, concurrently', function(done){
var concurrency = 4; var concurrency = 4;
var waiting = concurrency; var waiting = concurrency;
function validate(res){ function validate(err, res){
var expected = 'cartodb_id,address\r\n1,"Calle de Pérez Galdós 9, Madrid, Spain"\r\n'; var expected = 'cartodb_id,address\r\n1,"Calle de Pérez Galdós 9, Madrid, Spain"\r\n';
assert.equal(res.body, expected); assert.equal(res.body, expected);
if ( ! --waiting ) { if ( ! --waiting ) {
@ -199,7 +199,7 @@ it('GET /api/v1/sql as csv, concurrently', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
var headersPlusExtraLine = 2; var headersPlusExtraLine = 2;
assert.equal(res.body.split('\n').length, limit + headersPlusExtraLine); assert.equal(res.body.split('\n').length, limit + headersPlusExtraLine);
done(); done();

View File

@ -23,7 +23,7 @@ it('GET /api/v1/sql with SQL parameter, ensuring content-disposition set to geoj
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'GEOJSON is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'GEOJSON is not disposed as attachment: ' + cd);
@ -38,7 +38,7 @@ it('POST /api/v1/sql with SQL parameter, ensuring content-disposition set to geo
data: querystring.stringify({q: "SELECT * FROM untitle_table_4", format: 'geojson' }), data: querystring.stringify({q: "SELECT * FROM untitle_table_4", format: 'geojson' }),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'GEOJSON is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'GEOJSON is not disposed as attachment: ' + cd);
@ -52,7 +52,7 @@ it('uses the last format parameter when multiple are used', function(done){
url: '/api/v1/sql?format=csv&q=SELECT%20*%20FROM%20untitle_table_4&format=geojson', url: '/api/v1/sql?format=csv&q=SELECT%20*%20FROM%20untitle_table_4&format=geojson',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /filename=cartodb-query.geojson/gi.test(cd)); assert.equal(true, /filename=cartodb-query.geojson/gi.test(cd));
@ -65,7 +65,7 @@ it('uses custom filename', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson&filename=x', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson&filename=x',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /filename=x.geojson/gi.test(cd), cd); assert.equal(true, /filename=x.geojson/gi.test(cd), cd);
@ -78,7 +78,7 @@ it('does not include the_geom and the_geom_webmercator properties by default', f
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsed_body = JSON.parse(res.body); var parsed_body = JSON.parse(res.body);
var row0 = parsed_body.features[0].properties; var row0 = parsed_body.features[0].properties;
@ -99,7 +99,7 @@ it('skipfields controls fields included in GeoJSON output', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson&skipfields=unexistant,cartodb_id', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4&format=geojson&skipfields=unexistant,cartodb_id',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var parsed_body = JSON.parse(res.body); var parsed_body = JSON.parse(res.body);
var row0 = parsed_body.features[0].properties; var row0 = parsed_body.features[0].properties;
@ -124,7 +124,7 @@ it('GET /api/v1/sql as geojson limiting decimal places', function(done){
dp: '1'}), dp: '1'}),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var result = JSON.parse(res.body); var result = JSON.parse(res.body);
assert.equal(1, checkDecimals(result.features[0].geometry.coordinates[0], '.')); assert.equal(1, checkDecimals(result.features[0].geometry.coordinates[0], '.'));
@ -139,7 +139,7 @@ it('GET /api/v1/sql as geojson with default dp as 6', function(done){
format: 'geojson'}), format: 'geojson'}),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var result = JSON.parse(res.body); var result = JSON.parse(res.body);
assert.equal(6, checkDecimals(result.features[0].geometry.coordinates[0], '.')); assert.equal(6, checkDecimals(result.features[0].geometry.coordinates[0], '.'));
@ -155,7 +155,7 @@ it('null geometries in geojson output', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'GEOJSON is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'GEOJSON is not disposed as attachment: ' + cd);
@ -180,7 +180,7 @@ it('stream response handle errors', function(done) {
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 400, res.body); assert.equal(res.statusCode, 400, res.body);
var geoJson = JSON.parse(res.body); var geoJson = JSON.parse(res.body);
assert.ok(geoJson.error); assert.ok(geoJson.error);
@ -198,7 +198,7 @@ it('stream response with empty result set has valid output', function(done) {
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var geoJson = JSON.parse(res.body); var geoJson = JSON.parse(res.body);
var expectedGeoJson = {"type": "FeatureCollection", "features": []}; var expectedGeoJson = {"type": "FeatureCollection", "features": []};

View File

@ -15,7 +15,7 @@ describe('geopackage query', function(){
url: base_url, url: base_url,
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.equal(res.headers["content-type"], "application/x-sqlite3; charset=utf-8"); assert.equal(res.headers["content-type"], "application/x-sqlite3; charset=utf-8");
assert.notEqual(res.headers["content-disposition"].indexOf(table_name + ".gpkg"), -1); assert.notEqual(res.headers["content-disposition"].indexOf(table_name + ".gpkg"), -1);
@ -35,7 +35,7 @@ describe('geopackage query', function(){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
var tmpfile = '/tmp/a_geopackage_file.gpkg'; var tmpfile = '/tmp/a_geopackage_file.gpkg';
try { try {
fs.writeFileSync(tmpfile, res.body, 'binary'); fs.writeFileSync(tmpfile, res.body, 'binary');

View File

@ -110,7 +110,7 @@ it('KML format, unauthenticated', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd);
@ -134,7 +134,7 @@ it('KML format, unauthenticated, POST', function(done){
data: 'q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml', data: 'q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml',
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd);
@ -152,7 +152,7 @@ it('KML format, bigger than 81920 bytes', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd);
@ -167,7 +167,7 @@ it('KML format, skipfields', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml&skipfields=address,cartodb_id', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml&skipfields=address,cartodb_id',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd);
@ -190,7 +190,7 @@ it('KML format, unauthenticated, custom filename', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml&filename=kmltest', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml&filename=kmltest',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'KML is not disposed as attachment: ' + cd);
@ -206,7 +206,7 @@ it('KML format, authenticated', function(done){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml&api_key=1234', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=kml&api_key=1234',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /filename=cartodb-query.kml/gi.test(cd), 'Unexpected KML filename: ' + cd); assert.equal(true, /filename=cartodb-query.kml/gi.test(cd), 'Unexpected KML filename: ' + cd);
@ -275,7 +275,7 @@ it('GET /api/v1/sql as kml with no rows', function(done){
url: '/api/v1/sql?q=SELECT%20true%20WHERE%20false&format=kml', url: '/api/v1/sql?q=SELECT%20true%20WHERE%20false&format=kml',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
// NOTE: GDAL-1.11+ added 'id="root_doc"' attribute to the output // NOTE: GDAL-1.11+ added 'id="root_doc"' attribute to the output
var pat = new RegExp('^<\\?xml version="1.0" encoding="utf-8" \\?>' + var pat = new RegExp('^<\\?xml version="1.0" encoding="utf-8" \\?>' +
@ -298,7 +298,7 @@ it('GET /api/v1/sql as kml with ending semicolon', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
// NOTE: GDAL-1.11+ added 'id="root_doc"' attribute to the output // NOTE: GDAL-1.11+ added 'id="root_doc"' attribute to the output
var pat = new RegExp('^<\\?xml version="1.0" encoding="utf-8" \\?>' + var pat = new RegExp('^<\\?xml version="1.0" encoding="utf-8" \\?>' +
@ -321,7 +321,7 @@ it('check point coordinates, unauthenticated', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var coords = extractCoordinates(res.body); var coords = extractCoordinates(res.body);
assert(coords, 'No coordinates in ' + res.body); assert(coords, 'No coordinates in ' + res.body);
@ -340,7 +340,7 @@ it('check point coordinates, authenticated', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var coords = extractCoordinates(res.body); var coords = extractCoordinates(res.body);
assert(coords, 'No coordinates in ' + res.body); assert(coords, 'No coordinates in ' + res.body);
@ -366,7 +366,7 @@ it('check point coordinates, authenticated', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
assert.equal(res.body.match(/<Placemark>/g).length, limit); assert.equal(res.body.match(/<Placemark>/g).length, limit);
done(); done();
} }
@ -387,7 +387,7 @@ it('check point coordinates, authenticated', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
assert.equal(res.body.match(/<Placemark>/g).length, limit); assert.equal(res.body.match(/<Placemark>/g).length, limit);
done(); done();
} }
@ -411,7 +411,7 @@ it('check point coordinates, authenticated', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
assert.equal(res.body.match(/<Placemark>/g), null); assert.equal(res.body.match(/<Placemark>/g), null);
done(); done();
} }

View File

@ -18,7 +18,7 @@ it('SHP format, unauthenticated', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd);
@ -45,7 +45,7 @@ it('SHP format, unauthenticated, POST', function(done){
data: 'q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=shp', data: 'q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=shp',
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd);
@ -63,7 +63,7 @@ it('SHP format, big size, POST', function(done){
}), }),
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd);
@ -79,7 +79,7 @@ it('SHP format, unauthenticated, with custom filename', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd);
@ -105,7 +105,7 @@ it('SHP format, unauthenticated, with custom, dangerous filename', function(done
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var fname = "b_______a"; var fname = "b_______a";
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
@ -132,7 +132,7 @@ it('SHP format, authenticated', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /filename=cartodb-query.zip/gi.test(cd)); assert.equal(true, /filename=cartodb-query.zip/gi.test(cd));
@ -165,7 +165,7 @@ it('SHP format, unauthenticated, with utf8 data', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var tmpfile = '/tmp/myshape.zip'; var tmpfile = '/tmp/myshape.zip';
var err = fs.writeFileSync(tmpfile, res.body, 'binary'); var err = fs.writeFileSync(tmpfile, res.body, 'binary');
@ -192,7 +192,7 @@ it('mixed type geometry', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
assert.equal(res.statusCode, 400, res.statusCode + ': ' +res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' +res.body);
@ -217,7 +217,7 @@ it('errors are not confused with warnings', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
assert.equal(res.statusCode, 400, res.statusCode + ': ' +res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' +res.body);
@ -240,7 +240,7 @@ it('skipfields controls fields included in SHP output', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var tmpfile = '/tmp/myshape.zip'; var tmpfile = '/tmp/myshape.zip';
var err = fs.writeFileSync(tmpfile, res.body, 'binary'); var err = fs.writeFileSync(tmpfile, res.body, 'binary');
@ -259,7 +259,7 @@ it('skipfields controls fields included in SHP output', function(done){
it('SHP format, concurrently', function(done){ it('SHP format, concurrently', function(done){
var concurrency = 1; var concurrency = 1;
var waiting = concurrency; var waiting = concurrency;
function validate(res){ function validate(err, res){
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SHP is not disposed as attachment: ' + cd);
assert.equal(true, /filename=cartodb-query.zip/gi.test(cd)); assert.equal(true, /filename=cartodb-query.zip/gi.test(cd));
@ -307,7 +307,7 @@ it('point with null first', function(done){
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
encoding: 'binary', encoding: 'binary',
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /filename=cartodb-query.zip/gi.test(cd)); assert.equal(true, /filename=cartodb-query.zip/gi.test(cd));
@ -346,7 +346,7 @@ it('point with null first', function(done){
{ {
status: 200 status: 200
}, },
function(res, err) { function(err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }

View File

@ -11,7 +11,7 @@ describe('spatialite query', function(){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=spatialite', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=spatialite',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
assert.equal(res.headers["content-type"], "application/x-sqlite3; charset=utf-8"); assert.equal(res.headers["content-type"], "application/x-sqlite3; charset=utf-8");
var db = new sqlite.Database(':memory:', res.body); var db = new sqlite.Database(':memory:', res.body);
@ -29,7 +29,7 @@ describe('spatialite query', function(){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=spatialite&filename=manolo', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=spatialite&filename=manolo',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
assert.equal(res.headers["content-type"], "application/x-sqlite3; charset=utf-8"); assert.equal(res.headers["content-type"], "application/x-sqlite3; charset=utf-8");
assert.notEqual(res.headers["content-disposition"].indexOf("manolo.sqlite"), -1); assert.notEqual(res.headers["content-disposition"].indexOf("manolo.sqlite"), -1);
done(); done();
@ -41,7 +41,7 @@ describe('spatialite query', function(){
url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=spatialite', url: '/api/v1/sql?q=SELECT%20*%20FROM%20untitle_table_4%20LIMIT%201&format=spatialite',
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res) { },{ }, function(err, res) {
var db = new sqlite.Database(':memory:', res.body); var db = new sqlite.Database(':memory:', res.body);
var schemaQuery = "SELECT name, sql FROM sqlite_master WHERE type='table' ORDER BY name"; var schemaQuery = "SELECT name, sql FROM sqlite_master WHERE type='table' ORDER BY name";
var qr = db.get(schemaQuery, function(err){ var qr = db.get(schemaQuery, function(err){

View File

@ -15,7 +15,7 @@ it('GET /api/v1/sql with SVG format', function(done){
url: '/api/v1/sql?' + query, url: '/api/v1/sql?' + query,
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.ok(/filename=cartodb-query.svg/gi.test(cd), cd); assert.ok(/filename=cartodb-query.svg/gi.test(cd), cd);
@ -36,7 +36,7 @@ it('POST /api/v1/sql with SVG format', function(done){
data: query, data: query,
headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' }, headers: {host: 'vizzuality.cartodb.com', 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST' method: 'POST'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SVG is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SVG is not disposed as attachment: ' + cd);
@ -58,7 +58,7 @@ it('GET /api/v1/sql with SVG format and custom filename', function(done){
url: '/api/v1/sql?' + query, url: '/api/v1/sql?' + query,
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.ok(/filename=mysvg.svg/gi.test(cd), cd); assert.ok(/filename=mysvg.svg/gi.test(cd), cd);
@ -78,7 +78,7 @@ it('GET /api/v1/sql with SVG format and centered point', function(done){
url: '/api/v1/sql?' + query, url: '/api/v1/sql?' + query,
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.ok(/filename=cartodb-query.svg/gi.test(cd), cd); assert.ok(/filename=cartodb-query.svg/gi.test(cd), cd);
@ -100,7 +100,7 @@ it('GET /api/v1/sql with SVG format and trimmed decimals', function(done){
url: '/api/v1/sql?' + querystring.stringify(queryobj), url: '/api/v1/sql?' + querystring.stringify(queryobj),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.ok(/filename=cartodb-query.svg/gi.test(cd), cd); assert.ok(/filename=cartodb-query.svg/gi.test(cd), cd);
@ -113,7 +113,7 @@ it('GET /api/v1/sql with SVG format and trimmed decimals', function(done){
url: '/api/v1/sql?' + querystring.stringify(queryobj), url: '/api/v1/sql?' + querystring.stringify(queryobj),
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{}, function(res) { },{}, function(err, res) {
assert.equal(res.statusCode, 200, res.body); assert.equal(res.statusCode, 200, res.body);
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'SVG is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'SVG is not disposed as attachment: ' + cd);
@ -138,7 +138,7 @@ it('SVG format with "the_geom" in skipfields', function(done){
url: '/api/v1/sql?' + query, url: '/api/v1/sql?' + query,
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.deepEqual(res.headers['content-disposition'], 'inline'); assert.deepEqual(res.headers['content-disposition'], 'inline');
@ -158,7 +158,7 @@ it('SVG format with missing "the_geom" field', function(done){
url: '/api/v1/sql?' + query, url: '/api/v1/sql?' + query,
headers: {host: 'vizzuality.cartodb.com'}, headers: {host: 'vizzuality.cartodb.com'},
method: 'GET' method: 'GET'
},{ }, function(res){ },{ }, function(err, res){
assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 400, res.statusCode + ': ' + res.body);
assert.deepEqual(JSON.parse(res.body), { assert.deepEqual(JSON.parse(res.body), {
error:['column "the_geom" does not exist'] error:['column "the_geom" does not exist']
@ -183,7 +183,7 @@ it('SVG format with missing "the_geom" field', function(done){
{ {
status: 400 status: 400
}, },
function(res) { function(err, res) {
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.deepEqual(Object.keys(parsedBody), ['error']); assert.deepEqual(Object.keys(parsedBody), ['error']);
assert.deepEqual(parsedBody.error, ["division by zero"]); assert.deepEqual(parsedBody.error, ["division by zero"]);

View File

@ -34,7 +34,7 @@ it('GET two polygons sharing an edge as topojson', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'TOPOJSON is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'TOPOJSON is not disposed as attachment: ' + cd);
assert.equal(true, /filename=cartodb-query.topojson/gi.test(cd)); assert.equal(true, /filename=cartodb-query.topojson/gi.test(cd));
@ -139,7 +139,7 @@ it('null geometries', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
var cd = res.header('Content-Disposition'); var cd = res.header('Content-Disposition');
assert.equal(true, /^attachment/.test(cd), 'TOPOJSON is not disposed as attachment: ' + cd); assert.equal(true, /^attachment/.test(cd), 'TOPOJSON is not disposed as attachment: ' + cd);
assert.equal(true, /filename=cartodb-query.topojson/gi.test(cd)); assert.equal(true, /filename=cartodb-query.topojson/gi.test(cd));
@ -199,7 +199,7 @@ it('null geometries', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.equal(parsedBody.objects[0].properties.gid, 1, 'gid was expected property'); assert.equal(parsedBody.objects[0].properties.gid, 1, 'gid was expected property');
assert.ok(!parsedBody.objects[0].properties.name); assert.ok(!parsedBody.objects[0].properties.name);
@ -220,7 +220,7 @@ it('null geometries', function(done){
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body); assert.equal(res.statusCode, 200, res.statusCode + ': ' + res.body);
var didRunJsonCallback = false; var didRunJsonCallback = false;
// jshint ignore:start // jshint ignore:start
@ -252,7 +252,7 @@ it('null geometries', function(done){
{ {
status: 400 status: 400
}, },
function(res) { function(err, res) {
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.deepEqual(Object.keys(parsedBody), ['error']); assert.deepEqual(Object.keys(parsedBody), ['error']);
assert.deepEqual(parsedBody.error, ["division by zero"]); assert.deepEqual(parsedBody.error, ["division by zero"]);

View File

@ -34,15 +34,12 @@ it('aborts request', function(done){
var timeout; var timeout;
step( step(
function sendQuery() { function sendQuery() {
var next = this;
assert.response(server, { assert.response(server, {
url: '/api/v1/sql?q=SELECT+1', url: '/api/v1/sql?q=SELECT+1',
method: 'GET', method: 'GET',
timeout: 1, timeout: 1,
headers: {host: 'vizzuality.localhost' } headers: {host: 'vizzuality.localhost' }
},{}, function(res, err) { },{}, this);
next(err, res);
});
}, },
function checkResponse(err/*, res*/) { function checkResponse(err/*, res*/) {
assert(err); // expect timeout assert(err); // expect timeout

View File

@ -31,7 +31,7 @@ describe('health checks', function() {
{ {
status: 200 status: 200
}, },
function(res, err) { function(err, res) {
assert.ok(!err); assert.ok(!err);
var parsed = JSON.parse(res.body); var parsed = JSON.parse(res.body);
@ -50,7 +50,7 @@ describe('health checks', function() {
{ {
status: 200 status: 200
}, },
function(res, err) { function(err, res) {
assert.ok(!err); assert.ok(!err);
var parsed = JSON.parse(res.body); var parsed = JSON.parse(res.body);

View File

@ -28,7 +28,7 @@ describe('Batch API callback templates', function () {
data: querystring.stringify(jobDefinition) data: querystring.stringify(jobDefinition)
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -45,7 +45,7 @@ describe('Batch API callback templates', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -62,7 +62,7 @@ describe('Batch API callback templates', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return callback(err); return callback(err);
} }

View File

@ -69,7 +69,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -98,7 +98,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -137,7 +137,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -165,7 +165,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -204,7 +204,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -233,7 +233,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -272,7 +272,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -302,7 +302,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -342,7 +342,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -370,7 +370,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -409,7 +409,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -438,7 +438,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -478,7 +478,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -507,7 +507,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -546,7 +546,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -574,7 +574,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -615,7 +615,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -645,7 +645,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -687,7 +687,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -721,7 +721,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -763,7 +763,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -798,7 +798,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -841,7 +841,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -876,7 +876,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -918,7 +918,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -952,7 +952,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -991,7 +991,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1021,7 +1021,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1061,7 +1061,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1090,7 +1090,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1132,7 +1132,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1167,7 +1167,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1209,7 +1209,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1244,7 +1244,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1287,7 +1287,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1322,7 +1322,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1366,7 +1366,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1402,7 +1402,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1443,7 +1443,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1473,7 +1473,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1512,7 +1512,7 @@ describe('Batch API fallback job', function () {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1549,7 +1549,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1579,7 +1579,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1621,7 +1621,7 @@ describe('Batch API fallback job', function () {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1661,7 +1661,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1697,7 +1697,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1740,7 +1740,7 @@ describe('Batch API fallback job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -1779,7 +1779,7 @@ describe('Batch API fallback job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }

View File

@ -51,7 +51,7 @@ describe('job query limit', function() {
}) })
}, { }, {
status: 400 status: 400
}, function (res) { }, function (err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [expectedErrorMessage(queryTooLong)] }); assert.deepEqual(error, { error: [expectedErrorMessage(queryTooLong)] });
done(); done();
@ -69,7 +69,7 @@ describe('job query limit', function() {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
assert.ok(job.job_id); assert.ok(job.job_id);
done(); done();
@ -87,7 +87,7 @@ describe('job query limit', function() {
}) })
}, { }, {
status: 400 status: 400
}, function (res) { }, function (err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [expectedErrorMessage(queries)] }); assert.deepEqual(error, { error: [expectedErrorMessage(queries)] });
done(); done();
@ -113,7 +113,7 @@ describe('job query limit', function() {
}) })
}, { }, {
status: 400 status: 400
}, function (res) { }, function (err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [expectedErrorMessage(fallbackQueries)] }); assert.deepEqual(error, { error: [expectedErrorMessage(fallbackQueries)] });
done(); done();

View File

@ -36,7 +36,7 @@ describe('job module', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
job = JSON.parse(res.body); job = JSON.parse(res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.ok(job.job_id); assert.ok(job.job_id);
@ -55,7 +55,7 @@ describe('job module', function() {
data: querystring.stringify({}) data: querystring.stringify({})
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [ 'You must indicate a valid SQL' ] }); assert.deepEqual(error, { error: [ 'You must indicate a valid SQL' ] });
done(); done();
@ -72,7 +72,7 @@ describe('job module', function() {
}) })
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [ 'You must indicate a valid SQL' ] }); assert.deepEqual(error, { error: [ 'You must indicate a valid SQL' ] });
done(); done();
@ -89,7 +89,7 @@ describe('job module', function() {
}) })
}, { }, {
status: 401 status: 401
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [ 'permission denied' ] }); assert.deepEqual(error, { error: [ 'permission denied' ] });
done(); done();
@ -106,7 +106,7 @@ describe('job module', function() {
}) })
}, { }, {
status: 404 status: 404
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { assert.deepEqual(error, {
error: [ error: [
@ -125,7 +125,7 @@ describe('job module', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var jobGot = JSON.parse(res.body); var jobGot = JSON.parse(res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.equal(jobGot.query, "SELECT * FROM untitle_table_4"); assert.equal(jobGot.query, "SELECT * FROM untitle_table_4");
@ -141,7 +141,7 @@ describe('job module', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 401 status: 401
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [ 'permission denied' ] }); assert.deepEqual(error, { error: [ 'permission denied' ] });
done(); done();
@ -155,7 +155,7 @@ describe('job module', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
console.log(error); console.log(error);
assert.deepEqual(error , { assert.deepEqual(error , {
@ -172,7 +172,7 @@ describe('job module', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var jobCancelled = JSON.parse(res.body); var jobCancelled = JSON.parse(res.body);
assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8'); assert.deepEqual(res.headers['content-type'], 'application/json; charset=utf-8');
assert.equal(jobCancelled.job_id, job.job_id); assert.equal(jobCancelled.job_id, job.job_id);
@ -190,7 +190,7 @@ describe('job module', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 401 status: 401
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error, { error: [ 'permission denied' ] }); assert.deepEqual(error, { error: [ 'permission denied' ] });
done(); done();
@ -204,7 +204,7 @@ describe('job module', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 404 status: 404
}, function(res) { }, function(err, res) {
var error = JSON.parse(res.body); var error = JSON.parse(res.body);
assert.deepEqual(error , { assert.deepEqual(error , {
error: [ error: [

View File

@ -28,7 +28,7 @@ describe('Batch API query timing', function () {
data: querystring.stringify(jobDefinition) data: querystring.stringify(jobDefinition)
}, { }, {
status: 201 status: 201
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -45,7 +45,7 @@ describe('Batch API query timing', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res, err) { }, function (err, res) {
if (err) { if (err) {
return callback(err); return callback(err);
} }

View File

@ -53,7 +53,7 @@ describe('Use case 1: cancel and modify a done job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
doneJob = JSON.parse(res.body); doneJob = JSON.parse(res.body);
done(); done();
}); });
@ -67,7 +67,7 @@ describe('Use case 1: cancel and modify a done job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res) { }, function (err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "done") { if (job.status === "done") {
clearInterval(interval); clearInterval(interval);
@ -89,7 +89,7 @@ describe('Use case 1: cancel and modify a done job', function () {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var errors = JSON.parse(res.body); var errors = JSON.parse(res.body);
assert.equal(errors.error[0], "Cannot set status from done to cancelled"); assert.equal(errors.error[0], "Cannot set status from done to cancelled");
done(); done();

View File

@ -57,7 +57,7 @@ describe('Use case 10: cancel and modify a done multiquery job', function () {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
doneJob = JSON.parse(res.body); doneJob = JSON.parse(res.body);
done(); done();
}); });
@ -71,7 +71,7 @@ describe('Use case 10: cancel and modify a done multiquery job', function () {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function (res) { }, function (err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "done") { if (job.status === "done") {
clearInterval(interval); clearInterval(interval);
@ -93,7 +93,7 @@ describe('Use case 10: cancel and modify a done multiquery job', function () {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var errors = JSON.parse(res.body); var errors = JSON.parse(res.body);
assert.equal(errors.error[0], "Cannot set status from done to cancelled"); assert.equal(errors.error[0], "Cannot set status from done to cancelled");
done(); done();

View File

@ -54,7 +54,7 @@ describe('Use case 2: cancel a running job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -68,7 +68,7 @@ describe('Use case 2: cancel a running job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "running") { if (job.status === "running") {
clearInterval(interval); clearInterval(interval);
@ -88,7 +88,7 @@ describe('Use case 2: cancel a running job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
cancelledJob = JSON.parse(res.body); cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();
@ -102,7 +102,7 @@ describe('Use case 2: cancel a running job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "cancelled") { if (job.status === "cancelled") {
done(); done();
@ -119,7 +119,7 @@ describe('Use case 2: cancel a running job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var errors = JSON.parse(res.body); var errors = JSON.parse(res.body);
assert.equal(errors.error[0], "Cannot set status from cancelled to cancelled"); assert.equal(errors.error[0], "Cannot set status from cancelled to cancelled");
done(); done();

View File

@ -54,7 +54,7 @@ describe('Use case 3: cancel a pending job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -70,7 +70,7 @@ describe('Use case 3: cancel a pending job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
pendingJob = JSON.parse(res.body); pendingJob = JSON.parse(res.body);
done(); done();
}); });
@ -84,7 +84,7 @@ describe('Use case 3: cancel a pending job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "pending") { if (job.status === "pending") {
clearInterval(interval); clearInterval(interval);
@ -104,7 +104,7 @@ describe('Use case 3: cancel a pending job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var jobGot = JSON.parse(res.body); var jobGot = JSON.parse(res.body);
assert.equal(jobGot.job_id, pendingJob.job_id); assert.equal(jobGot.job_id, pendingJob.job_id);
assert.equal(jobGot.status, "cancelled"); assert.equal(jobGot.status, "cancelled");
@ -119,7 +119,7 @@ describe('Use case 3: cancel a pending job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var cancelledJob = JSON.parse(res.body); var cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();

View File

@ -54,7 +54,7 @@ describe('Use case 4: modify a pending job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -70,7 +70,7 @@ describe('Use case 4: modify a pending job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
pendingJob = JSON.parse(res.body); pendingJob = JSON.parse(res.body);
done(); done();
}); });
@ -84,7 +84,7 @@ describe('Use case 4: modify a pending job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "pending") { if (job.status === "pending") {
clearInterval(interval); clearInterval(interval);
@ -104,7 +104,7 @@ describe('Use case 4: modify a pending job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var cancelledJob = JSON.parse(res.body); var cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();

View File

@ -53,7 +53,7 @@ describe('Use case 5: modify a running job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -67,7 +67,7 @@ describe('Use case 5: modify a running job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "running") { if (job.status === "running") {
clearInterval(interval); clearInterval(interval);
@ -87,7 +87,7 @@ describe('Use case 5: modify a running job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var cancelledJob = JSON.parse(res.body); var cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();

View File

@ -53,7 +53,7 @@ describe('Use case 6: modify a done job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
doneJob = JSON.parse(res.body); doneJob = JSON.parse(res.body);
done(); done();
}); });
@ -67,7 +67,7 @@ describe('Use case 6: modify a done job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "done") { if (job.status === "done") {
clearInterval(interval); clearInterval(interval);

View File

@ -53,7 +53,7 @@ describe('Use case 7: cancel a job with quotes', function() {
}) })
}, { }, {
status: 201 status: 201
}, function (res) { }, function (err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -67,7 +67,7 @@ describe('Use case 7: cancel a job with quotes', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "running") { if (job.status === "running") {
clearInterval(interval); clearInterval(interval);
@ -87,7 +87,7 @@ describe('Use case 7: cancel a job with quotes', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var cancelledJob = JSON.parse(res.body); var cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();

View File

@ -58,7 +58,7 @@ describe('Use case 8: cancel a running multiquery job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -72,7 +72,7 @@ describe('Use case 8: cancel a running multiquery job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "running") { if (job.status === "running") {
clearInterval(interval); clearInterval(interval);
@ -92,7 +92,7 @@ describe('Use case 8: cancel a running multiquery job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
cancelledJob = JSON.parse(res.body); cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();
@ -106,7 +106,7 @@ describe('Use case 8: cancel a running multiquery job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "cancelled") { if (job.status === "cancelled") {
done(); done();
@ -123,7 +123,7 @@ describe('Use case 8: cancel a running multiquery job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 400 status: 400
}, function(res) { }, function(err, res) {
var errors = JSON.parse(res.body); var errors = JSON.parse(res.body);
assert.equal(errors.error[0], "Cannot set status from cancelled to cancelled"); assert.equal(errors.error[0], "Cannot set status from cancelled to cancelled");
done(); done();

View File

@ -57,7 +57,7 @@ describe('Use case 9: modify a pending multiquery job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
runningJob = JSON.parse(res.body); runningJob = JSON.parse(res.body);
done(); done();
}); });
@ -76,7 +76,7 @@ describe('Use case 9: modify a pending multiquery job', function() {
}) })
}, { }, {
status: 201 status: 201
}, function(res) { }, function(err, res) {
pendingJob = JSON.parse(res.body); pendingJob = JSON.parse(res.body);
done(); done();
}); });
@ -90,7 +90,7 @@ describe('Use case 9: modify a pending multiquery job', function() {
method: 'GET' method: 'GET'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var job = JSON.parse(res.body); var job = JSON.parse(res.body);
if (job.status === "pending") { if (job.status === "pending") {
clearInterval(interval); clearInterval(interval);
@ -110,7 +110,7 @@ describe('Use case 9: modify a pending multiquery job', function() {
method: 'DELETE' method: 'DELETE'
}, { }, {
status: 200 status: 200
}, function(res) { }, function(err, res) {
var cancelledJob = JSON.parse(res.body); var cancelledJob = JSON.parse(res.body);
assert.equal(cancelledJob.status, "cancelled"); assert.equal(cancelledJob.status, "cancelled");
done(); done();

View File

@ -48,7 +48,7 @@ describe('last modified header', function() {
{ {
statusCode: 200 statusCode: 200
}, },
function(res) { function(err, res) {
assert.equal(res.headers['last-modified'], scenario.expectedLastModified); assert.equal(res.headers['last-modified'], scenario.expectedLastModified);
done(); done();
} }
@ -77,7 +77,7 @@ describe('last modified header', function() {
{ {
statusCode: 200 statusCode: 200
}, },
function(res) { function(err, res) {
Date.now = dateNowFn; Date.now = dateNowFn;
assert.equal(res.headers['last-modified'], new Date(fixedDateNow).toUTCString()); assert.equal(res.headers['last-modified'], new Date(fixedDateNow).toUTCString());
done(); done();
@ -106,7 +106,7 @@ describe('last modified header', function() {
{ {
statusCode: 200 statusCode: 200
}, },
function(res) { function(err, res) {
Date.now = dateNowFn; Date.now = dateNowFn;
assert.equal(res.headers['last-modified'], new Date(fixedDateNow).toUTCString()); assert.equal(res.headers['last-modified'], new Date(fixedDateNow).toUTCString());
done(); done();

View File

@ -105,7 +105,7 @@ describe('Logging SQL query on POST requests', function() {
return result; return result;
}; };
assert.response(server, scenario.request, RESPONSE_OK, function(res, err) { assert.response(server, scenario.request, RESPONSE_OK, function(err, res) {
assert.ok(!err); assert.ok(!err);
assert.equal(called, 1); assert.equal(called, 1);
@ -137,7 +137,7 @@ describe('Logging SQL query on POST requests', function() {
} }
}, },
RESPONSE_OK, RESPONSE_OK,
function(res, err) { function(err) {
assert.ok(!err); assert.ok(!err);
assert.equal(called, 1); assert.equal(called, 1);

View File

@ -17,7 +17,7 @@ describe('query-tables-api', function() {
{ {
status: 200 status: 200
}, },
function(res) { function(err, res) {
callback(null, JSON.parse(res.body)); callback(null, JSON.parse(res.body));
} }
); );
@ -38,7 +38,7 @@ describe('query-tables-api', function() {
}; };
it('should create a key in affected tables cache', function(done) { it('should create a key in affected tables cache', function(done) {
assert.response(server, request, RESPONSE_OK, function(res, err) { assert.response(server, request, RESPONSE_OK, function(err, res) {
assert.ok(!err, err); assert.ok(!err, err);
getCacheStatus(function(err, cacheStatus) { getCacheStatus(function(err, cacheStatus) {
@ -52,7 +52,7 @@ describe('query-tables-api', function() {
}); });
it('should use cache to retrieve affected tables', function(done) { it('should use cache to retrieve affected tables', function(done) {
assert.response(server, request, RESPONSE_OK, function(res, err) { assert.response(server, request, RESPONSE_OK, function(err, res) {
assert.ok(!err, err); assert.ok(!err, err);
getCacheStatus(function(err, cacheStatus) { getCacheStatus(function(err, cacheStatus) {
@ -76,7 +76,7 @@ describe('query-tables-api', function() {
}, },
method: 'GET' method: 'GET'
}; };
assert.response(server, authenticatedRequest, RESPONSE_OK, function(res, err) { assert.response(server, authenticatedRequest, RESPONSE_OK, function(err) {
assert.ok(!err, err); assert.ok(!err, err);
getCacheStatus(function(err, cacheStatus) { getCacheStatus(function(err, cacheStatus) {

View File

@ -26,13 +26,13 @@ describe('regressions', function() {
}; };
assert.response(server, createRequest('CREATE TABLE "foo.bar" (a int);'), responseOk, assert.response(server, createRequest('CREATE TABLE "foo.bar" (a int);'), responseOk,
function(res, err) { function(err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
assert.response(server, createRequest('INSERT INTO "foo.bar" (a) values (1), (2)'), responseOk, assert.response(server, createRequest('INSERT INTO "foo.bar" (a) values (1), (2)'), responseOk,
function(res, err) { function(err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }
@ -40,7 +40,7 @@ describe('regressions', function() {
assert.equal(parsedBody.total_rows, 2); assert.equal(parsedBody.total_rows, 2);
assert.response(server, createRequest('SELECT * FROM "foo.bar"'), responseOk, assert.response(server, createRequest('SELECT * FROM "foo.bar"'), responseOk,
function(res, err) { function(err, res) {
if (err) { if (err) {
return done(err); return done(err);
} }

View File

@ -35,7 +35,7 @@ describe('stream-responses', function() {
server, server,
createFailingQueryRequest(), createFailingQueryRequest(),
okResponse, okResponse,
function(res) { function(err, res) {
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.equal(parsedBody.rows.length, 2); assert.equal(parsedBody.rows.length, 2);
assert.deepEqual(parsedBody.fields, { assert.deepEqual(parsedBody.fields, {
@ -57,7 +57,7 @@ describe('stream-responses', function() {
server, server,
createFailingQueryRequest('geojson'), createFailingQueryRequest('geojson'),
okResponse, okResponse,
function(res) { function(err, res) {
var parsedBody = JSON.parse(res.body); var parsedBody = JSON.parse(res.body);
assert.equal(parsedBody.features.length, 2); assert.equal(parsedBody.features.length, 2);
assert.deepEqual(parsedBody.error, ["division by zero"]); assert.deepEqual(parsedBody.error, ["division by zero"]);

View File

@ -40,7 +40,7 @@ describe('Surrogate-Key header', function() {
function tableNamesInSurrogateKeyHeader(expectedTableNames, done) { function tableNamesInSurrogateKeyHeader(expectedTableNames, done) {
return function(res) { return function(err, res) {
surrogateKeyHasTables(res.headers['surrogate-key'], expectedTableNames); surrogateKeyHasTables(res.headers['surrogate-key'], expectedTableNames);
done(); done();
}; };
@ -84,7 +84,7 @@ describe('Surrogate-Key header', function() {
it('should not add header for functions', function(done) { it('should not add header for functions', function(done) {
var sql = "SELECT format('%s', 'wadus')"; var sql = "SELECT format('%s', 'wadus')";
assert.response(server, createGetRequest(sql), RESPONSE_OK, function(res) { assert.response(server, createGetRequest(sql), RESPONSE_OK, function(err, res) {
assert.ok(!res.headers.hasOwnProperty('surrogate-key'), res.headers['surrogate-key']); assert.ok(!res.headers.hasOwnProperty('surrogate-key'), res.headers['surrogate-key']);
done(); done();
}); });
@ -92,7 +92,7 @@ describe('Surrogate-Key header', function() {
it('should not add header for CDB_QueryTables', function(done) { it('should not add header for CDB_QueryTables', function(done) {
var sql = "SELECT CDB_QueryTablesText('select * from untitle_table_4')"; var sql = "SELECT CDB_QueryTablesText('select * from untitle_table_4')";
assert.response(server, createGetRequest(sql), RESPONSE_OK, function(res) { assert.response(server, createGetRequest(sql), RESPONSE_OK, function(err, res) {
assert.ok(!res.headers.hasOwnProperty('surrogate-key'), res.headers['surrogate-key']); assert.ok(!res.headers.hasOwnProperty('surrogate-key'), res.headers['surrogate-key']);
done(); done();
}); });
@ -100,7 +100,7 @@ describe('Surrogate-Key header', function() {
it('should not add header for non table results', function(done) { it('should not add header for non table results', function(done) {
var sql = "SELECT 'wadus'::text"; var sql = "SELECT 'wadus'::text";
assert.response(server, createGetRequest(sql), RESPONSE_OK, function(res) { assert.response(server, createGetRequest(sql), RESPONSE_OK, function(err, res) {
assert.ok(!res.headers.hasOwnProperty('surrogate-key'), res.headers['surrogate-key']); assert.ok(!res.headers.hasOwnProperty('surrogate-key'), res.headers['surrogate-key']);
done(); done();
}); });

View File

@ -29,14 +29,11 @@ it('after configured milliseconds', function(done){
var server = require('../../app/server')(); var server = require('../../app/server')();
step( step(
function sendLongQuery() { function sendLongQuery() {
var next = this;
assert.response(server, { assert.response(server, {
url: '/api/v1/sql?q=SELECT+count(*)+FROM+generate_series(1,100000)', url: '/api/v1/sql?q=SELECT+count(*)+FROM+generate_series(1,100000)',
method: 'GET', method: 'GET',
headers: {host: 'vizzuality.localhost' } headers: {host: 'vizzuality.localhost' }
},{}, function(res, err) { },{}, this);
next(err, res);
});
}, },
function checkResponse(err/*, res*/) { function checkResponse(err/*, res*/) {
assert.ok(err); assert.ok(err);

View File

@ -39,7 +39,7 @@ describe('X-Cache-Channel header', function() {
} }
function tableNamesInCacheChannelHeader(expectedTableNames, done) { function tableNamesInCacheChannelHeader(expectedTableNames, done) {
return function(res) { return function(err, res) {
xCacheChannelHeaderHasTables(res.headers['x-cache-channel'], expectedTableNames); xCacheChannelHeaderHasTables(res.headers['x-cache-channel'], expectedTableNames);
done(); done();
}; };
@ -83,7 +83,7 @@ describe('X-Cache-Channel header', function() {
it('should not add header for functions', function(done) { it('should not add header for functions', function(done) {
var sql = "SELECT format('%s', 'wadus')"; var sql = "SELECT format('%s', 'wadus')";
assert.response(server, createGetRequest(sql), RESPONSE_OK, function(res) { assert.response(server, createGetRequest(sql), RESPONSE_OK, function(err, res) {
assert.ok(!res.headers.hasOwnProperty('x-cache-channel'), res.headers['x-cache-channel']); assert.ok(!res.headers.hasOwnProperty('x-cache-channel'), res.headers['x-cache-channel']);
done(); done();
}); });
@ -91,7 +91,7 @@ describe('X-Cache-Channel header', function() {
it('should not add header for CDB_QueryTables', function(done) { it('should not add header for CDB_QueryTables', function(done) {
var sql = "SELECT CDB_QueryTablesText('select * from untitle_table_4')"; var sql = "SELECT CDB_QueryTablesText('select * from untitle_table_4')";
assert.response(server, createGetRequest(sql), RESPONSE_OK, function(res) { assert.response(server, createGetRequest(sql), RESPONSE_OK, function(err, res) {
assert.ok(!res.headers.hasOwnProperty('x-cache-channel'), res.headers['x-cache-channel']); assert.ok(!res.headers.hasOwnProperty('x-cache-channel'), res.headers['x-cache-channel']);
done(); done();
}); });
@ -99,7 +99,7 @@ describe('X-Cache-Channel header', function() {
it('should not add header for non table results', function(done) { it('should not add header for non table results', function(done) {
var sql = "SELECT 'wadus'::text"; var sql = "SELECT 'wadus'::text";
assert.response(server, createGetRequest(sql), RESPONSE_OK, function(res) { assert.response(server, createGetRequest(sql), RESPONSE_OK, function(err, res) {
assert.ok(!res.headers.hasOwnProperty('x-cache-channel'), res.headers['x-cache-channel']); assert.ok(!res.headers.hasOwnProperty('x-cache-channel'), res.headers['x-cache-channel']);
done(); done();
}); });

View File

@ -9,7 +9,7 @@ var assert = module.exports = exports = require('assert');
* @param {Server} server * @param {Server} server
* @param {Object} req * @param {Object} req
* @param {Object|Function} res * @param {Object|Function} res
* @param {String|Function} msg * @param {String|Function|Object} msg
*/ */
assert.response = function(server, req, res, msg){ assert.response = function(server, req, res, msg){
var port = 5555; var port = 5555;
@ -106,7 +106,7 @@ assert.response = function(server, req, res, msg){
request.on('error', function(err){ request.on('error', function(err){
check(); check();
callback(null, err); callback(err);
}); });
request.on('response', function(response){ request.on('response', function(response){
@ -163,7 +163,7 @@ assert.response = function(server, req, res, msg){
} }
} }
callback(response); callback(null, response);
}); });
}); });