ProxyUrlTransformer (#1361)

* ProxyUrlTransformer

* tests

* Update src/WireMock.Net.Shared/Settings/ProxyUrlReplaceSettings.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Stef Heyenrath
2025-09-28 12:40:33 +02:00
committed by GitHub
parent 371bfdc160
commit 19e95325fa
10 changed files with 195 additions and 77 deletions

View File

@@ -6,7 +6,7 @@ using WireMock.Util;
namespace WireMock.Transformers;
interface ITransformer
internal interface ITransformer
{
ResponseMessage Transform(IMapping mapping, IRequestMessage requestMessage, IResponseMessage original, bool useTransformerForBodyAsFile, ReplaceNodeOptions options);
@@ -15,4 +15,6 @@ interface ITransformer
IDictionary<string, WireMockList<string>> TransformHeaders(IMapping mapping, IRequestMessage originalRequestMessage, IResponseMessage originalResponseMessage, IDictionary<string, WireMockList<string>>? headers);
string TransformString(IMapping mapping, IRequestMessage originalRequestMessage, IResponseMessage originalResponseMessage, string? value);
string Transform(string template, object? model);
}

View File

@@ -1,9 +1,8 @@
// Copyright © WireMock.Net
namespace WireMock.Transformers
namespace WireMock.Transformers;
internal interface ITransformerContextFactory
{
interface ITransformerContextFactory
{
ITransformerContext Create();
}
ITransformerContext Create();
}

View File

@@ -75,6 +75,11 @@ internal class Transformer : ITransformer
return transformerContext.ParseAndRender(value, model);
}
public string Transform(string template, object? model)
{
return model is null ? string.Empty : _factory.Create().ParseAndRender(template, model);
}
public ResponseMessage Transform(IMapping mapping, IRequestMessage requestMessage, IResponseMessage original, bool useTransformerForBodyAsFile, ReplaceNodeOptions options)
{
var responseMessage = new ResponseMessage();

View File

@@ -0,0 +1,30 @@
// Copyright © WireMock.Net
using System;
using WireMock.Settings;
using WireMock.Transformers.Handlebars;
using WireMock.Transformers.Scriban;
using WireMock.Types;
namespace WireMock.Transformers;
internal static class TransformerFactory
{
internal static ITransformer Create(TransformerType transformerType, WireMockServerSettings settings)
{
switch (transformerType)
{
case TransformerType.Handlebars:
var factoryHandlebars = new HandlebarsContextFactory(settings);
return new Transformer(settings, factoryHandlebars);
case TransformerType.Scriban:
case TransformerType.ScribanDotLiquid:
var factoryDotLiquid = new ScribanContextFactory(settings.FileSystemHandler, transformerType);
return new Transformer(settings, factoryDotLiquid);
default:
throw new NotSupportedException($"{nameof(TransformerType)} '{transformerType}' is not supported.");
}
}
}