Initial commit
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
var Aggregation = require('../../../../../src/api/v4/layer/aggregation');
|
||||
|
||||
describe('layer-aggregation', function () {
|
||||
var options;
|
||||
beforeEach(function () {
|
||||
options = {
|
||||
threshold: 10000,
|
||||
resolution: 1,
|
||||
placement: 'point-sample',
|
||||
columns: {
|
||||
fake_name_0: {
|
||||
aggregateFunction: 'sum',
|
||||
aggregatedColumn: 'fake_column_0'
|
||||
},
|
||||
fake_name_1: {
|
||||
aggregateFunction: 'avg',
|
||||
aggregatedColumn: 'fake_column_1'
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
describe('constructor', function () {
|
||||
it('should return a simple object when the parameters are valid', function () {
|
||||
var aggregation = new Aggregation(options);
|
||||
|
||||
// Multiple specs for easy debugging
|
||||
expect(aggregation.threshold).toEqual(options.threshold);
|
||||
expect(aggregation.resolution).toEqual(options.resolution);
|
||||
expect(aggregation.placement).toEqual(options.placement);
|
||||
expect(aggregation.columns.fake_name_0).toEqual({
|
||||
aggregate_function: 'sum',
|
||||
aggregated_column: 'fake_column_0'
|
||||
});
|
||||
expect(aggregation.columns.fake_name_1).toEqual({
|
||||
aggregate_function: 'avg',
|
||||
aggregated_column: 'fake_column_1'
|
||||
});
|
||||
});
|
||||
|
||||
describe('errors', function () {
|
||||
describe('threshold', function () {
|
||||
it('should throw an error when threshold is not defined', function () {
|
||||
delete options.threshold;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError('Aggregation threshold is required.');
|
||||
});
|
||||
|
||||
it('should throw an error when threshold is not a positive integer', function () {
|
||||
options.threshold = 0;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError('Aggregation threshold must be an integer value greater than 0.');
|
||||
|
||||
options.threshold = -1;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError('Aggregation threshold must be an integer value greater than 0.');
|
||||
|
||||
options.threshold = 2.5;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError('Aggregation threshold must be an integer value greater than 0.');
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolution', function () {
|
||||
it('should throw an error when resolution is not defined', function () {
|
||||
options.resolution = undefined;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError('Aggregation resolution is required.');
|
||||
});
|
||||
|
||||
it('should throw an error when resolution is not an integer between 1 and 16', function () {
|
||||
var expectedErrorMessage = 'Aggregation resolution must be 0.5, 1 or powers of 2 up to 256 (2, 4, 8, 16, 32, 64, 128, 256).';
|
||||
options.resolution = 0;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError(expectedErrorMessage);
|
||||
|
||||
options.resolution = 17;
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError(expectedErrorMessage);
|
||||
|
||||
var validOnes = [0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256];
|
||||
validOnes.forEach(function (resolution) {
|
||||
expect(function () {
|
||||
options.resolution = resolution;
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).not.toThrowError();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('placement', function () {
|
||||
it('should throw an error when placement is not one of our three valid placements', function () {
|
||||
options.placement = 'invalid_placement';
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError('Aggregation placement is not valid. Must be one of these values: `point-sample`, `point-grid`, `centroid`');
|
||||
});
|
||||
});
|
||||
|
||||
describe('columns', function () {
|
||||
it('should thrown an error when column.aggregateFunction is not defined', function () {
|
||||
options.columns = {
|
||||
fake_name_0: {
|
||||
aggregatedColumn: 'fake_column_0'
|
||||
}
|
||||
};
|
||||
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError("Aggregation function for column 'fake_name_0' is required.");
|
||||
});
|
||||
|
||||
it('should thrown an error when column.aggregateFunction is not a valid function', function () {
|
||||
options.columns = {
|
||||
fake_name_0: {
|
||||
aggregatedColumn: 'fake_column_0',
|
||||
aggregateFunction: 'invalid_function'
|
||||
}
|
||||
};
|
||||
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError("Aggregation function for column 'fake_name_0' is not valid. Use carto.aggregation.function");
|
||||
});
|
||||
|
||||
it('should thrown an error when column.aggregatedColumn is not defined', function () {
|
||||
options.columns = {
|
||||
fake_name_0: {
|
||||
aggregateFunction: 'sum'
|
||||
}
|
||||
};
|
||||
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError("Column to be aggregated to 'fake_name_0' is required.");
|
||||
});
|
||||
|
||||
it('should thrown an error when column.aggregatedColumn is not a string', function () {
|
||||
options.columns = {
|
||||
fake_name_0: {
|
||||
aggregatedColumn: 4500,
|
||||
aggregateFunction: 'sum'
|
||||
}
|
||||
};
|
||||
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).toThrowError("Column to be aggregated to 'fake_name_0' must be a string.");
|
||||
});
|
||||
});
|
||||
|
||||
describe('optional placement and columns', function () {
|
||||
it('should now throw an error when neither placement nor columns appear', function () {
|
||||
delete options.columns;
|
||||
delete options.placement;
|
||||
|
||||
expect(function () {
|
||||
new Aggregation(options); // eslint-disable-line
|
||||
}).not.toThrow();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user