mapcomplete/test/Logic/OSM/ChangesetHandler.spec.ts

195 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")
})
})
})