public void Compare_WithNonMatchingHeaderNames_OneErrorIsAddedToTheComparisonResult()
        {
            var expected = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "X-Test", "Tester" }
                }
            };

            var comparer = GetSubject();

            var result = comparer.Compare(expected, actual);

            Assert.Equal(1, result.Failures.Count());
        }
예제 #2
0
        public void Handle_WithNancyContext_ConvertIsCalledOnTheNancyResponseMapper()
        {
            var expectedRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path   = "/"
            };
            var expectedResponse = new ProviderServiceResponse();
            var nancyContext     = new NancyContext
            {
                Request = new Request("GET", "/", "HTTP")
            };

            var handler = GetSubject();

            _mockRequestMapper.Convert(nancyContext.Request).Returns(expectedRequest);

            var interaction = new ProviderServiceInteraction {
                Request = expectedRequest, Response = expectedResponse
            };

            _mockProviderRepository.GetMatchingTestScopedInteraction(expectedRequest)
            .Returns(interaction);

            handler.Handle(nancyContext);

            _mockResponseMapper.Received(1).Convert(expectedResponse);
        }
예제 #3
0
 private void ClearTrasientState()
 {
     _request       = null;
     _response      = null;
     _providerState = null;
     _description   = null;
 }
예제 #4
0
        public void WillRespondWith_WithValidInteraction_PerformsAdminInteractionsPostRequestWithTestContext()
        {
            var providerState = "My provider state";
            var description   = "My description";
            var request       = new ProviderServiceRequest
            {
                Method = HttpVerb.Head,
                Path   = "/tester/testing/1"
            };
            var response = new ProviderServiceResponse
            {
                Status = (int)HttpStatusCode.ProxyAuthenticationRequired
            };

            var mockService = GetSubject();

            mockService.Start();

            mockService
            .Given(providerState)
            .UponReceiving(description)
            .With(request)
            .WillRespondWith(response);

            var actualRequest = _fakeHttpMessageHandler.RequestsReceived.Single();

            Assert.Equal("MockProviderServiceTests.WillRespondWith_WithValidInteraction_PerformsAdminInteractionsPostRequestWithTestContext", actualRequest.Headers.Single(x => x.Key == Constants.AdministrativeRequestTestContextHeaderKey).Value.Single());
        }
        public void WillRespondWith_WithResponseThatContainsABodyAndNoContentType_ThrowsArgumentException()
        {
            var providerState = "My provider state";
            var description   = "My description";
            var request       = new ProviderServiceRequest {
                Method = HttpVerb.Get
            };
            var response = new ProviderServiceResponse
            {
                Status = (int)HttpStatusCode.OK,
                Body   = new
                {
                    tester = 1
                }
            };

            var mockService = GetSubject();

            mockService
            .Given(providerState)
            .UponReceiving(description)
            .With(request);

            Assert.Throws <ArgumentException>(() => mockService.WillRespondWith(response));
        }
        public void Compare_WithMatchingObjectBodyButResponseHasAdditionalProperties_NoExceptionsAreThrown()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    myString = "Tester",
                    myInt    = 1,
                    myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    myString   = "Tester",
                    myInt      = 1,
                    myGuid     = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C"),
                    additional = "Hello"
                }
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
        }
        public void Compare_WithMatchingCollection_NoExceptionsAreThrown()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new List <dynamic>
                {
                    new
                    {
                        myString = "Tester",
                        myInt    = 1,
                        myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                    }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new List <dynamic>
                {
                    new
                    {
                        myString = "Tester",
                        myInt    = 1,
                        myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                    }
                }
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
        }
        public void Handle_WithNancyContext_ConvertIsCalledOnThProviderServiceRequestMapper()
        {
            var expectedRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path   = "/"
            };
            var expectedResponse = new ProviderServiceResponse();
            var nancyContext     = new NancyContext
            {
                Request = new Request("GET", "/", "HTTP")
            };

            var mockRequestMapper      = Substitute.For <IProviderServiceRequestMapper>();
            var mockResponseMapper     = Substitute.For <INancyResponseMapper>();
            var mockProviderRepository = Substitute.For <IMockProviderRepository>();

            mockRequestMapper.Convert(nancyContext.Request).Returns(expectedRequest);

            var interactions = new List <ProviderServiceInteraction>
            {
                new ProviderServiceInteraction {
                    Request = expectedRequest, Response = expectedResponse
                }
            };

            nancyContext.SetMockInteraction(interactions);

            IMockProviderRequestHandler handler = new MockProviderRequestHandler(mockRequestMapper, mockResponseMapper, mockProviderRepository);

            handler.Handle(nancyContext);

            mockRequestMapper.Received(1).Convert(nancyContext.Request);
        }
        public void WhenRegisteringTheSameInteractionTwiceInATest_ThenPactFailureExceptionIsThrown()
        {
            var description = "A POST request to create a new thing";
            var request     = new ProviderServiceRequest
            {
                Method  = HttpVerb.Post,
                Path    = "/things",
                Headers = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json; charset=utf-8" }
                },
                Body = new
                {
                    thingId = 1234,
                    type    = "Awesome"
                }
            };

            var response = new ProviderServiceResponse
            {
                Status = 201
            };

            _mockProviderService
            .UponReceiving(description)
            .With(request)
            .WillRespondWith(response);

            _mockProviderService
            .UponReceiving(description)
            .With(request);

            Assert.Throws <PactFailureException>(() => _mockProviderService.WillRespondWith(response));
        }
        public void Handle_WithNancyContext_CompareIsCalledOnTheProviderServiceRequestComparer()
        {
            var expectedRequest  = new ProviderServiceRequest();
            var expectedResponse = new ProviderServiceResponse();
            var actualRequest    = new ProviderServiceRequest();

            var mockRequestComparer = Substitute.For <IProviderServiceRequestComparer>();
            var mockRequestMapper   = Substitute.For <IProviderServiceRequestMapper>();
            var mockResponseMapper  = Substitute.For <INancyResponseMapper>();

            var nancyContext = new NancyContext
            {
                Request = new Request("GET", "/", "HTTP")
            };

            var interactions = new List <ProviderServiceInteraction>
            {
                new ProviderServiceInteraction {
                    Request = expectedRequest, Response = expectedResponse
                }
            };

            nancyContext.SetMockInteraction(interactions);

            mockRequestMapper.Convert(nancyContext.Request).Returns(actualRequest);

            IMockProviderNancyRequestHandler handler = new MockProviderNancyRequestHandler(mockRequestComparer, mockRequestMapper, mockResponseMapper);

            handler.Handle(nancyContext);

            mockRequestComparer.Received(1).Compare(expectedRequest, actualRequest);
        }
        public void Handle_WithNancyContext_AddHandledRequestIsCalledOnTheMockProviderRepository()
        {
            var expectedRequest  = new ProviderServiceRequest();
            var expectedResponse = new ProviderServiceResponse();
            var actualRequest    = new ProviderServiceRequest();

            var mockRequestMapper      = Substitute.For <IProviderServiceRequestMapper>();
            var mockResponseMapper     = Substitute.For <INancyResponseMapper>();
            var mockProviderRepository = Substitute.For <IMockProviderRepository>();

            var nancyContext = new NancyContext
            {
                Request = new Request("GET", "/", "HTTP")
            };

            var interactions = new List <ProviderServiceInteraction>
            {
                new ProviderServiceInteraction {
                    Request = expectedRequest, Response = expectedResponse
                }
            };

            nancyContext.SetMockInteraction(interactions);

            mockRequestMapper.Convert(nancyContext.Request).Returns(actualRequest);

            IMockProviderRequestHandler handler = new MockProviderRequestHandler(mockRequestMapper, mockResponseMapper, mockProviderRepository);

            handler.Handle(nancyContext);

            mockProviderRepository.Received(1).AddHandledRequest(Arg.Is <HandledRequest>(x => x.ActualRequest == actualRequest && x.MatchedInteraction == interactions.First()));
        }
        public void Compare_WithMatchingHeadersButWithDifferentCasingOnName_NoErrorsAreAddedToTheComparisonResult()
        {
            var expected = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "content-Type", "application/json" }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" }
                }
            };

            var comparer = GetSubject();

            var result = comparer.Compare(expected, actual);

            Assert.False(result.HasFailure, "There should not be any errors");
        }
        public void Compare_WithMatchingObjectHoweverPropertyNameCasingIsDifferent_OneErrorIsAddedToTheComparisonResult()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    MyString = "Tester",
                    MyInt    = 1,
                    MyGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    myString = "Tester",
                    myInt    = 1,
                    myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                }
            };

            var comparer = GetSubject();

            var result = comparer.Compare(expected, actual);

            Assert.Equal(1, result.Failures.Count());
        }
        public void Compare_WithMatchingObjectBodyButResponseHasAdditionalProperties_NoErrorsAreAddedToTheComparisonResult()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    myString = "Tester",
                    myInt    = 1,
                    myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    myString   = "Tester",
                    myInt      = 1,
                    myGuid     = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C"),
                    additional = "Hello"
                }
            };

            var comparer = GetSubject();

            var result = comparer.Compare(expected, actual);

            Assert.False(result.HasFailure, "There should not be any errors");
        }
        public void Compare_WithMatchingHeadersButResponseHasAdditionalHeaders_NoExceptionsAreThrown()
        {
            var expected = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "X-Test", "MyCustomThing" },
                    { "X-Test-2", "MyCustomThing2" },
                    { "Content-Type", "application/json" }
                }
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
        }
        public Response Handle(NancyContext context)
        {
            try
            {
                var response = HandlePactRequest(context);

                return(response);
            }
            catch (Exception ex)
            {
                var exceptionMessage = ex.Message
                                       .Replace("\r", " ")
                                       .Replace("\n", "")
                                       .Replace("\t", " ")
                                       .Replace(@"\", "");

                var errorResponse = new ProviderServiceResponse
                {
                    Status = 500,
                    Body   = exceptionMessage
                };
                var response = _responseMapper.Convert(errorResponse);
                response.ReasonPhrase = exceptionMessage;

                return(response);
            }
        }
        public void Compare_WithNonMatchingHeaderNames_ReportErrorIsCalled()
        {
            var expected = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "X-Test", "Tester" }
                }
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
            _mockReporter.Received(1).ReportError(Arg.Any <string>(), Arg.Any <object>(), Arg.Any <object>());
        }
