2019-02-27 02:19:44 +08:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
require('../support/test_helper');
|
|
|
|
|
2019-02-27 19:43:26 +08:00
|
|
|
const assert = require('../support/assert');
|
2019-02-27 02:19:44 +08:00
|
|
|
const TestClient = require('../support/test-client');
|
|
|
|
|
|
|
|
const POINTS_SQL_1 = `
|
|
|
|
select
|
|
|
|
x + 4 as cartodb_id,
|
|
|
|
st_setsrid(st_makepoint(x*10, x*10), 4326) as the_geom,
|
|
|
|
st_transform(st_setsrid(st_makepoint(x*10, x*10), 4326), 3857) as the_geom_webmercator,
|
|
|
|
x as value
|
|
|
|
from generate_series(-3, 3) x
|
|
|
|
`;
|
|
|
|
|
|
|
|
const defaultLayers = [{
|
|
|
|
type: 'cartodb',
|
|
|
|
options: {
|
|
|
|
sql: POINTS_SQL_1,
|
2019-02-27 19:43:26 +08:00
|
|
|
aggregation: {
|
|
|
|
threshold: 1
|
|
|
|
}
|
2019-02-27 02:19:44 +08:00
|
|
|
}
|
|
|
|
}];
|
|
|
|
|
|
|
|
function createVectorMapConfig (layers = defaultLayers) {
|
|
|
|
return {
|
|
|
|
version: '1.8.0',
|
|
|
|
layers: layers
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
describe('cluster', function () {
|
2019-02-27 19:43:26 +08:00
|
|
|
describe('resolution = 1', function () {
|
|
|
|
const suite = [
|
|
|
|
{
|
|
|
|
cartodb_id: 1,
|
|
|
|
expected: [ { cartodb_id: 1, value: -3 } ]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cartodb_id: 2,
|
|
|
|
expected: [ { cartodb_id: 2, value: -2 } ]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cartodb_id: 3,
|
|
|
|
expected: [ { cartodb_id: 3, value: -1 } ]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cartodb_id: 4,
|
|
|
|
expected: [ { cartodb_id: 4, value: 0 } ]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cartodb_id: 5,
|
|
|
|
expected: [ { cartodb_id: 5, value: 1 } ]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cartodb_id: 6,
|
|
|
|
expected: [ { cartodb_id: 6, value: 2 } ]
|
2019-02-27 02:19:44 +08:00
|
|
|
}
|
2019-02-27 19:43:26 +08:00
|
|
|
];
|
2019-02-27 02:19:44 +08:00
|
|
|
|
2019-02-27 19:43:26 +08:00
|
|
|
suite.forEach(({ cartodb_id, expected }) => {
|
|
|
|
it(`should get just one disaggregated feature: cartodb_id = ${cartodb_id}`, function (done) {
|
|
|
|
const mapConfig = createVectorMapConfig();
|
|
|
|
const testClient = new TestClient(mapConfig);
|
|
|
|
const zoom = 0;
|
|
|
|
const clusterId = cartodb_id;
|
|
|
|
const layerId = 0;
|
|
|
|
const params = {};
|
|
|
|
|
|
|
|
testClient.getClusterFeatures(zoom, clusterId, layerId, params, (err, body) => {
|
|
|
|
if (err) {
|
|
|
|
return done(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.deepStrictEqual(body.rows, expected);
|
|
|
|
testClient.drain(done);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('resolution = 50', function () {
|
|
|
|
const suite = [
|
|
|
|
{
|
|
|
|
cartodb_id: 1,
|
|
|
|
resolution: 50,
|
|
|
|
expected: [
|
|
|
|
{ cartodb_id: 1, value: -3 },
|
|
|
|
{ cartodb_id: 2, value: -2 },
|
|
|
|
{ cartodb_id: 3, value: -1 },
|
|
|
|
{ cartodb_id: 4, value: 0 },
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
cartodb_id: 5,
|
|
|
|
resolution: 50,
|
|
|
|
expected: [
|
|
|
|
{ cartodb_id: 5, value: 1 },
|
|
|
|
{ cartodb_id: 6, value: 2 },
|
|
|
|
{ cartodb_id: 7, value: 3 }
|
|
|
|
]
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
suite.forEach(({ cartodb_id, resolution, expected }) => {
|
|
|
|
it(`should get just one disaggregated feature: cartodb_id = ${cartodb_id}`, function (done) {
|
|
|
|
const mapConfig = createVectorMapConfig([{
|
|
|
|
type: 'cartodb',
|
|
|
|
options: {
|
|
|
|
sql: POINTS_SQL_1,
|
|
|
|
aggregation: {
|
|
|
|
threshold: 1,
|
|
|
|
resolution: resolution
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}]);
|
|
|
|
|
|
|
|
const testClient = new TestClient(mapConfig);
|
|
|
|
const zoom = 0;
|
|
|
|
const clusterId = cartodb_id;
|
|
|
|
const layerId = 0;
|
|
|
|
const params = {};
|
|
|
|
|
|
|
|
testClient.getClusterFeatures(zoom, clusterId, layerId, params, (err, body) => {
|
|
|
|
if (err) {
|
|
|
|
return done(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.deepStrictEqual(body.rows, expected);
|
|
|
|
testClient.drain(done);
|
|
|
|
});
|
|
|
|
});
|
2019-02-27 02:19:44 +08:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|