Handlebars-Net / Handlebars.Net

A real .NET Handlebars engine

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Using a custom helper in a escaped string, and escaping a string argument to that helper is not handled correctly by Handlebars.Net

StefH opened this issue · comments

Describe the bug

A clear and concise description of what the bug is.

Expected behavior:

A clear and concise description of what you expected to happen.

Working unit-test

[Fact]
    public void SelectToken_WithComplexTemplate()
    {
        // Arrange
        const string requestAsJson = """
        {
          "bodyAsJson": {
            "pricingContext": {
              "market": "US"
            }
          }
        }
        """;
        var request = JsonConvert.DeserializeObject(requestAsJson);

        // Use single quotes for the JsonPath else it will be parsed correctly by Handlebars.Net
        var action = _handlebarsContext.Compile("{\r\n  \"market\": \"{{JsonPath.SelectToken bodyAsJson '$.pricingContext.market'}}\",\r\n  \"languages\": \"en\"\r\n}");

        // Act
        var result = action(request);

        // Assert
        var expected = """
        {
          "market": "US",
          "languages": "en"
        }
        """;
        result.Should().Be(expected);
    }

Using escaped double quotes does not work:

"{\r\n  \"market\": \"{{JsonPath.SelectToken bodyAsJson \\\"$.pricingContext.market'}}\\\",\r\n  \"languages\": \"en\"\r\n}"

Exception:
System.NullReferenceException : Object reference not set to an instance of an object.

Linked to
WireMock-Net/WireMock.Net#1108