public Task <HttpResponseMessage> SendAsync([NotNull] HttpClient client, [NotNull] IWebhookRequest request, [NotNull] RequestMessage originalRequestMessage, [NotNull] ResponseMessage originalResponseMessage) { Check.NotNull(client, nameof(client)); Check.NotNull(request, nameof(request)); Check.NotNull(originalRequestMessage, nameof(originalRequestMessage)); Check.NotNull(originalResponseMessage, nameof(originalResponseMessage)); IBodyData bodyData; IDictionary <string, WireMockList <string> > headers; if (request.UseTransformer == true) { ITransformer responseMessageTransformer; switch (request.TransformerType) { case TransformerType.Handlebars: var factoryHandlebars = new HandlebarsContextFactory(_settings.FileSystemHandler, _settings.HandlebarsRegistrationCallback); responseMessageTransformer = new Transformer(factoryHandlebars); break; case TransformerType.Scriban: case TransformerType.ScribanDotLiquid: var factoryDotLiquid = new ScribanContextFactory(_settings.FileSystemHandler, request.TransformerType); responseMessageTransformer = new Transformer(factoryDotLiquid); break; default: throw new NotImplementedException($"TransformerType '{request.TransformerType}' is not supported."); } (bodyData, headers) = responseMessageTransformer.Transform(originalRequestMessage, originalResponseMessage, request.BodyData, request.Headers); } else { bodyData = request.BodyData; headers = request.Headers; } // Create RequestMessage var requestMessage = new RequestMessage( new UrlDetails(request.Url), request.Method, ClientIp, bodyData, headers?.ToDictionary(x => x.Key, x => x.Value.ToArray()) ) { DateTime = DateTime.UtcNow }; // Create HttpRequestMessage var httpRequestMessage = HttpRequestMessageHelper.Create(requestMessage, request.Url); // Call the URL return(client.SendAsync(httpRequestMessage)); }
public void Create_With_Scriban_TransformerType_Creates_ITransformerContext(TransformerType transformerType) { // Arrange var sut = new ScribanContextFactory(_fileSystemHandlerMock.Object, transformerType); // Act var result = sut.Create(); // Assert result.Should().NotBeNull(); }
/// <inheritdoc cref="IResponseProvider.ProvideResponseAsync(RequestMessage, IWireMockServerSettings)"/> public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { Check.NotNull(requestMessage, nameof(requestMessage)); Check.NotNull(settings, nameof(settings)); if (Delay != null) { await Task.Delay(Delay.Value); } if (ProxyAndRecordSettings != null && _httpClientForProxy != null) { string RemoveFirstOccurrence(string source, string find) { int place = source.IndexOf(find, StringComparison.OrdinalIgnoreCase); return(place >= 0 ? source.Remove(place, find.Length) : source); } var requestUri = new Uri(requestMessage.Url); // Build the proxy url and skip duplicates string extra = RemoveFirstOccurrence(requestUri.LocalPath.TrimEnd('/'), new Uri(ProxyAndRecordSettings.Url).LocalPath.TrimEnd('/')); requestMessage.ProxyUrl = ProxyAndRecordSettings.Url + extra + requestUri.Query; var proxyHelper = new ProxyHelper(settings); var(proxyResponseMessage, _) = await proxyHelper.SendAsync( ProxyAndRecordSettings, _httpClientForProxy, requestMessage, requestMessage.ProxyUrl ); return(proxyResponseMessage); } ResponseMessage responseMessage; if (Callback == null && CallbackAsync == null) { responseMessage = ResponseMessage; } else { if (Callback != null) { responseMessage = Callback(requestMessage); } else { responseMessage = await CallbackAsync(requestMessage); } if (!WithCallbackUsed) { // Copy StatusCode from ResponseMessage responseMessage.StatusCode = ResponseMessage.StatusCode; // Copy Headers from ResponseMessage (if defined) if (ResponseMessage.Headers != null) { responseMessage.Headers = ResponseMessage.Headers; } } } if (UseTransformer) { ITransformer responseMessageTransformer; switch (TransformerType) { case TransformerType.Handlebars: var factoryHandlebars = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback); responseMessageTransformer = new Transformer(factoryHandlebars); break; case TransformerType.Scriban: case TransformerType.ScribanDotLiquid: var factoryDotLiquid = new ScribanContextFactory(settings.FileSystemHandler, TransformerType); responseMessageTransformer = new Transformer(factoryDotLiquid); break; default: throw new NotImplementedException($"TransformerType '{TransformerType}' is not supported."); } return(responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile)); } if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true) { ResponseMessage.BodyData.BodyAsBytes = settings.FileSystemHandler.ReadResponseBodyAsFile(responseMessage.BodyData.BodyAsFile); } return(responseMessage); }