forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			278 lines
		
	
	
		
			No EOL
		
	
	
		
			8.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			No EOL
		
	
	
		
			8.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {describe} from 'mocha'
 | |
| import OsmFeatureSource from "../../../Logic/FeatureSource/TiledFeatureSource/OsmFeatureSource";
 | |
| import {UIEventSource} from "../../../Logic/UIEventSource";
 | |
| import ScriptUtils from "../../../scripts/ScriptUtils";
 | |
| import FilteredLayer, {FilterState} from "../../../Models/FilteredLayer";
 | |
| import {Tiles} from "../../../Models/TileRange";
 | |
| import {readFileSync} from "fs";
 | |
| import {Utils} from "../../../Utils";
 | |
| import {Tag} from "../../../Logic/Tags/Tag";
 | |
| import LayerConfig from "../../../Models/ThemeConfig/LayerConfig";
 | |
| import {expect} from "chai";
 | |
| 
 | |
| 
 | |
| const expected = {
 | |
|     "type": "Feature",
 | |
|     "id": "relation/5759328",
 | |
|     "properties": {
 | |
|         "timestamp": "2022-06-10T00:46:55Z",
 | |
|         "version": 6,
 | |
|         "changeset": 122187206,
 | |
|         "user": "Pieter Vander Vennet",
 | |
|         "uid": 3818858,
 | |
|         "amenity": "school",
 | |
|         "isced:2011:level": "vocational_lower_secondary;vocational_upper_secondary",
 | |
|         "name": "Koninklijk Technisch Atheneum Pro Technica",
 | |
|         "school:gender": "mixed",
 | |
|         "type": "multipolygon",
 | |
|         "website": "http://ktahalle.be/",
 | |
|         "id": "relation/5759328",
 | |
|         "_backend":"https://osm.org"
 | |
|     },
 | |
|     "geometry": {
 | |
|         "type": "MultiPolygon",
 | |
|         "coordinates": [
 | |
|             [
 | |
|                 [
 | |
|                     [
 | |
|                         4.2461832,
 | |
|                         50.7335751
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2463167,
 | |
|                         50.7336785
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2463473,
 | |
|                         50.7337021
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2464497,
 | |
|                         50.7337814
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2471698,
 | |
|                         50.7343389
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2469541,
 | |
|                         50.7344768
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2467571,
 | |
|                         50.7346116
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2467727,
 | |
|                         50.7346199
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2465714,
 | |
|                         50.7347511
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2462398,
 | |
|                         50.7349687
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2453546,
 | |
|                         50.734601
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2451895,
 | |
|                         50.7345103
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2448867,
 | |
|                         50.7342629
 | |
|                     ],
 | |
|                     [
 | |
|                         4.244899,
 | |
|                         50.7342069
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2461832,
 | |
|                         50.7335751
 | |
|                     ]
 | |
|                 ]
 | |
|             ],
 | |
|             [
 | |
|                 [
 | |
|                     [
 | |
|                         4.2444209,
 | |
|                         50.7353737
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2439986,
 | |
|                         50.7352034
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2440303,
 | |
|                         50.7351755
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2440602,
 | |
|                         50.7351058
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2439776,
 | |
|                         50.7350326
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2439558,
 | |
|                         50.7350132
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2438246,
 | |
|                         50.7348961
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2437848,
 | |
|                         50.73486
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2436555,
 | |
|                         50.7347455
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2435905,
 | |
|                         50.734689
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2435494,
 | |
|                         50.7346601
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2435038,
 | |
|                         50.7346256
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2434769,
 | |
|                         50.7346026
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2430948,
 | |
|                         50.734275
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2427978,
 | |
|                         50.7340052
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2430556,
 | |
|                         50.7338391
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2438957,
 | |
|                         50.7334942
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2440204,
 | |
|                         50.7336368
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2442806,
 | |
|                         50.7338922
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2444173,
 | |
|                         50.7340119
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2447379,
 | |
|                         50.7342925
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2450107,
 | |
|                         50.7345294
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2450236,
 | |
|                         50.7346021
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2449643,
 | |
|                         50.7347019
 | |
|                     ],
 | |
|                     [
 | |
|                         4.244711,
 | |
|                         50.7350821
 | |
|                     ],
 | |
|                     [
 | |
|                         4.2444209,
 | |
|                         50.7353737
 | |
|                     ]
 | |
|                 ]
 | |
|             ]
 | |
|         ]
 | |
|     }
 | |
| }
 | |