예제 #18
0
        public void WillRespondWith_WhenExistingInteractionExistAndWeHaveAnotherValidInteraction_InteractionIsAdded()
        {
            var providerState = "My provider state";
            var description   = "My description";
            var request       = new ProviderServiceRequest();
            var response      = new ProviderServiceResponse();
            var mockService   = GetSubject();

            mockService
            .UponReceiving("My previous description")
            .With(new ProviderServiceRequest())
            .WillRespondWith(new ProviderServiceResponse());

            mockService
            .Given(providerState)
            .UponReceiving(description)
            .With(request)
            .WillRespondWith(response);

            var interaction = mockService.Interactions.Last() as ProviderServiceInteraction;

            Assert.Equal(2, mockService.Interactions.Count());
            Assert.Equal(providerState, interaction.ProviderState);
            Assert.Equal(description, interaction.Description);
            Assert.Equal(request, interaction.Request);
            Assert.Equal(response, interaction.Response);
        }
        public void Compare_WithMatchingObjectHoweverPropertyNameCasingIsDifferent_ReportErrorIsCalled()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    MyString = "Tester",
                    MyInt    = 1,
                    MyGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new
                {
                    myString = "Tester",
                    myInt    = 1,
                    myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                }
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
            _mockReporter.Received(1).ReportError(Arg.Any <string>(), Arg.Any <object>(), Arg.Any <object>());
        }
