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