Files
carto.js/test/spec/vis/layers-factory.spec.js
T
2020-06-13 18:34:34 +08:00

200 lines
6.6 KiB
JavaScript

var _ = require('underscore');
var AnalysisModel = require('../../../src/analysis/analysis-model');
var LayersFactory = require('../../../src/vis/layers-factory');
var createEngine = require('../fixtures/engine.fixture.js');
var createFakeAnalysis = function (attrs) {
return new AnalysisModel(attrs, {
engine: {},
camshaftReference: {
getParamNamesForAnalysisType: function () {}
}
});
};
describe('vis/layers-factory', function () {
var analysis;
var layersFactory;
var engineMock;
beforeEach(function () {
engineMock = createEngine();
this.windshaftSettings = {
urlTemplate: 'http://{user}.carto.com',
userName: 'JUAN',
templateName: 'TPL_12345678',
client: 'CLIENT_VERSION',
apiKey: 'API_KEY',
authToken: 'AUTH_TOKEN'
};
layersFactory = new LayersFactory({
engine: engineMock,
windshaftSettings: this.windshaftSettings
});
analysis = createFakeAnalysis();
});
describe('attribute validation', function () {
var testCases = [
{
layerType: 'CartoDB',
// TODO: Once https://github.com/CartoDB/cartodb/issues/12885 is merged
// source should be required again so we need to add the attribute to this test
// expectedErrorMessage: 'The following attributes are missing: source,cartocss'
expectedErrorMessage: 'The following attributes are missing: cartocss'
},
{
layerType: 'torque',
// TODO: Once https://github.com/CartoDB/cartodb/issues/12885 is merged
// source should be required again so we need to add the attribute to this test
// expectedErrorMessage: 'The following attributes are missing: source,cartocss'
expectedErrorMessage: 'The following attributes are missing: cartocss'
},
{
layerType: 'Tiled',
expectedErrorMessage: 'The following attributes are missing: urlTemplate'
},
{
layerType: 'WMS',
expectedErrorMessage: 'The following attributes are missing: urlTemplate'
},
{
layerType: 'GMapsBase',
expectedErrorMessage: 'The following attributes are missing: baseType'
},
{
layerType: 'Plain',
expectedErrorMessage: 'The following attributes are missing: image|color'
}
];
_.each(testCases, function (testCase) {
describe(testCase.layerType, function () {
it('should throw an error if no properties are given', function () {
expect(function () {
layersFactory.createLayer(testCase.layerType, {});
}).toThrowError(testCase.expectedErrorMessage);
});
});
});
});
describe('tiled', function () {
it('should create the layer model', function () {
var layerModel = layersFactory.createLayer('tiled', {
urlTemplate: 'http'
});
expect(layerModel).toBeDefined();
expect(layerModel.get('type')).toEqual('Tiled');
});
_.each({
'https://dnv9my2eseobd.cloudfront.net/': 'http://a.tiles.mapbox.com/',
'https://maps.nlp.nokia.com/': 'http://maps.nlp.nokia.com/',
'https://tile.stamen.com/': 'http://tile.stamen.com/',
'https://{s}.maps.nlp.nokia.com/': 'http://{s}.maps.nlp.nokia.com/',
'https://cartocdn_{s}.global.ssl.fastly.net/': 'http://{s}.api.cartocdn.com/',
'https://cartodb-basemaps-{s}.global.ssl.fastly.net/': 'http://{s}.basemaps.cartocdn.com/'
}, function (httpUrlTemplate, httpsUrlTemplate) {
describe('when https option is set to true', function () {
beforeEach(function () {
spyOn(LayersFactory, 'isHttps').and.returnValue(true);
});
it("should not convert '" + httpsUrlTemplate + "'", function () {
var layerModel = layersFactory.createLayer('tiled', {
urlTemplate: httpsUrlTemplate
});
expect(layerModel.get('urlTemplate')).toEqual(httpsUrlTemplate);
});
it("should convert '" + httpUrlTemplate + "' to '" + httpsUrlTemplate + "'", function () {
var layerModel = layersFactory.createLayer('tiled', {
urlTemplate: httpUrlTemplate
});
expect(layerModel.get('urlTemplate')).toEqual(httpsUrlTemplate);
});
});
describe('when https option is set to false', function () {
beforeEach(function () {
spyOn(LayersFactory, 'isHttps').and.returnValue(false);
});
it("should not convert '" + httpUrlTemplate + "'", function () {
var layerModel = layersFactory.createLayer('tiled', {
urlTemplate: httpUrlTemplate
});
expect(layerModel.get('urlTemplate')).toEqual(httpUrlTemplate);
});
it("should convert '" + httpsUrlTemplate + "' to '" + httpUrlTemplate + "'", function () {
var layerModel = layersFactory.createLayer('tiled', {
urlTemplate: httpsUrlTemplate
});
expect(layerModel.get('urlTemplate')).toEqual(httpUrlTemplate);
});
});
});
});
describe('torque', function () {
it('should create the layer model', function () {
var layerModel = layersFactory.createLayer('torque', {
source: analysis,
cartocss: '#layer {}'
});
expect(layerModel).toBeDefined();
expect(layerModel.get('type')).toEqual('torque');
});
it('should setup attrs for windshaft provider', function () {
var layerModel = layersFactory.createLayer('torque', {
source: analysis,
cartocss: '#layer {}'
});
expect(layerModel.get('user_name')).toEqual('JUAN');
expect(layerModel.get('maps_api_template')).toEqual('http://{user}.carto.com');
expect(layerModel.get('client')).toEqual('CLIENT_VERSION');
expect(layerModel.get('named_map')).toEqual({
name: 'TPL_12345678'
});
expect(layerModel.get('api_key')).toEqual('API_KEY');
expect(layerModel.get('auth_token')).toEqual('AUTH_TOKEN');
});
it("should not include a named_map attr if settings don't have one", function () {
delete this.windshaftSettings.templateName;
var layerModel = layersFactory.createLayer('torque', {
source: analysis,
cartocss: '#layer {}'
});
expect(layerModel.get('named_map')).toBeUndefined();
});
});
['cartodb', 'torque'].forEach(function (layerType) {
describe(layerType + ' (shared)', function () {
it('should set accept an AnalysisMode as a source', function () {
var layerModel = layersFactory.createLayer(layerType, {
source: analysis,
cartocss: '#layer {}'
});
expect(layerModel.getSource()).toEqual(analysis);
});
});
});
});