From 568f13baab899d05fd12d2a81560222dfdf66107 Mon Sep 17 00:00:00 2001 From: Chris Thompson Date: Sun, 2 Aug 2020 18:42:23 -0400 Subject: [PATCH] Port OpenIddictServerExtensionsTests to OpenIddict 3.0 --- .../OpenIddictServerExtensionsTests.cs | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 test/OpenIddict.Server.Tests/OpenIddictServerExtensionsTests.cs diff --git a/test/OpenIddict.Server.Tests/OpenIddictServerExtensionsTests.cs b/test/OpenIddict.Server.Tests/OpenIddictServerExtensionsTests.cs new file mode 100644 index 00000000..7337a83d --- /dev/null +++ b/test/OpenIddict.Server.Tests/OpenIddictServerExtensionsTests.cs @@ -0,0 +1,209 @@ +/* + * Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) + * See https://github.com/openiddict/openiddict-core for more information concerning + * the license and the contributors participating to this project. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Xunit; + +namespace OpenIddict.Server.Tests +{ + public class OpenIddictServerExtensionsTests + { + [Fact] + public void AddServer_ThrowsAnExceptionForNullBuilder() + { + // Arrange + var builder = (OpenIddictBuilder) null!; + + // Act and assert + var exception = Assert.Throws(() => builder.AddServer()); + + Assert.Equal("builder", exception.ParamName); + } + + [Fact] + public void AddServer_ThrowsAnExceptionForNullConfiguration() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act and assert + var exception = Assert.Throws(() => builder.AddServer(configuration: null!)); + + Assert.Equal("configuration", exception.ParamName); + } + + [Fact] + public void AddServer_RegistersLoggingServices() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.ServiceType == typeof(ILogger<>)); + } + + [Fact] + public void AddServer_RegistersOptionsServices() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.ServiceType == typeof(IOptions<>)); + } + + [Fact] + public void AddServer_RegistersServerDispatcher() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.ServiceType == typeof(IOpenIddictServerDispatcher) && + service.ImplementationType == typeof(OpenIddictServerDispatcher) && + service.Lifetime == ServiceLifetime.Scoped); + } + + [Fact] + public void AddServer_RegistersServerFactory() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.ServiceType == typeof(IOpenIddictServerFactory) && + service.ImplementationType == typeof(OpenIddictServerFactory) && + service.Lifetime == ServiceLifetime.Scoped); + } + + public static IEnumerable DefaultHandlers + => OpenIddictServerHandlers.DefaultHandlers.Select(descriptor => new object[] { descriptor }); + + [Theory] + [MemberData(nameof(DefaultHandlers))] + public void AddServer_RegistersDefaultHandler(OpenIddictServerHandlerDescriptor descriptor) + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.Lifetime == descriptor.ServiceDescriptor.Lifetime && + service.ServiceType == descriptor.ServiceDescriptor.ServiceType && + service.ImplementationType == descriptor.ServiceDescriptor.ImplementationType); + } + + [Theory] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireAuthorizationStorageEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireAuthorizationRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireClientIdParameter))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireConfigurationRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireCryptographyRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireDegradedModeDisabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireDeviceRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireEndpointPermissionsEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireGrantTypePermissionsEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireIntrospectionRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireLogoutRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequirePostLogoutRedirectUriParameter))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireReferenceAccessTokensEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireReferenceRefreshTokensEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireRevocationRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireSlidingRefreshTokenExpirationEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireScopePermissionsEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireScopeValidationEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireTokenStorageEnabled))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireTokenRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireUserinfoRequest))] + [InlineData(typeof(OpenIddictServerHandlerFilters.RequireVerificationRequest))] + public void AddServer_RegistersRequiredSingletons(Type type) + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.ServiceType == type && + service.ImplementationType == type && + service.Lifetime == ServiceLifetime.Singleton); + } + + [Fact] + public void AddServer_ResolvingProviderThrowsAnExceptionWhenCoreServicesAreNotRegistered() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + var provider = services.BuildServiceProvider(); + + var exception = Assert.Throws(() => provider.GetRequiredService()); + + Assert.NotNull(exception); + } + + [Theory] + [InlineData(typeof(IPostConfigureOptions), typeof(OpenIddictServerConfiguration))] + public void AddServer_RegistersConfiguration(Type serviceType, Type implementationType) + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act + builder.AddServer(); + + // Assert + Assert.Contains(services, service => service.ServiceType == serviceType && + service.ImplementationType == implementationType); + } + + [Fact] + public void AddServer_CanBeSafelyInvokedMultipleTimes() + { + // Arrange + var services = new ServiceCollection(); + var builder = new OpenIddictBuilder(services); + + // Act and assert + builder.AddServer(); + builder.AddServer(); + builder.AddServer(); + } + } +} \ No newline at end of file