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); }
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); }