| 
									
										
										
										
											2022-06-21 22:57:44 +02:00
										 |  |  | 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" | 
					
						
							| 
									
										
										
										
											2023-02-03 04:48:32 +01:00
										 |  |  | import { describe, expect, it } from "vitest" | 
					
						
							| 
									
										
										
										
											2022-06-21 22:57:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  | 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], | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 ], | 
					
						
							|  |  |  |             ], | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |         ], | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2023-02-03 04:48:32 +01:00
										 |  |  |             expect(data.properties).toEqual({ | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |                 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", | 
					
						
							|  |  |  |             }) | 
					
						
							| 
									
										
										
										
											2023-02-03 04:48:32 +01:00
										 |  |  |             expect(data.geometry.type).toBe("MultiPolygon") | 
					
						
							|  |  |  |             expect(data).toEqual(expected) | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |             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), | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             ]), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-06-21 22:57:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe("OsmFeatureSource", () => { | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |     it("downloading the full school should give a multipolygon", (done) => { | 
					
						
							| 
									
										
										
										
											2022-06-21 22:57:44 +02:00
										 |  |  |         ScriptUtils.fixUtils() | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |         let data = JSON.parse(readFileSync("./test/Logic/FeatureSource/osmdata.json", "utf8")) | 
					
						
							| 
									
										
										
										
											2022-06-21 22:57:44 +02:00
										 |  |  |         Utils.injectJsonDownloadForTests( | 
					
						
							|  |  |  |             "https://osm.org/api/0.6/map?bbox=4.24346923828125,50.732978448277514,4.2462158203125,50.73471682490244", | 
					
						
							|  |  |  |             data | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |         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", | 
					
						
							| 
									
										
										
										
											2023-01-17 03:18:39 +01:00
										 |  |  |             JSON.parse(readFileSync("./test/data/relation_5759328.json", { encoding: "utf-8" })) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         let data = JSON.parse( | 
					
						
							|  |  |  |             readFileSync("./test/Logic/FeatureSource/small_box.json", { encoding: "utf-8" }) | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-06-24 18:12:39 +02:00
										 |  |  |         Utils.injectJsonDownloadForTests( | 
					
						
							|  |  |  |             "https://osm.org/api/0.6/map?bbox=4.24346923828125,50.732978448277514,4.2462158203125,50.73471682490244", | 
					
						
							|  |  |  |             data | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         test(done) | 
					
						
							| 
									
										
										
										
											2022-06-21 22:57:44 +02:00
										 |  |  |     }) | 
					
						
							|  |  |  | }) |