Files
carto.js/test/spec/api/v4/layer/metadata/parser.spec.js
2020-06-13 18:34:34 +08:00

231 lines
7.2 KiB
JavaScript

var metadataParser = require('../../../../../../src/api/v4/layer/metadata/parser');
describe('api/v4/layer/metadata/parser', function () {
describe('.getMetadataFromRules', function () {
it('should parse correctly the range rules', function () {
// From:
// marker-width: ramp([scalerank], range(5, 20), quantiles(4));
// marker-fill-opacity: ramp([pop_max], range(0,1), jenks);
var rules = [
{
'selector': '#layer',
'prop': 'marker-width',
'column': 'scalerank',
'mapping': '>',
'buckets': [
{
'filter': {
'type': 'range',
'start': 0,
'end': 6
},
'value': 5
},
{
'filter': {
'type': 'range',
'start': 6,
'end': 7
},
'value': 10
},
{
'filter': {
'type': 'range',
'start': 7,
'end': 7
},
'value': 15
},
{
'filter': {
'type': 'range',
'start': 7,
'end': 10
},
'value': 20
}
],
'stats': {
'filter_avg': 6.642174269325321
}
},
{
'selector': '#layer',
'prop': 'marker-fill-opacity',
'column': 'pop_max',
'mapping': '>',
'buckets': [
{
'filter': {
'type': 'range',
'start': -99,
'end': 37945
},
'value': 0
},
{
'filter': {
'type': 'range',
'start': 37945,
'end': 138954
},
'value': 0.25
},
{
'filter': {
'type': 'range',
'start': 138954,
'end': 616990
},
'value': 0.5
},
{
'filter': {
'type': 'range',
'start': 616990,
'end': 2544000
},
'value': 0.75
},
{
'filter': {
'type': 'range',
'start': 2544000,
'end': 35676000
},
'value': 1
}
],
'stats': {
'filter_avg': 322717.4763725758
}
}
];
var metadataList = metadataParser.getMetadataFromRules(rules);
expect(metadataList).toBeDefined();
expect(metadataList[0].getType()).toBe('buckets');
expect(metadataList[0].getColumn()).toBe('scalerank');
expect(metadataList[0].getMapping()).toBe('>');
expect(metadataList[0].getProperty()).toBe('marker-width');
expect(metadataList[0].getAverage()).toBe(6.642174269325321);
expect(metadataList[0].getMin()).toBe(0);
expect(metadataList[0].getMax()).toBe(10);
expect(metadataList[0].getBuckets()).toEqual([
{ min: 0, max: 6, value: 5 },
{ min: 6, max: 7, value: 10 },
{ min: 7, max: 7, value: 15 },
{ min: 7, max: 10, value: 20 }
]);
expect(metadataList[0].getType()).toBe('buckets');
expect(metadataList[1].getColumn()).toBe('pop_max');
expect(metadataList[1].getMapping()).toBe('>');
expect(metadataList[1].getProperty()).toBe('marker-fill-opacity');
expect(metadataList[1].getAverage()).toBe(322717.4763725758);
expect(metadataList[1].getMin()).toBe(-99);
expect(metadataList[1].getMax()).toBe(35676000);
expect(metadataList[1].getBuckets()).toEqual([
{ min: -99, max: 37945, value: 0 },
{ min: 37945, max: 138954, value: 0.25 },
{ min: 138954, max: 616990, value: 0.5 },
{ min: 616990, max: 2544000, value: 0.75 },
{ min: 2544000, max: 35676000, value: 1 }
]);
});
it('should parse correctly the category rules', function () {
// From:
// marker-fill: ramp([scalerank], (#5F4690, #1D6996, #38A6A5, #666666), (7, 6, 10), '=', category);
// marker-file: ramp([scalerank], (url('https://s3.amazonaws.com/com.cartodb.users-assets.production/maki-icons/rail-light-18.svg'), url('https://s3.amazonaws.com/com.cartodb.users-assets.production/maki-icons/park-18.svg')), (7, 10), '=');
var rules = [
{
'selector': '#layer',
'prop': 'marker-fill',
'column': 'scalerank',
'mapping': '=',
'buckets': [
{
'filter': {
'name': 7,
'type': 'category'
},
'value': '#5F4690'
},
{
'filter': {
'name': 6,
'type': 'category'
},
'value': '#1D6996'
},
{
'filter': {
'name': 10,
'type': 'category'
},
'value': '#38A6A5'
},
{
'filter': {
'type': 'default'
},
'value': '#666666'
}
],
'stats': {}
},
{
'selector': '',
'prop': 'marker-file',
'column': 'scalerank',
'mapping': '=',
'buckets': [
{
'filter': {
'name': 7,
'type': 'category'
},
'value': 'url(\'https://s3.amazonaws.com/com.cartodb.users-assets.production/maki-icons/rail-light-18.svg\')'
},
{
'filter': {
'name': 10,
'type': 'category'
},
'value': 'url(\'https://s3.amazonaws.com/com.cartodb.users-assets.production/maki-icons/park-18.svg\')'
}
],
'stats': {}
}
];
var metadataList = metadataParser.getMetadataFromRules(rules);
expect(metadataList).toBeDefined();
expect(metadataList[0].getType()).toBe('categories');
expect(metadataList[0].getColumn()).toBe('scalerank');
expect(metadataList[0].getMapping()).toBe('=');
expect(metadataList[0].getProperty()).toBe('marker-fill');
expect(metadataList[0].getDefaultValue()).toBe('#666666');
expect(metadataList[0].getCategories()).toEqual([
{ name: 7, value: '#5F4690' },
{ name: 6, value: '#1D6996' },
{ name: 10, value: '#38A6A5' }
]);
expect(metadataList[0].getType()).toBe('categories');
expect(metadataList[1].getColumn()).toBe('scalerank');
expect(metadataList[1].getMapping()).toBe('=');
expect(metadataList[1].getProperty()).toBe('marker-file');
expect(metadataList[1].getDefaultValue()).not.toBeDefined();
expect(metadataList[1].getCategories()).toEqual([
{ name: 7, value: 'url(\'https://s3.amazonaws.com/com.cartodb.users-assets.production/maki-icons/rail-light-18.svg\')' },
{ name: 10, value: 'url(\'https://s3.amazonaws.com/com.cartodb.users-assets.production/maki-icons/park-18.svg\')' }
]);
});
});
});