Initial commit
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
var Backbone = require('backbone');
|
||||
var MapCursorManager = require('../../../src/vis/map-cursor-manager');
|
||||
var CartoDBLayer = require('../../../src/geo/map/cartodb-layer');
|
||||
|
||||
var createLayerModel = function () {
|
||||
var layerModel = new CartoDBLayer(null, { engine: { reload: function () {}, on: function () {} } });
|
||||
layerModel.isInfowindowEnabled = jasmine.createSpy('isInfowindowEnabled');
|
||||
return layerModel;
|
||||
};
|
||||
|
||||
describe('src/vis/map-cursor-manager.js', function () {
|
||||
beforeEach(function () {
|
||||
this.mapView = jasmine.createSpyObj('mapView', ['setCursor']);
|
||||
this.mapModel = jasmine.createSpyObj('map', ['arePopupsEnabled', 'isFeatureInteractivityEnabled']);
|
||||
this.layerModel = createLayerModel();
|
||||
this.cartoDBLayerGroupView = new Backbone.View();
|
||||
this.mapCursorManager = new MapCursorManager({
|
||||
mapView: this.mapView,
|
||||
mapModel: this.mapModel
|
||||
});
|
||||
|
||||
this.mapCursorManager.start(this.cartoDBLayerGroupView);
|
||||
});
|
||||
|
||||
describe('when a feature is overed', function () {
|
||||
beforeEach(function () {
|
||||
this.mapModel.arePopupsEnabled.and.returnValue(false);
|
||||
this.mapModel.isFeatureInteractivityEnabled.and.returnValue(false);
|
||||
this.layerModel.isInfowindowEnabled.and.returnValue(false);
|
||||
});
|
||||
|
||||
it('should NOT change the cursor to pointer if layer is not clickable', function () {
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should change the cursor to pointer if feature interactivity is enabled', function () {
|
||||
this.mapModel.isFeatureInteractivityEnabled.and.returnValue(true);
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
});
|
||||
|
||||
describe('when popups are enabled', function () {
|
||||
beforeEach(function () {
|
||||
this.mapModel.arePopupsEnabled.and.returnValue(true);
|
||||
});
|
||||
|
||||
it('should NOT change the cursor to pointer if layer has NO infowindow enabled', function () {
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should change the cursor to pointer if layer infowindows enabled', function () {
|
||||
this.layerModel.isInfowindowEnabled.and.returnValue(true);
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when a feature is not overed anymore', function () {
|
||||
beforeEach(function () {
|
||||
this.mapModel.isFeatureInteractivityEnabled.and.returnValue(true);
|
||||
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
this.mapView.setCursor.calls.reset();
|
||||
});
|
||||
|
||||
it('should change the cursor to auto if no other layer is being overed', function () {
|
||||
this.cartoDBLayerGroupView.trigger('featureOut', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('auto');
|
||||
});
|
||||
|
||||
it('should change the cursor to pointer if other clickable layers are still being overed', function () {
|
||||
var anotherLayerModel = createLayerModel();
|
||||
|
||||
// Another layer is being overed
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: anotherLayerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
expect(this.mapView.setCursor.calls.reset());
|
||||
|
||||
// First layer is not overed anymore
|
||||
this.cartoDBLayerGroupView.trigger('featureOut', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
});
|
||||
});
|
||||
|
||||
describe('when a feature was overed and layer visibility changes', function () {
|
||||
beforeEach(function () {
|
||||
this.mapModel.isFeatureInteractivityEnabled.and.returnValue(true);
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: this.layerModel
|
||||
});
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
});
|
||||
|
||||
it('should change the cursor to auto if layer is hidden', function () {
|
||||
this.mapView.setCursor.calls.reset();
|
||||
|
||||
this.layerModel.set('visible', false);
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('auto');
|
||||
});
|
||||
|
||||
it('should keep the cursor as pointer if layer is hidden but other clickable layers are visible', function () {
|
||||
var anotherLayerModel = createLayerModel();
|
||||
|
||||
// Another layer is being overed
|
||||
this.cartoDBLayerGroupView.trigger('featureOver', {
|
||||
layer: anotherLayerModel
|
||||
});
|
||||
|
||||
this.mapView.setCursor.calls.reset();
|
||||
|
||||
this.layerModel.set('visible', false);
|
||||
|
||||
expect(this.mapView.setCursor).toHaveBeenCalledWith('pointer');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user