From dd835552e95cd701997a5ebd08278c6f79b3f532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyo=CC=88sti=20Herrala?= Date: Sat, 14 Nov 2015 13:47:58 +0200 Subject: [PATCH] Fix isValidCenter() for null value causing center-directive to fail --- src/services/leafletHelpers.js | 2 +- test/unit/010-centerDirectiveSpec.js | 13 +++++++ test/unit/services/leafletHelpersSpec.js | 46 ++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/services/leafletHelpers.js b/src/services/leafletHelpers.js index 8a161586..ae8d9e26 100644 --- a/src/services/leafletHelpers.js +++ b/src/services/leafletHelpers.js @@ -179,7 +179,7 @@ angular.module('leaflet-directive').service('leafletHelpers', function($q, $log) equals: angular.equals, isValidCenter: function(center) { - return angular.isDefined(center) && angular.isNumber(center.lat) && + return center !== null && angular.isObject(center) && angular.isNumber(center.lat) && angular.isNumber(center.lng) && angular.isNumber(center.zoom); }, diff --git a/test/unit/010-centerDirectiveSpec.js b/test/unit/010-centerDirectiveSpec.js index 7f61d11c..c32c943f 100644 --- a/test/unit/010-centerDirectiveSpec.js +++ b/test/unit/010-centerDirectiveSpec.js @@ -48,6 +48,19 @@ describe('Directive: leaflet center', function() { }); }); + it('should fallback to default map center if the model value is null', function () { + scope.center = null; + var element = angular.element(''); + element = $compile(element)(scope); + scope.$digest(); + + leafletData.getMap().then(function(map) { + expect(map.getZoom()).toEqual(1); + expect(map.getCenter().lat).toEqual(0); + expect(map.getCenter().lng).toEqual(0); + }); + }); + it('should update the map center if the initial center scope properties are set', function() { var element = angular.element(''); element = $compile(element)(scope); diff --git a/test/unit/services/leafletHelpersSpec.js b/test/unit/services/leafletHelpersSpec.js index a46320bc..434e8448 100644 --- a/test/unit/services/leafletHelpersSpec.js +++ b/test/unit/services/leafletHelpersSpec.js @@ -41,6 +41,52 @@ }); }); + describe('isValidCenter', function () { + beforeEach(function() { + return this.subject = this.subject.isValidCenter; + }); + + describe('is valid', function () { + it('should accept', function () { + return expect(this.subject({lat: 0, lng: 0, zoom:1})).toBeTruthy(); + }); + }); + + describe('is invalid', function () { + it('null', function () { + return expect(this.subject(null)).toBeFalsy(); + }); + + it('undefined', function () { + return expect(this.subject(undefined)).toBeFalsy(); + }); + + it('missing longitude', function () { + return expect(this.subject({lat: 0, zoom:1})).toBeFalsy(); + }); + + it('missing latitude', function () { + return expect(this.subject({lng: 0, zoom:1})).toBeFalsy(); + }); + + it('invalid longitude', function () { + return expect(this.subject({lat: 0, lng: '0', zoom:1})).toBeFalsy(); + }); + + it('invalid latitude', function () { + return expect(this.subject({lat: '0', lng: 0, zoom:1})).toBeFalsy(); + }); + + it('null longitude', function () { + return expect(this.subject({lat: 0, lng: null, zoom:1})).toBeFalsy(); + }); + + it('null latitude', function () { + return expect(this.subject({lat: null, lng: 0, zoom:1})).toBeFalsy(); + }); + }); + }); + describe('defaultTo', function() { beforeEach(function() { return this.subject = this.subject.defaultTo;