2022-03-24 03:11:29 +01:00
import { LayerConfigJson } from "../../../../Models/ThemeConfig/Json/LayerConfigJson"
import { TagRenderingConfigJson } from "../../../../Models/ThemeConfig/Json/TagRenderingConfigJson"
2022-03-24 03:11:52 +01:00
import LineRenderingConfigJson from "../../../../Models/ThemeConfig/Json/LineRenderingConfigJson"
2022-03-29 00:20:10 +02:00
import {
ExpandRewrite ,
2022-04-03 03:26:26 +02:00
PrepareLayer ,
2022-03-29 00:20:10 +02:00
RewriteSpecial ,
} from "../../../../Models/ThemeConfig/Conversion/PrepareLayer"
import { QuestionableTagRenderingConfigJson } from "../../../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
2022-04-03 02:37:31 +02:00
import RewritableConfigJson from "../../../../Models/ThemeConfig/Json/RewritableConfigJson"
2023-02-03 04:48:32 +01:00
import { describe , expect , it } from "vitest"
2022-04-03 03:26:26 +02:00
2022-04-03 02:37:31 +02:00
describe ( "ExpandRewrite" , ( ) = > {
it ( "should not allow overlapping keys" , ( ) = > {
const spec = < RewritableConfigJson < string > > {
rewrite : {
sourceString : [ "xyz" , "longer_xyz" ] ,
into : [ [ "a" , "b" ] , [ "A, B" ] ] ,
} ,
renderings : "The value of xyz is longer_xyz" ,
}
const rewrite = new ExpandRewrite ( )
expect ( ( ) = > rewrite . convert ( spec , "test" ) ) . to . throw
} )
} )
2022-03-24 03:11:52 +01:00
describe ( "PrepareLayer" , ( ) = > {
2022-04-03 02:37:31 +02:00
it ( "should expand rewrites in map renderings" , ( ) = > {
const exampleLayer : LayerConfigJson = {
id : "testlayer" ,
source : {
osmTags : "key=value" ,
} ,
mapRendering : [
{
rewrite : {
sourceString : [ "left|right" , "lr_offset" ] ,
into : [
[ "left" , - 6 ] ,
[ "right" , + 6 ] ,
] ,
} ,
renderings : < LineRenderingConfigJson > {
color : {
render : "#888" ,
mappings : [
{
if : "parking:condition:left|right=free" ,
then : "#299921" ,
} ,
{
if : "parking:condition:left|right=disc" ,
then : "#219991" ,
} ,
2022-03-24 03:11:52 +01:00
] ,
} ,
2022-04-03 02:37:31 +02:00
offset : "lr_offset" ,
2022-03-24 03:11:52 +01:00
} ,
2022-04-03 02:37:31 +02:00
} ,
] ,
}
const prep = new PrepareLayer ( {
tagRenderings : new Map < string , TagRenderingConfigJson > ( ) ,
sharedLayers : new Map < string , LayerConfigJson > ( ) ,
} )
const result = prep . convertStrict ( exampleLayer , "test" )
2022-03-24 03:11:29 +01:00
2022-04-03 02:37:31 +02:00
const expected = {
id : "testlayer" ,
source : { osmTags : "key=value" } ,
mapRendering : [
{
color : {
render : "#888" ,
mappings : [
{
if : "parking:condition:left=free" ,
then : "#299921" ,
2022-09-08 21:40:48 +02:00
} ,
{
2022-04-03 02:37:31 +02:00
if : "parking:condition:left=disc" ,
then : "#219991" ,
2022-09-08 21:40:48 +02:00
} ,
] ,
2022-03-24 03:11:52 +01:00
} ,
2022-04-03 02:37:31 +02:00
offset : - 6 ,
} ,
{
color : {
render : "#888" ,
mappings : [
{
if : "parking:condition:right=free" ,
then : "#299921" ,
2022-09-08 21:40:48 +02:00
} ,
{
2022-04-03 02:37:31 +02:00
if : "parking:condition:right=disc" ,
then : "#219991" ,
2022-09-08 21:40:48 +02:00
} ,
] ,
2022-03-24 03:11:52 +01:00
} ,
2022-04-03 02:37:31 +02:00
offset : 6 ,
} ,
] ,
2023-02-09 00:10:59 +01:00
titleIcons : [ { render : "icons.defaults" , id : "iconsdefaults" } ] ,
2022-04-03 02:37:31 +02:00
}
2022-03-24 03:11:29 +01:00
2023-02-03 04:48:32 +01:00
expect ( result ) . toEqual ( expected )
2022-04-03 02:37:31 +02:00
} )
2022-03-24 03:11:29 +01:00
} )
2022-03-29 00:20:10 +02:00
describe ( "RewriteSpecial" , function ( ) {
it ( "should rewrite the UK import button" , ( ) = > {
const tr = < QuestionableTagRenderingConfigJson > {
id : "uk_addresses_import_button" ,
render : {
special : {
type : "import_button" ,
targetLayer : "address" ,
tags : "urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$" ,
text : "Add this address" ,
icon : "./assets/themes/uk_addresses/housenumber_add.svg" ,
location_picker : "none" ,
} ,
} ,
}
const r = new RewriteSpecial ( ) . convert ( tr , "test" ) . result
2023-02-03 04:48:32 +01:00
expect ( r ) . toEqual ( {
2022-03-29 00:20:10 +02:00
id : "uk_addresses_import_button" ,
2022-07-14 15:45:57 +02:00
render : {
"*" : "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,none,)}" ,
2022-09-08 21:40:48 +02:00
} ,
2022-03-29 00:20:10 +02:00
} )
} )
} )