From e8df09c85b70c61aae6bfe126738f22647945f3f Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Mon, 20 Jun 2016 16:20:48 +0200 Subject: [PATCH] Add support for min, max, and avg operations in aggregation dataview --- NEWS.md | 3 ++ lib/cartodb/models/dataview/aggregation.js | 6 ++- test/acceptance/dataviews/aggregation.js | 59 ++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 test/acceptance/dataviews/aggregation.js diff --git a/NEWS.md b/NEWS.md index 7f2f70d5..842bb8a8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,9 @@ Released 2016-mm-dd +New features: + - Add support for min, max, and avg operations in aggregation dataview #513. + ## 2.49.1 diff --git a/lib/cartodb/models/dataview/aggregation.js b/lib/cartodb/models/dataview/aggregation.js index 4b02f0ee..3b0642b9 100644 --- a/lib/cartodb/models/dataview/aggregation.js +++ b/lib/cartodb/models/dataview/aggregation.js @@ -54,7 +54,10 @@ var CATEGORIES_LIMIT = 6; var VALID_OPERATIONS = { count: [], - sum: ['aggregationColumn'] + sum: ['aggregationColumn'], + avg: ['aggregationColumn'], + min: ['aggregationColumn'], + max: ['aggregationColumn'] }; var TYPE = 'aggregation'; @@ -198,6 +201,7 @@ Aggregation.prototype.format = function(result) { } return { + aggregation: this.aggregation, count: count, nulls: nulls, min: minValue, diff --git a/test/acceptance/dataviews/aggregation.js b/test/acceptance/dataviews/aggregation.js new file mode 100644 index 00000000..2986a174 --- /dev/null +++ b/test/acceptance/dataviews/aggregation.js @@ -0,0 +1,59 @@ +require('../../support/test_helper'); + +var assert = require('../../support/assert'); +var TestClient = require('../../support/test-client'); + +describe('aggregations', function() { + + afterEach(function(done) { + if (this.testClient) { + this.testClient.drain(done); + } else { + done(); + } + }); + + function aggregationOperationMapConfig(operation) { + return { + version: '1.5.0', + layers: [ + { + type: 'mapnik', + options: { + sql: 'select * from populated_places_simple_reduced', + cartocss: '#layer0 { marker-fill: red; marker-width: 10; }', + cartocss_version: '2.0.1', + widgets: { + adm0name: { + type: 'aggregation', + options: { + column: 'adm0name', + aggregation: operation, + aggregationColumn: 'pop_max' + } + } + } + } + } + ] + }; + } + + var operations = ['count', 'sum', 'avg', 'max', 'min']; + + operations.forEach(function(operation) { + it('should be able to use "' + operation + '" as aggregation operation', function(done) { + + this.testClient = new TestClient(aggregationOperationMapConfig(operation)); + this.testClient.getDataview('adm0name', { own_filter: 0 }, function (err, aggregation) { + assert.ok(!err, err); + assert.ok(aggregation); + + assert.equal(aggregation.type, 'aggregation'); + assert.equal(aggregation.aggregation, operation); + + done(); + }); + }); + }); +});