Пример #1
0
        private async Task <IResponseDetails> ProcessRequestDefinition(IRequestDetails requestDetails, MockedRequestDefinition mockedRequestWithDefinition, CancellationToken cancellationToken)
        {
            var requestDefinition = mockedRequestWithDefinition.RequestDefinition;

            if (requestDefinition == null)
            {
                return new Models.ResponseDetails {
                           StatusCode = StatusCodes.Status200OK
                }
            }
            ;

            var handled = false;

            var response = new Models.ResponseDetails();

            handled |= FillContentType(requestDefinition, response);

            handled |= FillStatusCode(requestDefinition, response);

            handled |= await FillDelay(requestDefinition, cancellationToken);

            handled |= FillPayload(requestDetails, requestDefinition, response);

            handled |= FillHeaders(requestDefinition, response);

            if (handled)
            {
                _logger.LogInformation($"Handler description={requestDefinition.Description ?? "N/A"}, Request counter={mockedRequestWithDefinition.MockedRequest.Counter}");
            }

            return(response);
        }
Пример #2
0
        private static bool FillStatusCode(
            RequestDefinitionItem requestDefinition, Models.ResponseDetails response)
        {
            if (requestDefinition.Then.StatusCode <= 0)
            {
                return(false);
            }

            response.StatusCode = requestDefinition.Then.StatusCode;
            return(true);
        }
Пример #3
0
        private static bool FillContentType(RequestDefinitionItem requestDefinition, Models.ResponseDetails response)
        {
            if (!string.IsNullOrWhiteSpace(requestDefinition.Then.ContentType))
            {
                response.ContentType = requestDefinition.Then.ContentType;
                return(true);
            }

            response.ContentType = MediaTypeNames.Application.Json;
            return(false);
        }
Пример #4
0
        private static bool FillHeaders(RequestDefinitionItem requestDefinition, Models.ResponseDetails response)
        {
            if (requestDefinition.Then.Headers == null || requestDefinition.Then.Headers.Count == 0)
            {
                return(false);
            }

            response.Headers ??= new Dictionary <string, string>();

            foreach (var thenHeader in requestDefinition.Then.Headers)
            {
                response.Headers[thenHeader.Key] = thenHeader.Value;
            }
            return(true);
        }
Пример #5
0
        private bool FillPayload(IRequestDetails requestDetails, RequestDefinitionItem requestDefinition, Models.ResponseDetails response)
        {
            var payload = requestDefinition.Then.Payload;

            if (string.IsNullOrWhiteSpace(payload))
            {
                return(false);
            }

            payload = ReplaceGuids(payload);

            if (requestDefinition.When.UrlRegexExpression != null)
            {
                foreach (var urlVariable in requestDefinition.When.UrlVariables)
                {
                    while (payload.Contains($"@{urlVariable}"))
                    {
                        var match = Regex.Match(requestDetails.Uri, requestDefinition.When.UrlRegexExpression, RegexOptions.IgnoreCase | RegexOptions.Singleline);

                        payload = payload.Replace($"@{urlVariable}", match.Groups[urlVariable]?.Value);
                    }
                }
            }

            response.ContentType = requestDefinition.Then.ContentType;
            response.Content     = payload;
            return(true);
        }