diff --git a/lib/cartodb/template_maps.js b/lib/cartodb/template_maps.js index 419739ce..74f6b81f 100644 --- a/lib/cartodb/template_maps.js +++ b/lib/cartodb/template_maps.js @@ -92,6 +92,11 @@ o._checkInvalidTemplate = function(template) { return new Error("Invalid characters in template name '" + tplname + "'"); } + var invalidError = isInvalidLayergroup(template.layergroup); + if (invalidError) { + return invalidError; + } + var placeholders = template.placeholders || {}; var placeholderKeys = Object.keys(placeholders); @@ -128,6 +133,18 @@ o._checkInvalidTemplate = function(template) { return false; }; +function isInvalidLayergroup(layergroup) { + if (!layergroup) { + return new Error('Missing layergroup'); + } + + if (!_.isArray(layergroup.layers)) { + return new Error('Missing layers array from layergroup config'); + } + + return false; +} + function templateDefaults(template) { var templateAuth = _.defaults({}, template.auth || {}, { method: 'open' diff --git a/test/unit/cartodb/template_maps.test.js b/test/unit/cartodb/template_maps.test.js index 6abda6e3..de973c2c 100644 --- a/test/unit/cartodb/template_maps.test.js +++ b/test/unit/cartodb/template_maps.test.js @@ -16,7 +16,9 @@ suite('template_maps', function() { version:'0.0.1', name: 'first', auth: {}, - layergroup: {} + layergroup: { + layers: [] + } }; var owner = 'me'; @@ -24,7 +26,7 @@ suite('template_maps', function() { var tmap = new TemplateMaps(redis_pool); assert.ok(tmap); var tpl = { version:'6.6.6', - name:'k', auth: {}, layergroup: {} }; + name:'k', auth: {}, layergroup: {layers:[]} }; Step( function() { tmap.addTemplate('me', tpl, this); @@ -44,7 +46,7 @@ suite('template_maps', function() { var tmap = new TemplateMaps(redis_pool); assert.ok(tmap); var tpl = { version:'0.0.1', - auth: {}, layergroup: {} }; + auth: {}, layergroup: {layers:[]} }; Step( function() { tmap.addTemplate('me', tpl, this); @@ -64,7 +66,7 @@ suite('template_maps', function() { var tmap = new TemplateMaps(redis_pool); assert.ok(tmap); var tpl = { version:'0.0.1', - auth: {}, layergroup: {} }; + auth: {}, layergroup: {layers:[]} }; var invalidnames = [ "ab|", "a b", "a@b", "1ab", "_x", "", " x", "x " ]; var testNext = function() { if ( ! invalidnames.length ) { done(); return; } @@ -91,7 +93,7 @@ suite('template_maps', function() { assert.ok(tmap); var tpl = { version:'0.0.1', name: "valid", placeholders: {}, - auth: {}, layergroup: {} }; + auth: {}, layergroup: {layers:[]} }; var invalidnames = [ "ab|", "a b", "a@b", "1ab", "_x", "", " x", "x " ]; var testNext = function() { if ( ! invalidnames.length ) { done(); return; } @@ -119,7 +121,7 @@ suite('template_maps', function() { assert.ok(tmap); var tpl = { version:'0.0.1', name: "valid", placeholders: { v: {} }, - auth: {}, layergroup: {} }; + auth: {}, layergroup: {layers:[]} }; tmap.addTemplate('me', tpl, function(err) { if ( ! err ) { done(new Error("Unexpected success with missing placeholder default")); @@ -139,7 +141,7 @@ suite('template_maps', function() { assert.ok(tmap); var tpl = { version:'0.0.1', name: "valid", placeholders: { v: { default:1 } }, - auth: {}, layergroup: {} }; + auth: {}, layergroup: {layers:[]} }; tmap.addTemplate('me', tpl, function(err) { if ( ! err ) { done(new Error("Unexpected success with missing placeholder type")); @@ -161,7 +163,7 @@ suite('template_maps', function() { assert.ok(tmap); var tpl = { version:'0.0.1', name: "invalid_auth1", placeholders: { }, - auth: { method: 'token' }, layergroup: {} }; + auth: { method: 'token' }, layergroup: {layers:[]} }; tmap.addTemplate('me', tpl, function(err) { if ( ! err ) { done(new Error("Unexpected success with invalid token auth (undefined tokens)")); @@ -182,7 +184,7 @@ suite('template_maps', function() { var expected_failure = false; var tpl_id; var tpl = { version:'0.0.1', - name: 'first', auth: {}, layergroup: {} }; + name: 'first', auth: {}, layergroup: {layers:[]} }; Step( function() { tmap.addTemplate('me', tpl, this); @@ -216,9 +218,9 @@ suite('template_maps', function() { var tmap = new TemplateMaps(redis_pool); assert.ok(tmap); var expected_failure = false; - var tpl1 = { version:'0.0.1', name: 'first', auth: {}, layergroup: {} }; + var tpl1 = { version:'0.0.1', name: 'first', auth: {}, layergroup: {layers:[]} }; var tpl1_id; - var tpl2 = { version:'0.0.1', name: 'second', auth: {}, layergroup: {} }; + var tpl2 = { version:'0.0.1', name: 'second', auth: {}, layergroup: {layers:[]} }; var tpl2_id; Step( function addTemplate1() { @@ -279,7 +281,7 @@ suite('template_maps', function() { var tpl = { version:'0.0.1', name: 'first', auth: { method: 'open' }, - layergroup: {} + layergroup: {layers:[]} }; var tpl_id; Step( @@ -434,7 +436,7 @@ suite('template_maps', function() { max_user_templates: 2 }); assert.ok(tmap); - var tpl = { version:'0.0.1', auth: {}, layergroup: {} }; + var tpl = { version:'0.0.1', auth: {}, layergroup: {layers:[]} }; var expectErr = false; var idMe = []; var idYou = [];