2023-07-15 18:55:03 +02:00
import { LayerConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayerConfigJson"
import LineRenderingConfigJson from "../../../../src/Models/ThemeConfig/Json/LineRenderingConfigJson"
2022-03-29 00:20:10 +02:00
import {
2023-06-14 20:39:36 +02:00
PrepareLayer ,
RewriteSpecial ,
2023-07-15 18:55:03 +02:00
} from "../../../../src/Models/ThemeConfig/Conversion/PrepareLayer"
import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
import RewritableConfigJson from "../../../../src/Models/ThemeConfig/Json/RewritableConfigJson"
2023-06-14 20:39:36 +02:00
import { describe , expect , it } from "vitest"
2023-11-02 04:35:32 +01:00
import { ConversionContext } from "../../../../src/Models/ThemeConfig/Conversion/ConversionContext"
2023-12-12 03:43:55 +01:00
import { ExpandRewrite } from "../../../../src/Models/ThemeConfig/Conversion/ExpandRewrite"
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 ( )
2023-10-12 16:55:26 +02:00
expect ( ( ) = > rewrite . convertStrict ( spec , ConversionContext . test ( ) ) ) . to . throw
2022-04-03 02:37:31 +02:00
} )
} )
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" , ( ) = > {
2023-10-12 16:55:26 +02:00
const exampleLayer : LayerConfigJson = < any > {
2022-04-03 02:37:31 +02:00
id : "testlayer" ,
source : {
osmTags : "key=value" ,
} ,
2023-10-12 16:55:26 +02:00
lineRendering : [
< any > {
2022-04-03 02:37:31 +02:00
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 ( {
2023-10-12 16:55:26 +02:00
tagRenderings : new Map < string , QuestionableTagRenderingConfigJson > ( ) ,
2022-04-03 02:37:31 +02:00
sharedLayers : new Map < string , LayerConfigJson > ( ) ,
} )
2023-10-12 16:55:26 +02:00
const result = prep . convertStrict ( exampleLayer , ConversionContext . test ( ) )
2022-03-24 03:11:29 +01:00
2022-04-03 02:37:31 +02:00
const expected = {
id : "testlayer" ,
2023-06-14 20:39:36 +02:00
source : { osmTags : "key=value" } ,
2023-10-12 16:55:26 +02:00
lineRendering : [
2022-04-03 02:37:31 +02:00
{
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-06-14 20:39:36 +02: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" ,
} ,
} ,
}
2023-10-12 16:55:26 +02:00
const r = new RewriteSpecial ( ) . convertStrict ( tr , ConversionContext . test ( ) )
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 : {
2024-12-17 04:39:38 +01:00
"*" : "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,,)}" ,
2022-09-08 21:40:48 +02:00
} ,
2022-03-29 00:20:10 +02:00
} )
} )
} )