got identity server access token acceptance test working, created factory for choosing auth handlers, a creator for making the auth handlers, some general refactoring...next step is injecting the config for the auth handler creator in some way or just passing it in

This commit is contained in:
TomPallister
2016-10-15 13:50:43 +01:00
parent 34bac7e0d4
commit 320b442526
16 changed files with 369 additions and 95 deletions

View File

@ -0,0 +1,88 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Moq;
using Ocelot.Library.Infrastructure.Authentication;
using Ocelot.Library.Infrastructure.Errors;
using Ocelot.Library.Infrastructure.Responses;
using Shouldly;
using TestStack.BDDfy;
using Xunit;
namespace Ocelot.UnitTests.Authentication
{
public class AuthenticationProviderFactoryTests
{
private readonly IAuthenticationProviderFactory _authenticationProviderFactory;
private readonly Mock<IApplicationBuilder> _app;
private readonly Mock<IAuthenticationHandlerCreator> _creator;
private string _provider;
private Response<AuthenticationHandler> _result;
public AuthenticationProviderFactoryTests()
{
_app = new Mock<IApplicationBuilder>();
_creator = new Mock<IAuthenticationHandlerCreator>();
_authenticationProviderFactory = new AuthenticationProviderFactory(_creator.Object);
}
[Fact]
public void should_return_identity_server_access_token_provider()
{
this.Given(x => x.GivenTheProviderIs("IdentityServer.AccessToken"))
.And(x => x.GivenTheCreatorReturns())
.When(x => x.WhenIGetFromTheFactory())
.Then(x => x.ThenTheHandlerIsReturned("IdentityServer.AccessToken"))
.BDDfy();
}
[Fact]
public void should_return_error_if_cannot_create_handler()
{
this.Given(x => x.GivenTheProviderIs("IdentityServer.AccessToken"))
.And(x => x.GivenTheCreatorReturnsAnError())
.When(x => x.WhenIGetFromTheFactory())
.Then(x => x.ThenAnErrorResponseIsReturned())
.BDDfy();
}
private void GivenTheCreatorReturnsAnError()
{
_creator
.Setup(x => x.CreateIdentityServerAuthenticationHandler(It.IsAny<IApplicationBuilder>()))
.Returns(new ErrorResponse<RequestDelegate>(new List<Error>
{
new UnableToCreateAuthenticationHandlerError($"Unable to create authentication handler for xxx")
}));
}
private void GivenTheCreatorReturns()
{
_creator
.Setup(x => x.CreateIdentityServerAuthenticationHandler(It.IsAny<IApplicationBuilder>()))
.Returns(new OkResponse<RequestDelegate>(x => Task.CompletedTask));
}
private void GivenTheProviderIs(string provider)
{
_provider = provider;
}
private void WhenIGetFromTheFactory()
{
_result = _authenticationProviderFactory.Get(_provider, _app.Object);
}
private void ThenTheHandlerIsReturned(string expected)
{
_result.Data.Provider.ShouldBe(expected);
}
private void ThenAnErrorResponseIsReturned()
{
_result.IsError.ShouldBeTrue();
}
}
}

View File

@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Ocelot.Library.Infrastructure.Authentication;
using Ocelot.Library.Infrastructure.DownstreamRouteFinder;
using Ocelot.Library.Infrastructure.Middleware;
using Ocelot.Library.Infrastructure.Repository;
@ -21,6 +22,7 @@ namespace Ocelot.UnitTests.Middleware
public class AuthenticationMiddlewareTests : IDisposable
{
private readonly Mock<IScopedRequestDataRepository> _scopedRepository;
private readonly Mock<IAuthenticationProviderFactory> _authFactory;
private readonly string _url;
private readonly TestServer _server;
private readonly HttpClient _client;
@ -31,10 +33,11 @@ namespace Ocelot.UnitTests.Middleware
{
_url = "http://localhost:51879";
_scopedRepository = new Mock<IScopedRequestDataRepository>();
_authFactory = new Mock<IAuthenticationProviderFactory>();
var builder = new WebHostBuilder()
.ConfigureServices(x =>
{
x.AddSingleton(_authFactory.Object);
x.AddSingleton(_scopedRepository.Object);
})
.UseUrls(_url)