예제 #20
0
        public void WillRespondWith_WhenAddingADuplicateInteractionAfterClearingInteractions_TheDuplicateInteractionIsNotAdded()
        {
            var providerState = "My provider state";
            var description   = "My description";
            var request       = new ProviderServiceRequest();
            var response      = new ProviderServiceResponse();
            var mockService   = GetSubject();

            mockService
            .Given(providerState)
            .UponReceiving(description)
            .With(request)
            .WillRespondWith(response);

            var expectedInteractions = mockService.Interactions;

            mockService.ClearInteractions();

            mockService
            .Given(providerState)
            .UponReceiving(description)
            .With(request)
            .WillRespondWith(response);

            var actualIneractions = mockService.Interactions;

            Assert.Equal(1, actualIneractions.Count());
            Assert.Equal(expectedInteractions.First(), actualIneractions.First());
        }
        public void Compare_WithNonMatchingCollection_ReportErrorIsCalled()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new List <dynamic>
                {
                    new
                    {
                        myString = "Tester",
                        myInt    = 1,
                        myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                    }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201,
                Body   = new List <dynamic>
                {
                    new
                    {
                        myString = "Tester2",
                        myInt    = 1,
                        myGuid   = Guid.Parse("EEB517E6-AC8B-414A-A0DB-6147EAD9193C")
                    }
                }
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
            _mockReporter.Received(1).ReportError(Arg.Any <string>(), Arg.Any <object>(), Arg.Any <object>());
        }
