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([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(true), neededTiles, state: { osmConnection: { Backend(): string { return "https://osm.org" } }, filteredLayers: new UIEventSource([ { appliedFilters: new UIEventSource>(undefined), layerDef: new LayerConfig({ id: "school", source: { osmTags: "amenity=school" }, mapRendering: null }), isDisplayed: new UIEventSource(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) }) })