using System.Collections.Generic; using Ocelot.Configuration; using Ocelot.Configuration.Builder; using Ocelot.Configuration.Creator; using Ocelot.Configuration.File; using Shouldly; using TestStack.BDDfy; using Xunit; namespace Ocelot.UnitTests.Configuration { public class AuthenticationOptionsCreatorTests { private readonly AuthenticationOptionsCreator _authOptionsCreator; private FileReRoute _fileReRoute; private AuthenticationOptions _result; public AuthenticationOptionsCreatorTests() { _authOptionsCreator = new AuthenticationOptionsCreator(new AuthenticationProviderConfigCreator()); } [Fact] public void should_return_auth_options() { var fileReRoute = new FileReRoute() { AuthenticationOptions = new FileAuthenticationOptions { Provider = "Geoff", IdentityServerConfig = new FileIdentityServerConfig() { ProviderRootUrl = "http://www.bbc.co.uk/", ApiName = "Laura", RequireHttps = true, ApiSecret = "secret" }, AllowedScopes = new List { "cheese" }, } }; var authenticationConfig = new IdentityServerConfigBuilder() .WithProviderRootUrl(fileReRoute.AuthenticationOptions?.IdentityServerConfig?.ProviderRootUrl) .WithApiName(fileReRoute.AuthenticationOptions?.IdentityServerConfig?.ApiName) .WithRequireHttps(fileReRoute.AuthenticationOptions.IdentityServerConfig.RequireHttps) .WithApiSecret(fileReRoute.AuthenticationOptions?.IdentityServerConfig?.ApiSecret) .Build(); var expected = new AuthenticationOptionsBuilder() .WithProvider(fileReRoute.AuthenticationOptions?.Provider) .WithAllowedScopes(fileReRoute.AuthenticationOptions?.AllowedScopes) .WithConfig(authenticationConfig) .Build(); this.Given(x => x.GivenTheFollowing(fileReRoute)) .When(x => x.WhenICreateTheAuthenticationOptions()) .Then(x => x.ThenTheFollowingIdentityServerConfigIsReturned(expected)) .BDDfy(); } [Fact] public void should_return_Jwt_auth_options() { var fileReRoute = new FileReRoute() { AuthenticationOptions = new FileAuthenticationOptions { Provider = "Jwt", JwtConfig = new FileJwtConfig() { Audience = "Audience", Authority = "Authority" }, AllowedScopes = new List { "cheese" } } }; var authenticationConfig = new JwtConfigBuilder() .WithAudience(fileReRoute.AuthenticationOptions?.JwtConfig?.Audience) .WithAuthority(fileReRoute.AuthenticationOptions?.JwtConfig?.Authority) .Build(); var expected = new AuthenticationOptionsBuilder() .WithProvider(fileReRoute.AuthenticationOptions?.Provider) .WithAllowedScopes(fileReRoute.AuthenticationOptions?.AllowedScopes) .WithConfig(authenticationConfig) .Build(); this.Given(x => x.GivenTheFollowing(fileReRoute)) .When(x => x.WhenICreateTheAuthenticationOptions()) .Then(x => x.ThenTheFollowingJwtConfigIsReturned(expected)) .BDDfy(); } private void GivenTheFollowing(FileReRoute fileReRoute) { _fileReRoute = fileReRoute; } private void WhenICreateTheAuthenticationOptions() { _result = _authOptionsCreator.Create(_fileReRoute); } private void ThenTheFollowingJwtConfigIsReturned(AuthenticationOptions expected) { _result.AllowedScopes.ShouldBe(expected.AllowedScopes); _result.Provider.ShouldBe(expected.Provider); var _resultSettings = _result.Config as JwtConfig; var expectedSettngs = expected.Config as JwtConfig; _resultSettings.Audience.ShouldBe(expectedSettngs.Audience); _resultSettings.Authority.ShouldBe(expectedSettngs.Authority); } private void ThenTheFollowingIdentityServerConfigIsReturned(AuthenticationOptions expected) { _result.AllowedScopes.ShouldBe(expected.AllowedScopes); _result.Provider.ShouldBe(expected.Provider); var _resultSettings = _result.Config as IdentityServerConfig; var expectedSettngs = expected.Config as IdentityServerConfig; _resultSettings.ProviderRootUrl.ShouldBe(expectedSettngs.ProviderRootUrl); _resultSettings.RequireHttps.ShouldBe(expectedSettngs.RequireHttps); _resultSettings.ApiName.ShouldBe(expectedSettngs.ApiName); _resultSettings.ApiSecret.ShouldBe(expectedSettngs.ApiSecret); } } }