From 2ff33b501065e28ae988975a9059cadef7625601 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Thu, 26 May 2016 11:02:43 +0200 Subject: [PATCH 1/4] Generic MapConfig adapter can receive an arbitrary number of adapters --- lib/cartodb/models/mapconfig/adapter/index.js | 4 ++-- lib/cartodb/server.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/index.js b/lib/cartodb/models/mapconfig/adapter/index.js index f7b49ebc..bf64e611 100644 --- a/lib/cartodb/models/mapconfig/adapter/index.js +++ b/lib/cartodb/models/mapconfig/adapter/index.js @@ -1,7 +1,7 @@ 'use strict'; -function MapConfigAdapter(adapters) { - this.adapters = adapters; +function MapConfigAdapter() { + this.adapters = Array.apply(null, arguments); } module.exports = MapConfigAdapter; diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js index 837b8a74..825ae2b7 100644 --- a/lib/cartodb/server.js +++ b/lib/cartodb/server.js @@ -156,13 +156,13 @@ module.exports = function(serverOptions) { var turboCartoParser = new TurboCartoParser(pgQueryRunner); - var mapConfigAdapter = new MapConfigAdapter([ + var mapConfigAdapter = new MapConfigAdapter( new MapConfigNamedLayersAdapter(templateMaps, pgConnection), new SqlWrapMapConfigAdapter(), new AnalysisMapConfigAdapter(analysisBackend), new MapConfigOverviewsAdapter(overviewsMetadataApi, filterStatsApi), new TurboCartoAdapter(turboCartoParser) - ]); + ); var namedMapProviderCache = new NamedMapProviderCache( templateMaps, From f7c528277bacd2c3b323aa6d9fcfb84945871d98 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Thu, 26 May 2016 11:23:19 +0200 Subject: [PATCH 2/4] Add tests for generic MapConfig adapter --- lib/cartodb/models/mapconfig/adapter/index.js | 4 +- test/unit/cartodb/mapconfig/adapter.test.js | 76 +++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 test/unit/cartodb/mapconfig/adapter.test.js diff --git a/lib/cartodb/models/mapconfig/adapter/index.js b/lib/cartodb/models/mapconfig/adapter/index.js index bf64e611..70704bea 100644 --- a/lib/cartodb/models/mapconfig/adapter/index.js +++ b/lib/cartodb/models/mapconfig/adapter/index.js @@ -1,7 +1,7 @@ 'use strict'; -function MapConfigAdapter() { - this.adapters = Array.apply(null, arguments); +function MapConfigAdapter(adapters) { + this.adapters = Array.isArray(adapters) ? adapters : Array.apply(null, arguments); } module.exports = MapConfigAdapter; diff --git a/test/unit/cartodb/mapconfig/adapter.test.js b/test/unit/cartodb/mapconfig/adapter.test.js new file mode 100644 index 00000000..872cb3f7 --- /dev/null +++ b/test/unit/cartodb/mapconfig/adapter.test.js @@ -0,0 +1,76 @@ +//require('../../../support/test_helper'); +var assert = require('assert'); + +var MapConfigAdapter = require('../../../../lib/cartodb/models/mapconfig/adapter'); + +describe('MapConfigAdapter', function() { + var user = 'wadus'; + function requestMapConfig() { + return { + val: 0 + }; + } + function params() { + return {}; + } + function context() { + return {}; + } + + function IncValMapConfigAdapter() { + this.getMapConfig = function(user, requestMapConfig, params, context, callback) { + requestMapConfig.val += 1; + return callback(null, requestMapConfig); + }; + } + + function validateMapConfig(adapter, expectedNumAdapters, validatorFn, callback) { + assert.equal(adapter.adapters.length, expectedNumAdapters); + adapter.getMapConfig(user, requestMapConfig(), params(), context(), function(err, mapConfig) { + validatorFn(mapConfig); + return callback(err); + }); + } + + it('works with no adapters', function(done) { + var adapter = new MapConfigAdapter(); + validateMapConfig(adapter, 0, function(mapConfig) { + assert.equal(mapConfig.val, 0); + }, done); + }); + + it('works with no adapters as empty array', function(done) { + var adapter = new MapConfigAdapter([]); + validateMapConfig(adapter, 0, function(mapConfig) { + assert.equal(mapConfig.val, 0); + }, done); + }); + + it('works with basic adapter', function(done) { + var adapter = new MapConfigAdapter(new IncValMapConfigAdapter()); + validateMapConfig(adapter, 1, function(mapConfig) { + assert.equal(mapConfig.val, 1); + }, done); + }); + + it('works with basic adapter as array', function(done) { + var adapter = new MapConfigAdapter([new IncValMapConfigAdapter()]); + validateMapConfig(adapter, 1, function(mapConfig) { + assert.equal(mapConfig.val, 1); + }, done); + }); + + it('works with several adapters', function(done) { + var adapter = new MapConfigAdapter(new IncValMapConfigAdapter(), new IncValMapConfigAdapter()); + validateMapConfig(adapter, 2, function(mapConfig) { + assert.equal(mapConfig.val, 2); + }, done); + }); + + it('works with several adapters as array', function(done) { + var adapter = new MapConfigAdapter([new IncValMapConfigAdapter(), new IncValMapConfigAdapter()]); + validateMapConfig(adapter, 2, function(mapConfig) { + assert.equal(mapConfig.val, 2); + }, done); + }); +}); From 5c3dd8b09d72ac1a74dcdc50cf27eac23b589fdb Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Thu, 26 May 2016 11:30:28 +0200 Subject: [PATCH 3/4] validate execution order --- test/unit/cartodb/mapconfig/adapter.test.js | 45 +++++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/test/unit/cartodb/mapconfig/adapter.test.js b/test/unit/cartodb/mapconfig/adapter.test.js index 872cb3f7..a2a1710c 100644 --- a/test/unit/cartodb/mapconfig/adapter.test.js +++ b/test/unit/cartodb/mapconfig/adapter.test.js @@ -17,12 +17,16 @@ describe('MapConfigAdapter', function() { return {}; } - function IncValMapConfigAdapter() { - this.getMapConfig = function(user, requestMapConfig, params, context, callback) { - requestMapConfig.val += 1; - return callback(null, requestMapConfig); + function createAdapter(valOperatorFn) { + return function ValMapConfigAdapter() { + this.getMapConfig = function(user, requestMapConfig, params, context, callback) { + requestMapConfig.val = valOperatorFn(requestMapConfig.val); + return callback(null, requestMapConfig); + }; }; } + var IncValMapConfigAdapter = createAdapter(function(val) { return val + 1; }); + var Mul2ValMapConfigAdapter = createAdapter(function(val) { return val * 2; }); function validateMapConfig(adapter, expectedNumAdapters, validatorFn, callback) { assert.equal(adapter.adapters.length, expectedNumAdapters); @@ -73,4 +77,37 @@ describe('MapConfigAdapter', function() { assert.equal(mapConfig.val, 2); }, done); }); + + it('should execute in order 1', function(done) { + var adapter = new MapConfigAdapter([new Mul2ValMapConfigAdapter(), new IncValMapConfigAdapter()]); + validateMapConfig(adapter, 2, function(mapConfig) { + assert.equal(mapConfig.val, 1); + }, done); + }); + + it('should execute in order 2', function(done) { + var adapter = new MapConfigAdapter([new IncValMapConfigAdapter(), new Mul2ValMapConfigAdapter()]); + validateMapConfig(adapter, 2, function(mapConfig) { + assert.equal(mapConfig.val, 2); + }, done); + }); + + it('should execute in order 3', function(done) { + var adapter = new MapConfigAdapter([new Mul2ValMapConfigAdapter(), new Mul2ValMapConfigAdapter()]); + validateMapConfig(adapter, 2, function(mapConfig) { + assert.equal(mapConfig.val, 0); + }, done); + }); + + it('should execute in order 4', function(done) { + var Mul5ValMapConfigAdapter = createAdapter(function(val) { return val * 5; }); + var adapter = new MapConfigAdapter( + new IncValMapConfigAdapter(), + new Mul2ValMapConfigAdapter(), + new Mul5ValMapConfigAdapter() + ); + validateMapConfig(adapter, 3, function(mapConfig) { + assert.equal(mapConfig.val, 10); + }, done); + }); }); From c667e64d7f9e4fe9125ff7db1e5bbb423ebe7c28 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Thu, 26 May 2016 11:36:03 +0200 Subject: [PATCH 4/4] Simplify test as we just validate val value --- test/unit/cartodb/mapconfig/adapter.test.js | 44 ++++++--------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/test/unit/cartodb/mapconfig/adapter.test.js b/test/unit/cartodb/mapconfig/adapter.test.js index a2a1710c..eeb71896 100644 --- a/test/unit/cartodb/mapconfig/adapter.test.js +++ b/test/unit/cartodb/mapconfig/adapter.test.js @@ -28,75 +28,57 @@ describe('MapConfigAdapter', function() { var IncValMapConfigAdapter = createAdapter(function(val) { return val + 1; }); var Mul2ValMapConfigAdapter = createAdapter(function(val) { return val * 2; }); - function validateMapConfig(adapter, expectedNumAdapters, validatorFn, callback) { + function validateMapConfig(adapter, expectedNumAdapters, expectedVal, callback) { assert.equal(adapter.adapters.length, expectedNumAdapters); adapter.getMapConfig(user, requestMapConfig(), params(), context(), function(err, mapConfig) { - validatorFn(mapConfig); + assert.equal(mapConfig.val, expectedVal); return callback(err); }); } it('works with no adapters', function(done) { var adapter = new MapConfigAdapter(); - validateMapConfig(adapter, 0, function(mapConfig) { - assert.equal(mapConfig.val, 0); - }, done); + validateMapConfig(adapter, 0, 0, done); }); it('works with no adapters as empty array', function(done) { var adapter = new MapConfigAdapter([]); - validateMapConfig(adapter, 0, function(mapConfig) { - assert.equal(mapConfig.val, 0); - }, done); + validateMapConfig(adapter, 0, 0, done); }); it('works with basic adapter', function(done) { var adapter = new MapConfigAdapter(new IncValMapConfigAdapter()); - validateMapConfig(adapter, 1, function(mapConfig) { - assert.equal(mapConfig.val, 1); - }, done); + validateMapConfig(adapter, 1, 1, done); }); it('works with basic adapter as array', function(done) { var adapter = new MapConfigAdapter([new IncValMapConfigAdapter()]); - validateMapConfig(adapter, 1, function(mapConfig) { - assert.equal(mapConfig.val, 1); - }, done); + validateMapConfig(adapter, 1, 1, done); }); it('works with several adapters', function(done) { var adapter = new MapConfigAdapter(new IncValMapConfigAdapter(), new IncValMapConfigAdapter()); - validateMapConfig(adapter, 2, function(mapConfig) { - assert.equal(mapConfig.val, 2); - }, done); + validateMapConfig(adapter, 2, 2, done); }); it('works with several adapters as array', function(done) { var adapter = new MapConfigAdapter([new IncValMapConfigAdapter(), new IncValMapConfigAdapter()]); - validateMapConfig(adapter, 2, function(mapConfig) { - assert.equal(mapConfig.val, 2); - }, done); + validateMapConfig(adapter, 2, 2, done); }); it('should execute in order 1', function(done) { var adapter = new MapConfigAdapter([new Mul2ValMapConfigAdapter(), new IncValMapConfigAdapter()]); - validateMapConfig(adapter, 2, function(mapConfig) { - assert.equal(mapConfig.val, 1); - }, done); + validateMapConfig(adapter, 2, 1, done); }); it('should execute in order 2', function(done) { var adapter = new MapConfigAdapter([new IncValMapConfigAdapter(), new Mul2ValMapConfigAdapter()]); - validateMapConfig(adapter, 2, function(mapConfig) { - assert.equal(mapConfig.val, 2); - }, done); + validateMapConfig(adapter, 2, 2, done); }); it('should execute in order 3', function(done) { var adapter = new MapConfigAdapter([new Mul2ValMapConfigAdapter(), new Mul2ValMapConfigAdapter()]); - validateMapConfig(adapter, 2, function(mapConfig) { - assert.equal(mapConfig.val, 0); - }, done); + validateMapConfig(adapter, 2, 0, done); }); it('should execute in order 4', function(done) { @@ -106,8 +88,6 @@ describe('MapConfigAdapter', function() { new Mul2ValMapConfigAdapter(), new Mul5ValMapConfigAdapter() ); - validateMapConfig(adapter, 3, function(mapConfig) { - assert.equal(mapConfig.val, 10); - }, done); + validateMapConfig(adapter, 3, 10, done); }); });