using Ocelot.Middleware; namespace Ocelot.UnitTests.Responder { using Microsoft.AspNetCore.Http; using Moq; using Ocelot.DownstreamRouteFinder.Finder; using Ocelot.Errors; using Ocelot.Logging; using Ocelot.Responder; using Ocelot.Responder.Middleware; using System.Net.Http; using System.Threading.Tasks; using TestStack.BDDfy; using Xunit; public class ResponderMiddlewareTests { private readonly Mock _responder; private readonly Mock _codeMapper; private Mock _loggerFactory; private Mock _logger; private readonly ResponderMiddleware _middleware; private readonly DownstreamContext _downstreamContext; private OcelotRequestDelegate _next; public ResponderMiddlewareTests() { _responder = new Mock(); _codeMapper = new Mock(); _downstreamContext = new DownstreamContext(new DefaultHttpContext()); _loggerFactory = new Mock(); _logger = new Mock(); _loggerFactory.Setup(x => x.CreateLogger()).Returns(_logger.Object); _next = context => Task.CompletedTask; _middleware = new ResponderMiddleware(_next, _responder.Object, _loggerFactory.Object, _codeMapper.Object); } [Fact] public void should_not_return_any_errors() { this.Given(x => x.GivenTheHttpResponseMessageIs(new DownstreamResponse(new HttpResponseMessage()))) .When(x => x.WhenICallTheMiddleware()) .Then(x => x.ThenThereAreNoErrors()) .BDDfy(); } [Fact] public void should_return_any_errors() { this.Given(x => x.GivenTheHttpResponseMessageIs(new DownstreamResponse(new HttpResponseMessage()))) .And(x => x.GivenThereArePipelineErrors(new UnableToFindDownstreamRouteError("/path", "GET"))) .When(x => x.WhenICallTheMiddleware()) .Then(x => x.ThenThereAreNoErrors()) .BDDfy(); } private void WhenICallTheMiddleware() { _middleware.Invoke(_downstreamContext).GetAwaiter().GetResult(); } private void GivenTheHttpResponseMessageIs(DownstreamResponse response) { _downstreamContext.DownstreamResponse = response; } private void ThenThereAreNoErrors() { //todo a better assert? } private void GivenThereArePipelineErrors(Error error) { _downstreamContext.Errors.Add(error); } } }