namespace Ocelot.UnitTests.Headers { using Microsoft.AspNetCore.Http; using Moq; using Ocelot.Configuration; using Ocelot.Configuration.Builder; using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.Middleware; using Ocelot.DownstreamRouteFinder.UrlMatcher; using Ocelot.Headers; using Ocelot.Headers.Middleware; using Ocelot.Logging; using Ocelot.Middleware; using Ocelot.Request.Middleware; using Ocelot.Responses; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using TestStack.BDDfy; using Xunit; public class ClaimsToHeadersMiddlewareTests { private readonly Mock _addHeaders; private Response _downstreamRoute; private Mock _loggerFactory; private Mock _logger; private ClaimsToHeadersMiddleware _middleware; private RequestDelegate _next; private HttpContext _httpContext; public ClaimsToHeadersMiddlewareTests() { _httpContext = new DefaultHttpContext(); _addHeaders = new Mock(); _loggerFactory = new Mock(); _logger = new Mock(); _loggerFactory.Setup(x => x.CreateLogger()).Returns(_logger.Object); _next = context => Task.CompletedTask; _middleware = new ClaimsToHeadersMiddleware(_next, _loggerFactory.Object, _addHeaders.Object); _httpContext.Items.UpsertDownstreamRequest(new DownstreamRequest(new HttpRequestMessage(HttpMethod.Get, "http://test.com"))); } [Fact] public void should_call_add_headers_to_request_correctly() { var downstreamRoute = new Ocelot.DownstreamRouteFinder.DownstreamRouteHolder(new List(), new RouteBuilder() .WithDownstreamRoute(new DownstreamRouteBuilder() .WithDownstreamPathTemplate("any old string") .WithClaimsToHeaders(new List { new ClaimToThing("UserId", "Subject", "", 0) }) .WithUpstreamHttpMethod(new List { "Get" }) .Build()) .WithUpstreamHttpMethod(new List { "Get" }) .Build()); this.Given(x => x.GivenTheDownStreamRouteIs(downstreamRoute)) .And(x => x.GivenTheAddHeadersToDownstreamRequestReturnsOk()) .When(x => x.WhenICallTheMiddleware()) .Then(x => x.ThenTheAddHeadersToRequestIsCalledCorrectly()) .BDDfy(); } private void WhenICallTheMiddleware() { _middleware.Invoke(_httpContext).GetAwaiter().GetResult(); } private void GivenTheDownStreamRouteIs(Ocelot.DownstreamRouteFinder.DownstreamRouteHolder downstreamRoute) { _downstreamRoute = new OkResponse(downstreamRoute); _httpContext.Items.UpsertTemplatePlaceholderNameAndValues(downstreamRoute.TemplatePlaceholderNameAndValues); _httpContext.Items.UpsertDownstreamRoute(downstreamRoute.Route.DownstreamRoute[0]); } private void GivenTheAddHeadersToDownstreamRequestReturnsOk() { _addHeaders .Setup(x => x.SetHeadersOnDownstreamRequest( It.IsAny>(), It.IsAny>(), It.IsAny())) .Returns(new OkResponse()); } private void ThenTheAddHeadersToRequestIsCalledCorrectly() { _addHeaders .Verify(x => x.SetHeadersOnDownstreamRequest( It.IsAny>(), It.IsAny>(), _httpContext.Items.DownstreamRequest()), Times.Once); } } }