'use strict'; require('../../support/test-helper'); var assert = require('../../support/assert'); var TestClient = require('../../support/test-client'); var dot = require('dot'); var debug = require('debug')('windshaft:cartodb:test'); describe('analysis-layers use cases', function () { var multitypeStyleTemplate = dot.template( `#points['mapnik::geometry_type'=1] { marker-fill-opacity: {{=it._opacity}}; marker-line-color: #FFF; marker-line-width: 0.5; marker-line-opacity: {{=it._opacity}}; marker-placement: point; marker-type: ellipse; marker-width: 8; marker-fill: {{=it._color}}; marker-allow-overlap: true; } #lines['mapnik::geometry_type'=2] { line-color: {{=it._color}}; line-width: 2; line-opacity: {{=it._opacity}}; } #polygons['mapnik::geometry_type'=3] { polygon-fill: {{=it._color}}; polygon-opacity: {{=it._opacity}}; line-color: #FFF; line-width: 0.5; line-opacity: {{=it._opacity}}; }` ); function cartocss (color, opacity) { return multitypeStyleTemplate({ _color: color || '#F11810', _opacity: Number.isFinite(opacity) ? opacity : 1 }); } function mapConfig (layers, dataviews, analysis) { return { version: '1.5.0', layers: layers, dataviews: dataviews || {}, analyses: analysis || [] }; } var DEFAULT_MULTITYPE_STYLE = cartocss(); var TILE_ANALYSIS_TABLES = { z: 14, x: 8023, y: 6177 }; var pointInPolygonDef = { id: 'a1', type: 'point-in-polygon', params: { points_source: { type: 'source', params: { query: 'select * from analysis_rent_listings' } }, polygons_source: { type: 'buffer', params: { source: { type: 'source', params: { query: 'select * from analysis_banks' } }, radius: 250 } } } }; var bufferDef = { id: 'b1', type: 'buffer', params: { source: { type: 'source', params: { query: 'select * from analysis_banks' } }, radius: 250 } }; var useCases = [ { desc: '1 mapnik layer', mapConfig: { version: '1.5.0', layers: [ { type: 'cartodb', options: { sql: 'select * from analysis_rent_listings', cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } } ] } }, { desc: '2 mapnik layers', mapConfig: mapConfig([ { type: 'cartodb', options: { sql: 'select * from analysis_banks', cartocss: cartocss('#2167AB'), cartocss_version: '2.3.0' } }, { type: 'cartodb', options: { sql: 'select * from analysis_rent_listings', cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } } ]) }, { desc: 'rent listings + buffer over atm-machines', mapConfig: mapConfig([ { type: 'cartodb', options: { sql: 'select * from analysis_rent_listings', cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } }, { type: 'cartodb', options: { source: { id: 'b1' }, cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } } ], {}, [ bufferDef ] ) }, { desc: 'rent listings + point-in-polygon from buffer atm-machines and rent listings', mapConfig: mapConfig([ { type: 'cartodb', options: { sql: 'select * from analysis_rent_listings', cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } }, { type: 'cartodb', options: { source: { id: 'a1' }, cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } } ], {}, [ pointInPolygonDef ] ) }, { desc: 'point-in-polygon from buffer atm-machines and rent listings + rent listings', mapConfig: mapConfig( [ { type: 'cartodb', options: { source: { id: 'a1' }, cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } }, { type: 'cartodb', options: { sql: 'select * from analysis_rent_listings', cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } } ], {}, [ pointInPolygonDef ] ) }, { desc: 'buffer + point-in-polygon from buffer atm-machines and rent listings + rent listings', mapConfig: mapConfig( [ { type: 'cartodb', options: { sql: 'select * from analysis_rent_listings', cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } }, { type: 'cartodb', options: { source: { id: 'a1' }, cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } }, { type: 'cartodb', options: { source: { id: 'b1' }, cartocss: DEFAULT_MULTITYPE_STYLE, cartocss_version: '2.3.0' } } ], {}, [ bufferDef, pointInPolygonDef ] ) } ]; useCases.forEach(function (useCase) { if (useCase.skip) { return debug(JSON.stringify(useCase.mapConfig, null, 4)); } it(`should implement use case: '${useCase.desc}'`, function (done) { var testClient = new TestClient(useCase.mapConfig, 1234); var tile = useCase.tile || TILE_ANALYSIS_TABLES; testClient.getTile(tile.z, tile.x, tile.y, function (err, res, image) { assert.ok(!err, err); // image.save('/tmp/tests/' + imageIdx + '---' + useCase.desc.replace(/\s/g, '-') + '.png'); assert.strictEqual(image.width(), 256); testClient.drain(done); }); }); }); });