| 
 | |
| function test(done: () => void){
 | |
|     let fetchedTile = undefined;
 | |
|     const neededTiles = new UIEventSource<number[]>([Tiles.tile_index(17, 67081, 44033)]);
 | |
|     new OsmFeatureSource({
 | |
|         allowedFeatures: new Tag("amenity", "school"),
 | |
|         handleTile: tile => {
 | |
|             fetchedTile = tile
 | |
|             const data = tile.features.data[0].feature
 | |
|             expect(data.properties).deep.eq({
 | |
|                 id: 'relation/5759328', timestamp: '2022-06-10T00:46:55Z',
 | |
|                 version: 6,
 | |
|                 changeset: 122187206,
 | |
|                 user: 'Pieter Vander Vennet',
 | |
|                 uid: 3818858,
 | |
|                 amenity: 'school',
 | |
|                 'isced:2011:level': 'vocational_lower_secondary;vocational_upper_secondary',
 | |
|                 name: 'Koninklijk Technisch Atheneum Pro Technica',
 | |
|                 'school:gender': 'mixed',
 | |
|                 type: 'multipolygon',
 | |
|                 website: 'http://ktahalle.be/',
 | |
|                 _backend: 'https://osm.org'
 | |
|             })
 | |
|             expect(data.geometry.type).eq("MultiPolygon")
 | |
|             expect(data).deep.eq(expected)
 | |
|             done()
 | |
|         },
 | |
|         isActive: new UIEventSource<boolean>(true),
 | |
|         neededTiles,
 | |
|         state: {
 | |
|             osmConnection: {
 | |
|                 Backend(): string {
 | |
|                     return "https://osm.org"
 | |
|                 }
 | |
|             },
 | |
|             filteredLayers: new UIEventSource<FilteredLayer[]>([
 | |
|                 {
 | |
|                     appliedFilters: new UIEventSource<Map<string, FilterState>>(undefined),
 | |
|                     layerDef: new LayerConfig({
 | |
|                         id: "school",
 | |
|                         source: {
 | |
|                             osmTags: "amenity=school"
 | |
|                         },
 | |
|                         mapRendering: null
 | |
|                     }),
 | |
|                     isDisplayed: new UIEventSource<boolean>(true)
 | |
|                 }
 | |
|             ])
 | |
|         }
 | |
|     })
 | |
| }
 | |
| 
 | |
| describe("OsmFeatureSource", () => {
 | |
| 
 | |
|     it("downloading the full school should give a multipolygon", (done) => {
 | |
|         ScriptUtils.fixUtils()
 | |
|         let data = JSON.parse(readFileSync("./test/Logic/FeatureSource/osmdata.json", "utf8"))
 | |
|         Utils.injectJsonDownloadForTests("https://osm.org/api/0.6/map?bbox=4.24346923828125,50.732978448277514,4.2462158203125,50.73471682490244", data)
 | |
|         test(done)
 | |
|     })
 | |
| 
 | |
|     it("downloading the partial school polygon should give a multipolygon", (done) => {
 | |
|         ScriptUtils.fixUtils()
 | |
|         Utils.injectJsonDownloadForTests("https://www.openstreetmap.org/api/0.6/relation/5759328/full", JSON.parse(readFileSync("./test/data/relation_5759328.json","UTF-8")))
 | |
|         let data = JSON.parse(readFileSync("./test/Logic/FeatureSource/small_box.json", "utf8"))
 | |
|         Utils.injectJsonDownloadForTests("https://osm.org/api/0.6/map?bbox=4.24346923828125,50.732978448277514,4.2462158203125,50.73471682490244", data)
 | |
|         test(done)
 | |
|     })
 | |
| }) |