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");
        }
        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 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().Result;
                if (responseContent != null)
                {
                    var httpBodyContent = _httpBodyContentMapper.Convert(content: responseContent, headers: to.Headers);

                    to.Body = httpBodyContent.Body;
                }
            }

            return to;
        }
        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 SerializeObject_WithDefaultApiSerializerSettingsAndNoHeadersOrBody_ReturnsCorrectJson()
        {
            var response = new ProviderServiceResponse
            {
                Status = 500
            };

            var responseJson = JsonConvert.SerializeObject(response, JsonConfig.ApiSerializerSettings);
            var expectedJson = "{\"status\":500}";
            Assert.Equal(expectedJson, responseJson);
        }
        public void Compare_WithMatchingStatusCodes_NoExceptionsAreThrown()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201
            };

            var actual = new ProviderServiceResponse
            {
                Status = 201
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
        }
        public void Compare_WithNonMatchingStatusCodes_ReportErrorIsCalled()
        {
            var expected = new ProviderServiceResponse
            {
                Status = 201
            };

            var actual = new ProviderServiceResponse
            {
                Status = 400
            };

            var comparer = GetSubject();

            comparer.Compare(expected, actual);
            _mockReporter.Received(1).ReportError(Arg.Any<string>(), Arg.Any<object>(), Arg.Any<object>());
        }
        public void SerializeObject_WithDefaultApiSerializerSettings_ReturnsCorrectJson()
        {
            var request = new ProviderServiceResponse
            {
                Status = 200,
                Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } },
                Body = new
                {
                    Test1 = "hi",
                    test2 = 2
                }
            };

            var responseJson = JsonConvert.SerializeObject(request, JsonConfig.ApiSerializerSettings);
            var expectedJson = "{\"status\":200,\"headers\":{\"Content-Type\":\"application/json\"},\"body\":{\"Test1\":\"hi\",\"test2\":2}}";
            Assert.Equal(expectedJson, responseJson);
        }
        public void Convert_WithJsonBody_CallsConvertOnHttpBodyContentMapperAndAssignsContents()
        {
            const string contentTypeString = "application/json";
            var response = new ProviderServiceResponse
            {
                Status = 200,
                Headers = new Dictionary<string, string>
                {
                    { "Content-Type", contentTypeString }
                },
                Body = new
                {
                    Test = "tester",
                    Test2 = 1
                }
            };
            var jsonBody = "{\"Test\":\"tester\",\"Test2\":1}";
            var httpBodyContent = new HttpBodyContent(content: Encoding.UTF8.GetBytes(jsonBody), contentType: contentTypeString, encoding: null);

            var mockHttpBodyContentMapper = Substitute.For<IHttpBodyContentMapper>();

            mockHttpBodyContentMapper.Convert(body: Arg.Any<object>(), headers: response.Headers)
                .Returns(httpBodyContent);

            var mapper = new NancyResponseMapper(mockHttpBodyContentMapper);

            var result = mapper.Convert(response);

            string content;
            using (var stream = new MemoryStream())
            {
                result.Contents(stream);
                stream.Position = 0;
                using (var reader = new StreamReader(stream))
                {
                    content = reader.ReadToEnd();
                }
            }

            Assert.Equal(jsonBody, content);
            mockHttpBodyContentMapper.Received(1).Convert(body: Arg.Any<object>(), headers: response.Headers);
        }
        public void SerializeObject_WithCamelCaseApiSerializerSettings_ReturnsCorrectJson()
        {
            var response = new ProviderServiceResponse
            {
                Status = 200,
                Headers = new Dictionary<string, string> { { "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);
        }
        public Response Handle(NancyContext context)
        {
            //TODO: This is a hack and should probably go in VerifyInteractions()
            if (!_injected)
            {
                _requestComparer = new ProviderServiceRequestComparer(new Reporter());
            }

            var reporter = _requestComparer.GetReporter();

            try
            {
                var response = HandlePactRequest(context);

                reporter.ThrowIfAnyErrors();

                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 Convert_WithPlainTextBody_CallsConvertOnHttpBodyContentMapperAndAssignsContents()
        {
            const string contentTypeString = "text/plain";
            var response = new ProviderServiceResponse
            {
                Status = 200,
                Headers = new Dictionary<string, string>
                {
                    { "Content-Type", contentTypeString }
                },
                Body = "This is a plain body"
            };
            var httpBodyContent = new HttpBodyContent(response.Body, contentTypeString, null);

            var mockHttpBodyContentMapper = Substitute.For<IHttpBodyContentMapper>();

            mockHttpBodyContentMapper.Convert(body: Arg.Any<object>(), headers: response.Headers)
                .Returns(httpBodyContent);

            var mapper = new NancyResponseMapper(mockHttpBodyContentMapper);

            var result = mapper.Convert(response);

            string content;
            using (var stream = new MemoryStream())
            {
                result.Contents(stream);
                stream.Position = 0;
                using (var reader = new StreamReader(stream))
                {
                    content = reader.ReadToEnd();
                }
            }

            Assert.Equal(response.Body, content);
            mockHttpBodyContentMapper.Received(1).Convert(body: Arg.Any<object>(), headers: response.Headers);
        }
        public void Compare_WithMatchingCollection_NoErrorsAreAddedToTheComparisonResult()
        {
            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();

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

            Assert.False(result.HasFailure, "There should not be any errors");
        }
        public void Compare_WithMatchingHeaders_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>
                {
                    { "Content-Type", "application/json" }
                }
            };

            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);
        }
        private bool BodyContentMatches(ProviderServiceResponse response, string expectedBody)
        {
            if (response.Body == expectedBody)
            {
                return true;
            }

            return false;
        }
        public void Handle_WithNancyContextRequestThatMatchesExpectedRequest_ReturnsNancyResponse()
        {
            var expectedRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/Test"
            };
            var actualRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/Test"
            };
            var expectedResponse = new ProviderServiceResponse { Status = 200 };
            var nancyResponse = new Response { StatusCode = HttpStatusCode.OK };

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

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

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

            nancyContext.SetMockInteraction(interactions);

            mockRequestMapper.Convert(nancyContext.Request).Returns(actualRequest);
            //mockRequestComparer.Compare Doesnt throw any exceptions
            mockResponseMapper.Convert(expectedResponse).Returns(nancyResponse);

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

            var response = handler.Handle(nancyContext);

            Assert.Equal(nancyResponse, response);
        }
        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 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>());
        }
        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_WithNancyContextRequestThatDoesNotMatchExpectedRequest_ResponseMapperIsCalledAndReturns500Response()
        {
            var expectedRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/Test"
            };
            var actualRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Put,
                Path = "/Test"
            };
            var expectedResponse = new ProviderServiceResponse { Status = 200 };
            var nancyResponse = new Response { StatusCode = HttpStatusCode.OK };
            var compareException = new CompareFailedException("Something failed");

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

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

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

            nancyContext.SetMockInteraction(interactions);

            mockRequestMapper.Convert(nancyContext.Request).Returns(actualRequest);
            mockRequestComparer
                .When(x => x.Compare(expectedRequest, actualRequest))
                .Do(x => { throw compareException; });

            mockResponseMapper.Convert(expectedResponse).Returns(nancyResponse);

            mockResponseMapper.Convert(Arg.Any<ProviderServiceResponse>())
                .Returns(new Response
                {
                    StatusCode = HttpStatusCode.InternalServerError
                });

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

            var response = handler.Handle(nancyContext);

            mockResponseMapper.Received(1).Convert(Arg.Is<ProviderServiceResponse>(x => x.Status == 500));
            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
            Assert.NotEmpty(response.ReasonPhrase);
        }
        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 handler = GetSubject();

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

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

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

            handler.Handle(nancyContext);

            _mockRequestMapper.Received(1).Convert(nancyContext.Request);
        }
        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_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 Handle_WithNancyContextRequestThatMatchesExpectedRequest_ReturnsNancyResponse()
        {
            var expectedRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/Test"
            };
            var actualRequest = new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/Test"
            };
            var expectedResponse = new ProviderServiceResponse { Status = 200 };
            var nancyResponse = new Response { StatusCode = HttpStatusCode.OK };

            var handler = GetSubject();

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

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

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

            _mockRequestMapper.Convert(nancyContext.Request).Returns(actualRequest);
            //mockRequestComparer.Compare Doesnt throw any exceptions
            _mockResponseMapper.Convert(expectedResponse).Returns(nancyResponse);

            var response = handler.Handle(nancyContext);

            Assert.Equal(nancyResponse, response);
        }
        public void Convert_WithResponseWithStatusCode_ReturnsNancyResponseWithStatusCode()
        {
            var response = new ProviderServiceResponse
            {
                Status = 200
            };

            var mapper = GetSubject();

            var result = mapper.Convert(response);

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
        }
        public void Convert_WithResponseThatHasANullBodyAndAContentLengthHeader_ReturnsNancyResponseWithNullBodyAndContentLengthHeader()
        {
            var response = new ProviderServiceResponse
            {
                Status = 200,
                Headers = new Dictionary<string, string>
                {
                    { "Content-Length", "100" }
                }
            };

            var mapper = GetSubject();

            var result = mapper.Convert(response);

            var stream = new MemoryStream();
            result.Contents(stream);
            Assert.Equal(0, stream.Length);
            Assert.Equal("Content-Length", result.Headers.Last().Key);
            Assert.Equal("100", result.Headers.Last().Value);
            stream.Close();
            stream.Dispose();
        }
        public void Convert_WithResponseThatHasANullBodyAndACustomHeader_ReturnsNancyResponseWithHeaderAndDoesNotAddAContentLengthHeader()
        {
            var response = new ProviderServiceResponse
            {
                Status = 200,
                Headers = new Dictionary<string, string>
                {
                    { "X-Test", "Tester" }
                }
            };

            var mapper = GetSubject();

            var result = mapper.Convert(response);

            Assert.Equal(response.Headers.First().Key, result.Headers.First().Key);
            Assert.Equal(response.Headers.First().Value, result.Headers.First().Value);
            Assert.Equal(1, result.Headers.Count());
        }
Esempio n. 30
-1
        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;
        }