react-spatial
Version:
Components to build React map apps.
149 lines (132 loc) • 5.16 kB
JavaScript
import 'jest-canvas-mock';
import LayerService from './LayerService';
import ConfigReader from './ConfigReader';
import Layer from './layers/Layer';
describe('LayerService', function () {
var instantiateLayerService = function (data) {
var layers = ConfigReader.readConfig(data);
return new LayerService(layers);
};
var layerData = [
{
name: 'root',
},
{
name: '1',
children: [
{
name: '1-1',
radioGroup: 'radio',
},
{
name: '1-2',
radioGroup: 'radio',
children: [{ name: '1-2-1' }, { name: '1-2-2' }, { name: '2' }],
} ],
} ];
test('should instantiate LayerService class correctly.', function () {
var layerService = instantiateLayerService(layerData);
expect(layerService.getLayersAsFlatArray().length).toBe(7);
});
test('should return the correct number of layers.', function () {
var layerService = instantiateLayerService(layerData);
expect(layerService.getLayers().length).toBe(2);
});
test('should return layers by name.', function () {
var layerService = instantiateLayerService(layerData);
expect(layerService.getLayer('root')).toBeDefined();
expect(layerService.getLayer('1-2-2')).toBeDefined();
expect(layerService.getLayer('1-2')).toBeDefined();
expect(layerService.getLayer('42')).toBeUndefined();
});
test('should return the parent layer.', function () {
var layerService = instantiateLayerService(layerData);
var child = layerService.getLayer('1-2');
expect(layerService.getParent(child).getName()).toBe('1');
});
test('should return null if no radio name is given.', function () {
var layerService = instantiateLayerService(layerData);
expect(layerService.getRadioGroupLayers()).toBe(null);
});
test('should return radio layers.', function () {
var layerService = instantiateLayerService(layerData);
expect(layerService.getRadioGroupLayers('radio').length).toBe(2);
expect(layerService.getRadioGroupLayers('no-radio').length).toBe(0);
});
test('should toggle radio layers.', function () {
var layerService = instantiateLayerService(layerData);
layerService.getLayer('1-1').setVisible(true);
expect(layerService.getLayer('1-1').getVisible()).toBe(true);
layerService.getLayer('1-2').setVisible(true);
expect(layerService.getLayer('1-1').getVisible()).toBe(false);
});
test('should toggle child layers.', function () {
var layerService = instantiateLayerService(layerData);
layerService.getLayer('1-2').setVisible(true);
expect(layerService.getLayer('1-2-1').getVisible()).toBe(true);
expect(layerService.getLayer('1-2-2').getVisible()).toBe(true);
expect(layerService.getLayer('2').getVisible()).toBe(true);
});
test('should call back on visibility changes.', function () {
var layerService = instantiateLayerService(layerData);
var callback = jest.fn(function () { return 42; });
layerService.on('change:visible', callback);
layerService.getLayer('2').setVisible(true);
expect(callback.mock.calls.length).toBe(3);
});
test('should set children from constructor', function () {
var layer = new Layer({
name: 'foo',
children: [
new Layer({
name: 'bar',
}) ],
});
expect(layer.getChildren().length).toBe(1);
});
describe('#on() ', function () {
test('add a callback on event.', function () {
var layerService = instantiateLayerService(layerData);
var cb = function () {};
layerService.on('foo', cb);
expect(layerService.callbacks.foo[0]).toBe(cb);
});
test("doesn't add twice the same callback .", function () {
var layerService = instantiateLayerService(layerData);
var cb = function () {};
layerService.on('foo', cb);
expect(layerService.callbacks.foo[0]).toBe(cb);
layerService.on('foo', cb);
expect(layerService.callbacks.foo[0]).toBe(cb);
expect(layerService.callbacks.foo[1]).toBe(undefined);
});
});
describe('#un() ', function () {
test("doesn't failed if callback doesn't exists.", function (done) {
var layerService = instantiateLayerService(layerData);
var cb = function () {};
try {
layerService.un('foo', cb);
done();
// eslint-disable-next-line no-empty
} catch (e) {}
});
test('remove a callback on event.', function () {
var layerService = instantiateLayerService(layerData);
var cb = function () {};
var cb1 = function () {};
var cb2 = function () {};
layerService.on('foo', cb);
layerService.on('foo', cb1);
layerService.on('foo', cb2);
expect(layerService.callbacks.foo[0]).toBe(cb);
expect(layerService.callbacks.foo[1]).toBe(cb1);
expect(layerService.callbacks.foo[2]).toBe(cb2);
layerService.un('foo', cb1);
expect(layerService.callbacks.foo[0]).toBe(cb);
expect(layerService.callbacks.foo[1]).toBe(cb2);
expect(layerService.callbacks.foo[2]).toBe(undefined);
});
});
});
//# sourceMappingURL=LayerService.test.js.map