예제 #22
0
        public Response Convert(ProviderServiceResponse from)
        {
            if (from == null)
            {
                return(null);
            }

            var to = new Response
            {
                StatusCode = (HttpStatusCode)from.Status,
                Headers    = from.Headers ?? new Dictionary <string, string>()
            };

            if (from.Body != null)
            {
                HttpBodyContent bodyContent = _httpBodyContentMapper.Convert(body: from.Body, headers: from.Headers);
                to.ContentType = bodyContent.ContentType;

                to.Contents = s =>
                {
                    byte[] bytes = bodyContent.ContentBytes;
                    s.Write(bytes, 0, bytes.Length);
                    s.Flush();
                };
            }

            return(to);
        }
        public void With_WithRequest_SetsRequest()
        {
            var description = "My description";
            var request     = new ProviderServiceRequest
            {
                Method = HttpVerb.Head,
                Path   = "/tester/testing/1"
            };
            var response = new ProviderServiceResponse
            {
                Status = (int)HttpStatusCode.ProxyAuthenticationRequired
            };

            var expectedInteraction = new ProviderServiceInteraction
            {
                Description = description,
                Request     = request,
                Response    = response
            };
            var expectedInteractionJson = expectedInteraction.AsJsonString();

            var mockService = GetSubject();

            mockService.Start();

            mockService.UponReceiving(description)
            .With(request)
            .WillRespondWith(response);

            var actualInteractionJson = _fakeHttpMessageHandler.RequestContentRecieved.Single();

            Assert.Equal(expectedInteractionJson, actualInteractionJson);
        }
        public ProviderServiceResponse Convert(HttpResponseMessage from)
        {
            if (from == null)
            {
                return(null);
            }

            var to = new ProviderServiceResponse
            {
                Status  = (int)from.StatusCode,
                Headers = ConvertHeaders(from.Headers, from.Content)
            };

            if (from.Content != null)
            {
                var responseContent = from.Content.ReadAsByteArrayAsync().RunSync();
                if (responseContent != null)
                {
                    var httpBodyContent = _httpBodyContentMapper.Convert(content: responseContent, headers: to.Headers);

                    to.Body = httpBodyContent.Body;
                }
            }

            return(to);
        }
예제 #25
0
        public void Handle_WithNancyContext_AddHandledRequestIsCalledOnTheMockProviderRepository()
        {
            var expectedRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path   = "/"
            };
            var actualRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path   = "/",
                Body   = new {}
            };
            var expectedResponse = new ProviderServiceResponse();

            var handler = GetSubject();

            var nancyContext = new NancyContext
            {
                Request = new Request("GET", "/", "HTTP")
            };

            var interaction = new ProviderServiceInteraction {
                Request = expectedRequest, Response = expectedResponse
            };

            _mockProviderRepository.GetMatchingTestScopedInteraction(Arg.Any <ProviderServiceRequest>())
            .Returns(interaction);

            _mockRequestMapper.Convert(nancyContext.Request).Returns(actualRequest);

            handler.Handle(nancyContext);

            _mockProviderRepository.Received(1).AddHandledRequest(Arg.Is <HandledRequest>(x => x.ActualRequest == actualRequest && x.MatchedInteraction == interaction));
        }
        public void SerializeObject_WithCamelCaseApiSerializerSettings_ReturnsCorrectJson()
        {
            var response = new ProviderServiceResponse
            {
                Status  = 200,
                Headers = new Dictionary <string, object> {
                    { "Content-Type", "application/json" }
                },
                Body = new
                {
                    Test1 = "hi",
                    test2 = 2
                }
            };

            var responseJson = JsonConvert.SerializeObject(response, new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting        = Formatting.None,
                ContractResolver  = new CamelCasePropertyNamesContractResolver()
            });
            var expectedJson = "{\"status\":200,\"headers\":{\"Content-Type\":\"application/json\"},\"body\":{\"test1\":\"hi\",\"test2\":2}}";

            Assert.Equal(expectedJson, responseJson);
        }
