public async Task <PactVerificationResult> VerifyAsync(HttpInteractionDefinition definition, PactDefinitionOptions options, object templateObject = null) { var getResult = GetHttpMethod(definition.Request.Method); var requestPath = templateObject is null ? definition.Request.Path : Smart.Format(definition.Request.Path, templateObject); var httpResponse = await getResult(requestPath); var json = await httpResponse.Content.ReadAsStringAsync(); var providedBody = JsonConvert.DeserializeObject <ExpandoObject>(json); var expectedBody = definition.Response.Body; var errors = new List <string>(); VerifyStatusCode(definition, httpResponse, errors); VerifyHeaders(definition, httpResponse, errors); if (providedBody is null || expectedBody is null) { return(new PactVerificationResult(errors)); } VerifyBody(options, expectedBody, providedBody, errors); return(new PactVerificationResult(errors)); }
private static void VerifyStatusCode(HttpInteractionDefinition definition, HttpResponseMessage response, List <string> errors) { if (response.StatusCode != definition.Response.Status) { var message = GetErrorMessage(ErrorMessages.IncorrectResponseStatusCode, definition.Response.Status, response.StatusCode); errors.Add(message); } }
private static void VerifyHeaders(HttpInteractionDefinition definition, HttpResponseMessage response, List <string> errors) { foreach (var header in definition.Response.Headers) { var(name, value) = response.Headers .Concat(response.Content.Headers) .Where(h => h.Key == header.Key) .Select(h => (Name: h.Key, Value: h.Value.FirstOrDefault())) .FirstOrDefault(); if (name is null) { var message = GetErrorMessage(ErrorMessages.MissingResponseHeader, header.Key); errors.Add(message); } else if (value != header.Value) { var message = GetErrorMessage(ErrorMessages.IncorrectReposnseHeaderValue, header.Key, value); errors.Add(message); } } }