Example #1
0
        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));
        }
Example #2
0
 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);
     }
 }
Example #3
0
        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);
                }
            }
        }