예제 #27
0
        public void GetAllCars_WhenCalled_ReturnsAllEvents()
        {
            var test = new[]
            {
                new
                {
                    carId    = Guid.Parse("45D80D13-D5A2-48D7-8353-CBB4C0EAABF5"),
                    mileage1 = 0,
                    fuel     = "Gasoline"
                },
                new
                {
                    carId    = Guid.Parse("83F9262F-28F1-4703-AB1A-8CFD9E8249C9"),
                    mileage1 = 0,
                    fuel     = "Gasoline"
                },
                new
                {
                    carId    = Guid.Parse("3E83A96B-2A0C-49B1-9959-26DF23F83AEB"),
                    mileage1 = 15000,
                    fuel     = "Diesel"
                }
            };

            var res = new ProviderServiceResponse
            {
                Status  = 200,
                Headers = new Dictionary <string, object>
                {
                    { "Content-Type", "application/json; charset=utf-8" }
                },
                Body = test
            };

            //Arrange
            _mockProviderService.Given("there are cars with ids '45D80D13-D5A2-48D7-8353-CBB4C0EAABF5', '83F9262F-28F1-4703-AB1A-8CFD9E8249C9' and '3E83A96B-2A0C-49B1-9959-26DF23F83AEB'")
            .UponReceiving("a request to retrieve all cars")
            .With(new ProviderServiceRequest
            {
                Method  = HttpVerb.Get,
                Path    = "/cars",
                Headers = new Dictionary <string, object>
                {
                    { "Accept", "application/json" },
                }
            })
            .WillRespondWith(res);

            var consumer = new CarsApiClient(_mockProviderServiceBaseUri);

            //Act
            var events = consumer.GetAllCars();

            //Assert
            Assert.NotEmpty(events);
            Assert.Equal(3, events.Count());


            _mockProviderService.VerifyInteractions();
        }
예제 #28
0
        public ComparisonResult Compare(ProviderServiceResponse expected, ProviderServiceResponse actual)
        {
            var result = new ComparisonResult("returns a response which");

            if (expected == null)
            {
                result.RecordFailure(new ErrorMessageComparisonFailure("Expected response cannot be null"));
                return(result);
            }

            var statusResult = _httpStatusCodeComparer.Compare(expected.Status, actual.Status);

            result.AddChildResult(statusResult);

            if (expected.Headers != null && expected.Headers.Any())
            {
                var headerResult = _httpHeaderComparer.Compare(expected.Headers, actual.Headers);
                result.AddChildResult(headerResult);
            }

            if (expected.Body != null)
            {
                var bodyResult = _httpBodyComparer.Compare(expected.Body, actual.Body, expected.MatchingRules);
                result.AddChildResult(bodyResult);
            }
            else if (expected.Body == null &&
                     expected.ShouldSerializeBody() && //Body was explicitly set
                     actual.Body != null)
            {
                result.RecordFailure(new ErrorMessageComparisonFailure("Expected response body was explicitly set to null however the actual response body was not null"));
            }

            return(result);
        }
        public void Compare(ProviderServiceResponse response1, ProviderServiceResponse response2)
        {
            if (response1 == null)
            {
                _reporter.ReportError("Expected response cannot be null");
                return;
            }

            _reporter.ReportInfo(String.Format("{0} has status code of {1}", MessagePrefix, response1.Status));
            if (!response1.Status.Equals(response2.Status))
            {
                _reporter.ReportError(expected: response1.Status, actual: response2.Status);
            }

            if (response1.Headers != null && response1.Headers.Any())
            {
                _httpHeaderComparer.Compare(response1.Headers, response2.Headers);
            }

            if (response1.Body != null)
            {
                string expectedResponseBodyJson = JsonConvert.SerializeObject(response1.Body);
                string actualResponseBodyJson   = JsonConvert.SerializeObject(response2.Body);
                var    actualResponseBody       = JsonConvert.DeserializeObject <JToken>(actualResponseBodyJson);
                var    expectedResponseBody     = JsonConvert.DeserializeObject <JToken>(expectedResponseBodyJson);

                _httpBodyComparer.Validate(expectedResponseBody, actualResponseBody);
            }
        }
        public void Compare_WithMatchingHeadersButResponseHasAdditionalHeaders_NoErrorsAreAddedToTheComparisonResult()
        {
            var expected = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "Content-Type", "application/json" }
                }
            };

            var actual = new ProviderServiceResponse
            {
                Status  = 201,
                Headers = new Dictionary <string, string>
                {
                    { "X-Test", "MyCustomThing" },
                    { "X-Test-2", "MyCustomThing2" },
                    { "Content-Type", "application/json" }
                }
            };

            var comparer = GetSubject();

            var result = comparer.Compare(expected, actual);

            Assert.False(result.HasFailure, "There should not be any errors");
        }