forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			163 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
	
		
			6.1 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)
 | 
						|
    })
 | 
						|
})
 |