core-resource-app-test
Version:
App that contains assets and scripts for the core apps
230 lines (214 loc) • 9.62 kB
text/coffeescript
describe 'Directive: geojson', ->
leafletMapDefaults= leafletData = scope = $compile = $rootScope = null
beforeEach module('leaflet-directive')
beforeEach inject (_$compile_, _$rootScope_, _leafletData_, _leafletMapDefaults_) ->
$compile = _$compile_
$rootScope = _$rootScope_
leafletData = _leafletData_
leafletMapDefaults = _leafletMapDefaults_
scope = $rootScope.$new()
afterEach inject ($rootScope) ->
$rootScope.$apply()
it 'should not create a geoJSON tilelayer if a bad structure is provided', ->
angular.extend scope, geojson: {}
element = angular.element('<leaflet geojson="geojson"></leaflet>')
element = $compile(element)(scope)
leafletData.getGeoJSON().then (geoJSON) ->
expect(geoJSON).not.toBeDefined()
it 'should create a geoJSON tilelayer if a good structure is provided', ->
angular.extend scope, geojson:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'Point'
'coordinates': [102.0, 0.5]
'properties':
'prop0': 'value0'
}
{
'type': 'Feature'
'geometry':
'type': 'LineString'
'coordinates': [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]]
'properties':
'prop0': 'value0'
'prop1': 0.0
}
{
'type': 'Feature'
'geometry':
'type': 'Polygon'
'coordinates': [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]
'properties':
'prop0': 'value0'
'prop1':
'this': 'that'
}
]
element = angular.element('<leaflet geojson="geojson"></leaflet>')
element = $compile(element)(scope)
leafletData.getGeoJSON().then (geoJSON) ->
expect(geoJSON).toBeDefined()
expect(Object.keys(geoJSON._layers).length).toBe 3
it 'should remove the geoJSON layer from the map if geojson object removed from scope', ->
angular.extend scope, geojson:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'Point'
'coordinates': [102.0, 0.5]
'properties':
'prop0': 'value0'
}
{
'type': 'Feature'
'geometry':
'type': 'LineString'
'coordinates': [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]]
'properties':
'prop0': 'value0'
'prop1': 0.0
}
{
'type': 'Feature'
'geometry':
'type': 'Polygon'
'coordinates': [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]
'properties':
'prop0': 'value0'
'prop1':
'this': 'that'
}
]
element = angular.element('<leaflet geojson="geojson"></leaflet>')
element = $compile(element)(scope)
leafletGeoJSON = undefined
leafletMap = undefined
leafletData.getMap().then (map) ->
leafletMap = map
scope.$digest()
leafletData.getGeoJSON().then (geoJSON) ->
leafletGeoJSON = geoJSON
scope.$digest()
scope.$digest()
# console.log leafletGeoJSON
expect(leafletMap.hasLayer(leafletGeoJSON)).toBe true
scope.geojson = {}
scope.$digest()
expect(leafletMap.hasLayer(leafletGeoJSON)).toBe false
describe 'nested', ->
it 'should create a geoJSON tilelayer if a good structure is provided', ->
angular.extend scope, geojson:
one:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'Point'
'coordinates': [102.0, 0.5]
'properties':
'prop0': 'value0'
}
]
two:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'LineString'
'coordinates': [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]]
'properties':
'prop0': 'value0'
'prop1': 0.0
}
]
three:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'Polygon'
'coordinates': [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]
'properties':
'prop0': 'value0'
'prop1':
'this': 'that'
}
]
element = angular.element('<leaflet geojson="geojson" geojson-nested="true"></leaflet>')
element = $compile(element)(scope)
leafletData.getGeoJSON().then (geoJSON) ->
expect(geoJSON).toBeDefined()
expect(Object.keys(geoJSON).length).toBe 3
angular.forEach (lObject) ->
expect(Object.keys(lObject._layers).length).toBe 1
it 'should remove the geoJSON layer from the map if geojson object removed from scope', ->
angular.extend scope, geojson:
one:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'Point'
'coordinates': [102.0, 0.5]
'properties':
'prop0': 'value0'
}
]
two:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'LineString'
'coordinates': [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]]
'properties':
'prop0': 'value0'
'prop1': 0.0
}
]
three:
data:
'type': 'FeatureCollection'
'features': [
{
'type': 'Feature'
'geometry':
'type': 'Polygon'
'coordinates': [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]
'properties':
'prop0': 'value0'
'prop1':
'this': 'that'
}
]
element = angular.element('<leaflet geojson="geojson" geojson-nested="true"></leaflet>')
element = $compile(element)(scope)
leafletGeoJSON = undefined
leafletMap = undefined
leafletData.getMap().then (map) ->
leafletMap = map
scope.$digest()
leafletData.getGeoJSON().then (geoJSON) ->
leafletGeoJSON = geoJSON
scope.$digest()
expect(leafletMap.hasLayer(leafletGeoJSON.one)).toBe true
scope.geojson = {}
scope.$digest()
expect(leafletMap.hasLayer(leafletGeoJSON.one)).toBe false