forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			135 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { LayerConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayerConfigJson"
 | |
| import LineRenderingConfigJson from "../../../../src/Models/ThemeConfig/Json/LineRenderingConfigJson"
 | |
| import {
 | |
|     PrepareLayer,
 | |
|     RewriteSpecial,
 | |
| } from "../../../../src/Models/ThemeConfig/Conversion/PrepareLayer"
 | |
| import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
 | |
| import RewritableConfigJson from "../../../../src/Models/ThemeConfig/Json/RewritableConfigJson"
 | |
| import { describe, expect, it } from "vitest"
 | |
| 
 | |
| import { ConversionContext } from "../../../../src/Models/ThemeConfig/Conversion/ConversionContext"
 | |
| import { ExpandRewrite } from "../../../../src/Models/ThemeConfig/Conversion/ExpandRewrite"
 | |
| 
 | |
| 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.convertStrict(spec, ConversionContext.test())).to.throw
 | |
|     })
 | |
| })
 | |
| 
 | |
| describe("PrepareLayer", () => {
 | |
|     it("should expand rewrites in map renderings", () => {
 | |
|         const exampleLayer: LayerConfigJson = <any>{
 | |
|             id: "testlayer",
 | |
|             source: {
 | |
|                 osmTags: "key=value",
 | |
|             },
 | |
|             lineRendering: [
 | |
|                 <any>{
 | |
|                     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",
 | |
|                                 },
 | |
|                             ],
 | |
|                         },
 | |
|                         offset: "lr_offset",
 | |
|                     },
 | |
|                 },
 | |
|             ],
 | |
|         }
 | |
|         const prep = new PrepareLayer({
 | |
|             tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
 | |
|             sharedLayers: new Map<string, LayerConfigJson>(),
 | |
|         })
 | |
|         const result = prep.convertStrict(exampleLayer, ConversionContext.test())
 | |
| 
 | |
|         const expected = {
 | |
|             id: "testlayer",
 | |
|             source: { osmTags: "key=value" },
 | |
|             lineRendering: [
 | |
|                 {
 | |
|                     color: {
 | |
|                         render: "#888",
 | |
|                         mappings: [
 | |
|                             {
 | |
|                                 if: "parking:condition:left=free",
 | |
|                                 then: "#299921",
 | |
|                             },
 | |
|                             {
 | |
|                                 if: "parking:condition:left=disc",
 | |
|                                 then: "#219991",
 | |
|                             },
 | |
|                         ],
 | |
|                     },
 | |
|                     offset: -6,
 | |
|                 },
 | |
|                 {
 | |
|                     color: {
 | |
|                         render: "#888",
 | |
|                         mappings: [
 | |
|                             {
 | |
|                                 if: "parking:condition:right=free",
 | |
|                                 then: "#299921",
 | |
|                             },
 | |
|                             {
 | |
|                                 if: "parking:condition:right=disc",
 | |
|                                 then: "#219991",
 | |
|                             },
 | |
|                         ],
 | |
|                     },
 | |
|                     offset: 6,
 | |
|                 },
 | |
|             ],
 | |
|             titleIcons: [{ render: "icons.defaults", id: "iconsdefaults" }],
 | |
|         }
 | |
| 
 | |
|         expect(result).toEqual(expected)
 | |
|     })
 | |
| })
 | |
| 
 | |
| 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",
 | |
|                 },
 | |
|             },
 | |
|         }
 | |
|         const r = new RewriteSpecial().convertStrict(tr, ConversionContext.test())
 | |
|         expect(r).toEqual({
 | |
|             id: "uk_addresses_import_button",
 | |
|             render: {
 | |
|                 "*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,)}",
 | |
|             },
 | |
|         })
 | |
|     })
 | |
| })
 |