forked from MapComplete/MapComplete
297 lines
10 KiB
TypeScript
297 lines
10 KiB
TypeScript
import {equal} from "assert";
|
|
import T from "./TestHelper";
|
|
import Locale from "../UI/i18n/Locale";
|
|
import {OH, OpeningHour} from "../UI/OpeningHours/OpeningHours";
|
|
import {Tag} from "../Logic/Tags/Tag";
|
|
import {And} from "../Logic/Tags/And";
|
|
import {TagUtils} from "../Logic/Tags/TagUtils";
|
|
import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig";
|
|
import {RegexTag} from "../Logic/Tags/RegexTag";
|
|
|
|
export default class TagSpec extends T {
|
|
|
|
constructor() {
|
|
super([
|
|
["Parse tag rendering", (() => {
|
|
Locale.language.setData("nl");
|
|
const tr = new TagRenderingConfig({
|
|
render: ({"en": "Name is {name}", "nl": "Ook een {name}"} as any),
|
|
question: "Wat is de naam van dit object?",
|
|
freeform: {
|
|
key: "name",
|
|
},
|
|
|
|
mappings: [
|
|
{
|
|
if: "noname=yes",
|
|
"then": "Has no name"
|
|
}
|
|
],
|
|
condition: "x="
|
|
}, "Tests");
|
|
|
|
equal(undefined, tr.GetRenderValue({"foo": "bar"}));
|
|
equal("Has no name", tr.GetRenderValue({"noname": "yes"})?.txt);
|
|
equal("Ook een {name}", tr.GetRenderValue({"name": "xyz"})?.txt);
|
|
equal(undefined, tr.GetRenderValue({"foo": "bar"}));
|
|
|
|
})],
|
|
[
|
|
"Merge touching opening hours",
|
|
() => {
|
|
const oh1: OpeningHour = {
|
|
weekday: 0,
|
|
startHour: 10,
|
|
startMinutes: 0,
|
|
endHour: 11,
|
|
endMinutes: 0
|
|
};
|
|
const oh0: OpeningHour = {
|
|
weekday: 0,
|
|
startHour: 11,
|
|
startMinutes: 0,
|
|
endHour: 12,
|
|
endMinutes: 0
|
|
};
|
|
|
|
const merged = OH.MergeTimes([oh0, oh1]);
|
|
const r = merged[0];
|
|
equal(merged.length, 1);
|
|
equal(r.startHour, 10);
|
|
equal(r.endHour, 12)
|
|
|
|
}
|
|
],
|
|
[
|
|
"Merge overlapping opening hours",
|
|
() => {
|
|
const oh1: OpeningHour = {
|
|
weekday: 0,
|
|
startHour: 10,
|
|
startMinutes: 0,
|
|
endHour: 11,
|
|
endMinutes: 0
|
|
};
|
|
const oh0: OpeningHour = {
|
|
weekday: 0,
|
|
startHour: 10,
|
|
startMinutes: 30,
|
|
endHour: 12,
|
|
endMinutes: 0
|
|
};
|
|
|
|
const merged = OH.MergeTimes([oh0, oh1]);
|
|
const r = merged[0];
|
|
equal(merged.length, 1);
|
|
equal(r.startHour, 10);
|
|
equal(r.endHour, 12)
|
|
|
|
}],
|
|
|
|
["JOIN OH 1", () => {
|
|
const rules = OH.ToString([
|
|
{
|
|
weekday: 0,
|
|
endHour: 12,
|
|
endMinutes: 0,
|
|
startHour: 10,
|
|
startMinutes: 0
|
|
},
|
|
{
|
|
weekday: 0,
|
|
endHour: 17,
|
|
endMinutes: 0,
|
|
startHour: 13,
|
|
startMinutes: 0
|
|
},
|
|
|
|
|
|
{
|
|
weekday: 1,
|
|
endHour: 17,
|
|
endMinutes: 0,
|
|
startHour: 13,
|
|
startMinutes: 0
|
|
}, {
|
|
weekday: 1,
|
|
endHour: 12,
|
|
endMinutes: 0,
|
|
startHour: 10,
|
|
startMinutes: 0
|
|
},
|
|
|
|
]);
|
|
equal(rules, "Mo-Tu 10:00-12:00, 13:00-17:00");
|
|
}],
|
|
["JOIN OH 2", () => {
|
|
const rules = OH.ToString([
|
|
|
|
{
|
|
weekday: 1,
|
|
endHour: 17,
|
|
endMinutes: 0,
|
|
startHour: 13,
|
|
startMinutes: 0
|
|
}, {
|
|
weekday: 1,
|
|
endHour: 12,
|
|
endMinutes: 0,
|
|
startHour: 10,
|
|
startMinutes: 0
|
|
},
|
|
|
|
]);
|
|
equal(rules, "Tu 10:00-12:00, 13:00-17:00");
|
|
}],
|
|
["JOIN OH 3", () => {
|
|
const rules = OH.ToString([
|
|
|
|
{
|
|
weekday: 3,
|
|
endHour: 17,
|
|
endMinutes: 0,
|
|
startHour: 13,
|
|
startMinutes: 0
|
|
}, {
|
|
weekday: 1,
|
|
endHour: 12,
|
|
endMinutes: 0,
|
|
startHour: 10,
|
|
startMinutes: 0
|
|
},
|
|
|
|
]);
|
|
equal(rules, "Tu 10:00-12:00; Th 13:00-17:00");
|
|
}],
|
|
["JOIN OH 3", () => {
|
|
const rules = OH.ToString([
|
|
|
|
{
|
|
weekday: 6,
|
|
endHour: 17,
|
|
endMinutes: 0,
|
|
startHour: 13,
|
|
startMinutes: 0
|
|
}, {
|
|
weekday: 1,
|
|
endHour: 12,
|
|
endMinutes: 0,
|
|
startHour: 10,
|
|
startMinutes: 0
|
|
},
|
|
|
|
]);
|
|
equal(rules, "Tu 10:00-12:00; Su 13:00-17:00");
|
|
}],
|
|
["JOIN OH with end hours", () => {
|
|
const rules = OH.ToString(
|
|
OH.MergeTimes([
|
|
|
|
{
|
|
weekday: 1,
|
|
endHour: 23,
|
|
endMinutes: 30,
|
|
startHour: 23,
|
|
startMinutes: 0
|
|
}, {
|
|
weekday: 1,
|
|
endHour: 24,
|
|
endMinutes: 0,
|
|
startHour: 23,
|
|
startMinutes: 30
|
|
},
|
|
|
|
]));
|
|
equal(rules, "Tu 23:00-00:00");
|
|
}],
|
|
["JOIN OH with overflowed hours", () => {
|
|
const rules = OH.ToString(
|
|
OH.MergeTimes([
|
|
|
|
{
|
|
weekday: 1,
|
|
endHour: 23,
|
|
endMinutes: 30,
|
|
startHour: 23,
|
|
startMinutes: 0
|
|
}, {
|
|
weekday: 1,
|
|
endHour: 0,
|
|
endMinutes: 0,
|
|
startHour: 23,
|
|
startMinutes: 30
|
|
},
|
|
|
|
]));
|
|
equal(rules, "Tu 23:00-00:00");
|
|
}],
|
|
["Regression", () => {
|
|
|
|
const config = {
|
|
"#": "Bottle refill",
|
|
"question": {
|
|
"en": "How easy is it to fill water bottles?",
|
|
"nl": "Hoe gemakkelijk is het om drinkbussen bij te vullen?",
|
|
"de": "Wie einfach ist es, Wasserflaschen zu füllen?"
|
|
},
|
|
"mappings": [
|
|
{
|
|
"if": "bottle=yes",
|
|
"then": {
|
|
"en": "It is easy to refill water bottles",
|
|
"nl": "Een drinkbus bijvullen gaat makkelijk",
|
|
"de": "Es ist einfach, Wasserflaschen nachzufüllen"
|
|
}
|
|
},
|
|
{
|
|
"if": "bottle=no",
|
|
"then": {
|
|
"en": "Water bottles may not fit",
|
|
"nl": "Een drinkbus past moeilijk",
|
|
"de": "Wasserflaschen passen möglicherweise nicht"
|
|
}
|
|
}
|
|
]
|
|
};
|
|
|
|
const tagRendering = new TagRenderingConfig(config, "test");
|
|
equal(true, tagRendering.IsKnown({bottle: "yes"}))
|
|
equal(false, tagRendering.IsKnown({}))
|
|
}],
|
|
[
|
|
"Tag matches a lazy property",
|
|
() => {
|
|
const properties = {}
|
|
const key = "_key"
|
|
Object.defineProperty(properties, key, {
|
|
configurable: true,
|
|
get: function () {
|
|
delete properties[key]
|
|
properties[key] = "yes"
|
|
return "yes"
|
|
}
|
|
})
|
|
const filter = new Tag("_key", "yes")
|
|
T.isTrue(filter.matchesProperties(properties), "Lazy value not matched")
|
|
}
|
|
],
|
|
[
|
|
"RegextTag matches a lazy property",
|
|
() => {
|
|
const properties = {}
|
|
const key = "_key"
|
|
Object.defineProperty(properties, key, {
|
|
configurable: true,
|
|
get: function () {
|
|
delete properties[key]
|
|
properties[key] = "yes"
|
|
return "yes"
|
|
}
|
|
})
|
|
const filter = TagUtils.Tag("_key~*")
|
|
T.isTrue(filter.matchesProperties(properties), "Lazy value not matched")
|
|
}
|
|
]]);
|
|
}
|
|
|
|
}
|