Exemplo n.º 1
0
        public async Task <InputMappings> ParsePathMappings()
        {
            var inputMappings = new InputMappings();

            if (mockConfiguration?.Any() != true)
            {
                return(inputMappings);
            }

            foreach (var httpMockSetting in mockConfiguration)
            {
                if (!string.IsNullOrEmpty(httpMockSetting.Request.Path))
                {
                    if (!string.IsNullOrEmpty(httpMockSetting.Request.BodyContains) ||
                        !string.IsNullOrEmpty(httpMockSetting.Request.BodyDoesNotContain))
                    {
                        foreach (var method in httpMockSetting.Request.Methods)
                        {
                            var key = new PathMappingKey
                            {
                                Path   = httpMockSetting.Request.Path,
                                Method = method,
                            };

                            if (inputMappings.BodyCheckMapping.ContainsKey(key))
                            {
                                var bodyContainesList = inputMappings.BodyCheckMapping[key];
                                bodyContainesList.Add(httpMockSetting);
                            }
                            else
                            {
                                inputMappings.BodyCheckMapping.TryAdd(key, new List <HttpMockSetting> {
                                    httpMockSetting
                                });
                            }
                        }
                    }
                    else
                    {
                        foreach (var method in httpMockSetting.Request.Methods)
                        {
                            var key = new PathMappingKey
                            {
                                Path   = httpMockSetting.Request.Path,
                                Method = method
                            };

                            inputMappings.PathMapping.TryAdd(key, httpMockSetting);
                        }
                    }
                }
                else if (!string.IsNullOrEmpty(httpMockSetting.Request.PathStartsWith))
                {
                    foreach (var method in httpMockSetting.Request.Methods)
                    {
                        var key = new PathMappingKey
                        {
                            Path   = httpMockSetting.Request.PathStartsWith,
                            Method = method
                        };

                        inputMappings.PathStartsWithMapping.TryAdd(key, httpMockSetting);
                    }
                }
                else if (!string.IsNullOrWhiteSpace(httpMockSetting.Request.PathMatchesRegex))
                {
                    foreach (var method in httpMockSetting.Request.Methods)
                    {
                        var key = new PathMappingRegexKey
                        {
                            Regex  = new Regex(httpMockSetting.Request.PathMatchesRegex, RegexOptions.Compiled),
                            Method = method,
                        };

                        inputMappings.PathMatchesRegexMapping.TryAdd(key, httpMockSetting);
                    }
                }
            }

            await LoadBodyFromFile(inputMappings);

            return(inputMappings);
        }
Exemplo n.º 2
0
        public Response FindMatchingResponseMock(string path, string body, string method, InputMappings mapping)
        {
            Response result = null;

            var pathMappingKey = new PathMappingKey
            {
                Path   = path,
                Method = method,
            };

            if (mapping.PathMapping.ContainsKey(pathMappingKey) && mapping.PathMapping[pathMappingKey].Request.Methods.Contains(method))
            {
                result = mapping.PathMapping[pathMappingKey].Response;
            }

            if (result == null && mapping.PathStartsWithMapping != null)
            {
                foreach (var pathStart in mapping.PathStartsWithMapping)
                {
                    if (path.StartsWith(pathStart.Key.Path) && pathStart.Value.Request.Methods.Contains(method))
                    {
                        result = pathStart.Value.Response;
                    }
                }
            }

            if (result == null && mapping.PathMatchesRegexMapping != null)
            {
                foreach (var pathRegex in mapping.PathMatchesRegexMapping)
                {
                    if (pathRegex.Key.Regex.IsMatch(path) && pathRegex.Value.Request.Methods.Contains(method))
                    {
                        result = pathRegex.Value.Response;
                    }
                }
            }

            if (result == null && mapping.BodyCheckMapping?.ContainsKey(pathMappingKey) == true)
            {
                var possibleResults = mapping.BodyCheckMapping[pathMappingKey];

                foreach (var possibleResult in possibleResults)
                {
                    if (!string.IsNullOrEmpty(possibleResult.Request.BodyContains))
                    {
                        if (body.Contains(possibleResult.Request.BodyContains) && possibleResult.Request.Methods.Contains(method))
                        {
                            result = possibleResult.Response;
                        }
                    }
                    else if (!string.IsNullOrEmpty(possibleResult.Request.BodyDoesNotContain) && possibleResult.Request.Methods.Contains(method))
                    {
                        if (!body.Contains(possibleResult.Request.BodyDoesNotContain))
                        {
                            result = possibleResult.Response;
                        }
                    }
                }
            }

            return(result);
        }