diff --git a/app/models/formats/geojson.js b/app/models/formats/geojson.js index b3b57caa..12baf16b 100644 --- a/app/models/formats/geojson.js +++ b/app/models/formats/geojson.js @@ -57,6 +57,11 @@ GeoJsonFormat.prototype.handleQueryEnd = function(result) { this.callback(this.error); return; } + + if ( ! this._streamingStarted ) { + this.startStreaming(); + } + this.buffer += ']}'; // end of features if (this.opts.callback) { this.buffer += ')'; diff --git a/test/acceptance/export/geojson.js b/test/acceptance/export/geojson.js index 229ddb82..003d5ab0 100644 --- a/test/acceptance/export/geojson.js +++ b/test/acceptance/export/geojson.js @@ -200,4 +200,21 @@ test('stream response handle errors', function(done) { }); }); +test('stream response with empty result set has valid output', function(done) { + assert.response(app, { + url: '/api/v1/sql?' + querystring.stringify({ + q: "SELECT 1 as gid, null::geometry as the_geom limit 0", + format: 'geojson' + }), + headers: {host: 'vizzuality.cartodb.com'}, + method: 'GET' + },{ }, function(res){ + assert.equal(res.statusCode, 200, res.body); + var geoJson = JSON.parse(res.body); + var expectedGeoJson = {"type": "FeatureCollection", "features": []}; + assert.deepEqual(geoJson, expectedGeoJson); + done(); + }); +}); + });