forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			196 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			196 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {describe} from 'mocha'
							 | 
						||
| 
								 | 
							
								import {expect} from 'chai'
							 | 
						||
| 
								 | 
							
								import {Utils} from "../../../Utils";
							 | 
						||
| 
								 | 
							
								import {ChangesetHandler, ChangesetTag} from "../../../Logic/Osm/ChangesetHandler";
							 | 
						||
| 
								 | 
							
								import {UIEventSource} from "../../../Logic/UIEventSource";
							 | 
						||
| 
								 | 
							
								import {OsmConnection} from "../../../Logic/Osm/OsmConnection";
							 | 
						||
| 
								 | 
							
								import {ElementStorage} from "../../../Logic/ElementStorage";
							 | 
						||
| 
								 | 
							
								import {Changes} from "../../../Logic/Osm/Changes";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe("ChangesetHanlder", () => {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    describe("RewriteTagsOf", () => {
							 | 
						||
| 
								 | 
							
								        it("should insert new tags", () => {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            const changesetHandler = new ChangesetHandler(new UIEventSource<boolean>(true),
							 | 
						||
| 
								 | 
							
								                new OsmConnection({}),
							 | 
						||
| 
								 | 
							
								                new ElementStorage(),
							 | 
						||
| 
								 | 
							
								                new Changes(),
							 | 
						||
| 
								 | 
							
								                new UIEventSource(undefined)
							 | 
						||
| 
								 | 
							
								            );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            const oldChangesetMeta = {
							 | 
						||
| 
								 | 
							
								                "type": "changeset",
							 | 
						||
| 
								 | 
							
								                "id": 118443748,
							 | 
						||
| 
								 | 
							
								                "created_at": "2022-03-13T19:52:10Z",
							 | 
						||
| 
								 | 
							
								                "closed_at": "2022-03-13T20:54:35Z",
							 | 
						||
| 
								 | 
							
								                "open": false,
							 | 
						||
| 
								 | 
							
								                "user": "Pieter Vander Vennet",
							 | 
						||
| 
								 | 
							
								                "uid": 3818858,
							 | 
						||
| 
								 | 
							
								                "minlat": 51.0361902,
							 | 
						||
| 
								 | 
							
								                "minlon": 3.7092939,
							 | 
						||
| 
								 | 
							
								                "maxlat": 51.0364194,
							 | 
						||
| 
								 | 
							
								                "maxlon": 3.7099520,
							 | 
						||
| 
								 | 
							
								                "comments_count": 0,
							 | 
						||
| 
								 | 
							
								                "changes_count": 3,
							 | 
						||
| 
								 | 
							
								                "tags": {
							 | 
						||
| 
								 | 
							
								                    "answer": "5",
							 | 
						||
| 
								 | 
							
								                    "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen",
							 | 
						||
| 
								 | 
							
								                    "created_by": "MapComplete 0.16.6",
							 | 
						||
| 
								 | 
							
								                    "host": "https://mapcomplete.osm.be/toerisme_vlaanderen.html",
							 | 
						||
| 
								 | 
							
								                    "imagery": "osm",
							 | 
						||
| 
								 | 
							
								                    "locale": "nl",
							 | 
						||
| 
								 | 
							
								                    "source": "survey",
							 | 
						||
| 
								 | 
							
								                    "source:node/-1": "note/1234",
							 | 
						||
| 
								 | 
							
								                    "theme": "toerisme_vlaanderen",
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            const rewritten = changesetHandler.RewriteTagsOf(
							 | 
						||
| 
								 | 
							
								                [{
							 | 
						||
| 
								 | 
							
								                    key: "newTag",
							 | 
						||
| 
								 | 
							
								                    value: "newValue",
							 | 
						||
| 
								 | 
							
								                    aggregate: false
							 | 
						||
| 
								 | 
							
								                }],
							 | 
						||
| 
								 | 
							
								                new Map<string, string>(),
							 | 
						||
| 
								 | 
							
								                oldChangesetMeta)
							 | 
						||
| 
								 | 
							
								            const d = Utils.asDict(rewritten)
							 | 
						||
| 
								 | 
							
								            expect(d.size).deep.equal(10)
							 | 
						||
| 
								 | 
							
								            expect(d.get("answer")).deep.equal("5")
							 | 
						||
| 
								 | 
							
								            expect(d.get("comment")).deep.equal("Adding data with #MapComplete for theme #toerisme_vlaanderen")
							 | 
						||
| 
								 | 
							
								            expect(d.get("created_by")).deep.equal("MapComplete 0.16.6")
							 | 
						||
| 
								 | 
							
								            expect(d.get("host")).deep.equal("https://mapcomplete.osm.be/toerisme_vlaanderen.html")
							 | 
						||
| 
								 | 
							
								            expect(d.get("imagery")).deep.equal("osm")
							 | 
						||
| 
								 | 
							
								            expect(d.get("source")).deep.equal("survey")
							 | 
						||
| 
								 | 
							
								            expect(d.get("source:node/-1")).deep.equal("note/1234")
							 | 
						||
| 
								 | 
							
								            expect(d.get("theme")).deep.equal("toerisme_vlaanderen")
							 | 
						||
| 
								 | 
							
								            expect(d.get("newTag")).deep.equal("newValue")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        it("should aggregate numeric tags", () => {
							 | 
						||
| 
								 | 
							
								            const changesetHandler = new ChangesetHandler(new UIEventSource<boolean>(true),
							 | 
						||
| 
								 | 
							
								                new OsmConnection({}),
							 | 
						||
| 
								 | 
							
								                new ElementStorage(),
							 | 
						||
| 
								 | 
							
								                new Changes(),
							 | 
						||
| 
								 | 
							
								                new UIEventSource(undefined)
							 | 
						||
| 
								 | 
							
								            );
							 | 
						||
| 
								 | 
							
								            const oldChangesetMeta = {
							 | 
						||
| 
								 | 
							
								                "type": "changeset",
							 | 
						||
| 
								 | 
							
								                "id": 118443748,
							 | 
						||
| 
								 | 
							
								                "created_at": "2022-03-13T19:52:10Z",
							 | 
						||
| 
								 | 
							
								                "closed_at": "2022-03-13T20:54:35Z",
							 | 
						||
| 
								 | 
							
								                "open": false,
							 | 
						||
| 
								 | 
							
								                "user": "Pieter Vander Vennet",
							 | 
						||
| 
								 | 
							
								                "uid": 3818858,
							 | 
						||
| 
								 | 
							
								                "minlat": 51.0361902,
							 | 
						||
| 
								 | 
							
								                "minlon": 3.7092939,
							 | 
						||
| 
								 | 
							
								                "maxlat": 51.0364194,
							 | 
						||
| 
								 | 
							
								                "maxlon": 3.7099520,
							 | 
						||
| 
								 | 
							
								                "comments_count": 0,
							 | 
						||
| 
								 | 
							
								                "changes_count": 3,
							 | 
						||
| 
								 | 
							
								                "tags": {
							 | 
						||
| 
								 | 
							
								                    "answer": "5",
							 | 
						||
| 
								 | 
							
								                    "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen",
							 | 
						||
| 
								 | 
							
								                    "created_by": "MapComplete 0.16.6",
							 | 
						||
| 
								 | 
							
								                    "host": "https://mapcomplete.osm.be/toerisme_vlaanderen.html",
							 | 
						||
| 
								 | 
							
								                    "imagery": "osm",
							 | 
						||
| 
								 | 
							
								                    "locale": "nl",
							 | 
						||
| 
								 | 
							
								                    "source": "survey",
							 | 
						||
| 
								 | 
							
								                    "source:node/-1": "note/1234",
							 | 
						||
| 
								 | 
							
								                    "theme": "toerisme_vlaanderen",
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            const rewritten = changesetHandler.RewriteTagsOf(
							 | 
						||
| 
								 | 
							
								                [{
							 | 
						||
| 
								 | 
							
								                    key: "answer",
							 | 
						||
| 
								 | 
							
								                    value: "37",
							 | 
						||
| 
								 | 
							
								                    aggregate: true
							 | 
						||
| 
								 | 
							
								                }],
							 | 
						||
| 
								 | 
							
								                new Map<string, string>(),
							 | 
						||
| 
								 | 
							
								                oldChangesetMeta)
							 | 
						||
| 
								 | 
							
								            const d = Utils.asDict(rewritten)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            expect(d.size).deep.equal(9)
							 | 
						||
| 
								 | 
							
								            expect(d.get("answer")).deep.equal("42")
							 | 
						||
| 
								 | 
							
								            expect(d.get("comment")).deep.equal("Adding data with #MapComplete for theme #toerisme_vlaanderen")
							 | 
						||
| 
								 | 
							
								            expect(d.get("created_by")).deep.equal("MapComplete 0.16.6")
							 | 
						||
| 
								 | 
							
								            expect(d.get("host")).deep.equal("https://mapcomplete.osm.be/toerisme_vlaanderen.html")
							 | 
						||
| 
								 | 
							
								            expect(d.get("imagery")).deep.equal("osm")
							 | 
						||
| 
								 | 
							
								            expect(d.get("source")).deep.equal("survey")
							 | 
						||
| 
								 | 
							
								            expect(d.get("source:node/-1")).deep.equal("note/1234")
							 | 
						||
| 
								 | 
							
								            expect(d.get("theme")).deep.equal("toerisme_vlaanderen")
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        it("should rewrite special reasons with the correct ID", () => {
							 | 
						||
| 
								 | 
							
								            const changesetHandler = new ChangesetHandler(new UIEventSource<boolean>(true),
							 | 
						||
| 
								 | 
							
								                new OsmConnection({}),
							 | 
						||
| 
								 | 
							
								                new ElementStorage(),
							 | 
						||
| 
								 | 
							
								                new Changes(),
							 | 
						||
| 
								 | 
							
								                new UIEventSource(undefined)
							 | 
						||
| 
								 | 
							
								            );
							 | 
						||
| 
								 | 
							
								            const oldChangesetMeta = {
							 | 
						||
| 
								 | 
							
								                "type": "changeset",
							 | 
						||
| 
								 | 
							
								                "id": 118443748,
							 | 
						||
| 
								 | 
							
								                "created_at": "2022-03-13T19:52:10Z",
							 | 
						||
| 
								 | 
							
								                "closed_at": "2022-03-13T20:54:35Z",
							 | 
						||
| 
								 | 
							
								                "open": false,
							 | 
						||
| 
								 | 
							
								                "user": "Pieter Vander Vennet",
							 | 
						||
| 
								 | 
							
								                "uid": 3818858,
							 | 
						||
| 
								 | 
							
								                "minlat": 51.0361902,
							 | 
						||
| 
								 | 
							
								                "minlon": 3.7092939,
							 | 
						||
| 
								 | 
							
								                "maxlat": 51.0364194,
							 | 
						||
| 
								 | 
							
								                "maxlon": 3.7099520,
							 | 
						||
| 
								 | 
							
								                "comments_count": 0,
							 | 
						||
| 
								 | 
							
								                "changes_count": 3,
							 | 
						||
| 
								 | 
							
								                "tags": {
							 | 
						||
| 
								 | 
							
								                    "answer": "5",
							 | 
						||
| 
								 | 
							
								                    "comment": "Adding data with #MapComplete for theme #toerisme_vlaanderen",
							 | 
						||
| 
								 | 
							
								                    "created_by": "MapComplete 0.16.6",
							 | 
						||
| 
								 | 
							
								                    "host": "https://mapcomplete.osm.be/toerisme_vlaanderen.html",
							 | 
						||
| 
								 | 
							
								                    "imagery": "osm",
							 | 
						||
| 
								 | 
							
								                    "locale": "nl",
							 | 
						||
| 
								 | 
							
								                    "source": "survey",
							 | 
						||
| 
								 | 
							
								                    "source:node/-1": "note/1234",
							 | 
						||
| 
								 | 
							
								                    "theme": "toerisme_vlaanderen",
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            const rewritten = changesetHandler.RewriteTagsOf(
							 | 
						||
| 
								 | 
							
								                [],
							 | 
						||
| 
								 | 
							
								                new Map<string, string>([["node/-1", "node/42"]]),
							 | 
						||
| 
								 | 
							
								                oldChangesetMeta)
							 | 
						||
| 
								 | 
							
								            const d = Utils.asDict(rewritten)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            expect(d.size).deep.equal(9)
							 | 
						||
| 
								 | 
							
								            expect(d.get("answer")).deep.equal("5")
							 | 
						||
| 
								 | 
							
								            expect(d.get("comment")).deep.equal("Adding data with #MapComplete for theme #toerisme_vlaanderen")
							 | 
						||
| 
								 | 
							
								            expect(d.get("created_by")).deep.equal("MapComplete 0.16.6")
							 | 
						||
| 
								 | 
							
								            expect(d.get("host")).deep.equal("https://mapcomplete.osm.be/toerisme_vlaanderen.html")
							 | 
						||
| 
								 | 
							
								            expect(d.get("imagery")).deep.equal("osm")
							 | 
						||
| 
								 | 
							
								            expect(d.get("source")).deep.equal("survey")
							 | 
						||
| 
								 | 
							
								            expect(d.get("source:node/42")).deep.equal("note/1234")
							 | 
						||
| 
								 | 
							
								            expect(d.get("theme")).deep.equal("toerisme_vlaanderen")
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    describe("rewriteMetaTags" , () => {
							 | 
						||
| 
								 | 
							
								        it("should rewrite special reasons with the correct ID", () => {
							 | 
						||
| 
								 | 
							
								            const extraMetaTags : ChangesetTag[] = [
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    key: "created_by",
							 | 
						||
| 
								 | 
							
								                    value:"mapcomplete"
							 | 
						||
| 
								 | 
							
								                },
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    key: "source:node/-1",
							 | 
						||
| 
								 | 
							
								                    value:"note/1234"
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								            const changes = new Map<string, string>([["node/-1","node/42"]])
							 | 
						||
| 
								 | 
							
								            const hasSpecialMotivationChanges = ChangesetHandler.rewriteMetaTags(extraMetaTags, changes)
							 | 
						||
| 
								 | 
							
								            expect(hasSpecialMotivationChanges, "Special rewrite did not trigger").true
							 | 
						||
| 
								 | 
							
								            // Rewritten inline by rewriteMetaTags
							 | 
						||
| 
								 | 
							
								            expect(extraMetaTags[1].key).deep.equal("source:node/42")
							 | 
						||
| 
								 | 
							
								            expect(extraMetaTags[1].value).deep.equal("note/1234")
							 | 
						||
| 
								 | 
							
								            expect(extraMetaTags[0].key).deep.equal("created_by")
							 | 
						||
| 
								 | 
							
								            expect(extraMetaTags[0].value).deep.equal("mapcomplete")
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								})
							 |