コード例 #1
0
ファイル: WebhookSender.cs プロジェクト: zhouzu/WireMock.Net
        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));
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        /// <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);
        }