From 7cf18dc1eaf4c60f0cd672a2db965084ac17cd7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Chalet?= Date: Thu, 26 Jul 2018 19:06:45 +0200 Subject: [PATCH] Add unit tests for the MongoDB stores resolvers --- ...OpenIddictApplicationStoreResolverTests.cs | 80 +++++++++++++++++++ ...enIddictAuthorizationStoreResolverTests.cs | 80 +++++++++++++++++++ .../OpenIddictScopeStoreResolverTests.cs | 80 +++++++++++++++++++ .../OpenIddictTokenStoreResolverTests.cs | 80 +++++++++++++++++++ 4 files changed, 320 insertions(+) create mode 100644 test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictApplicationStoreResolverTests.cs create mode 100644 test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictAuthorizationStoreResolverTests.cs create mode 100644 test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictScopeStoreResolverTests.cs create mode 100644 test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictTokenStoreResolverTests.cs diff --git a/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictApplicationStoreResolverTests.cs b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictApplicationStoreResolverTests.cs new file mode 100644 index 00000000..b605332f --- /dev/null +++ b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictApplicationStoreResolverTests.cs @@ -0,0 +1,80 @@ +/* + * 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.Text; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Moq; +using OpenIddict.Abstractions; +using OpenIddict.MongoDb.Models; +using Xunit; + +namespace OpenIddict.MongoDb.Tests +{ + public class OpenIddictApplicationStoreResolverTests + { + [Fact] + public void Get_ReturnsCustomStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictApplicationStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + [Fact] + public void Get_ThrowsAnExceptionForInvalidEntityType() + { + // Arrange + var services = new ServiceCollection(); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictApplicationStoreResolver(provider); + + // Act and assert + var exception = Assert.Throws(() => resolver.Get()); + + Assert.Equal(new StringBuilder() + .AppendLine("The specified application type is not compatible with the MongoDB stores.") + .Append("When enabling the MongoDB stores, make sure you use the built-in 'OpenIddictApplication' ") + .Append("entity (from the 'OpenIddict.MongoDb.Models' package) or a custom entity ") + .Append("that inherits from the 'OpenIddictApplication' entity.") + .ToString(), exception.Message); + } + + [Fact] + public void Get_ReturnsDefaultStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + services.AddSingleton(CreateStore()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictApplicationStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + private static OpenIddictApplicationStore CreateStore() + => new Mock>( + Mock.Of(), + Mock.Of(), + Mock.Of>()).Object; + + public class CustomApplication { } + + public class MyApplication : OpenIddictApplication { } + } +} diff --git a/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictAuthorizationStoreResolverTests.cs b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictAuthorizationStoreResolverTests.cs new file mode 100644 index 00000000..c27d672d --- /dev/null +++ b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictAuthorizationStoreResolverTests.cs @@ -0,0 +1,80 @@ +/* + * 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.Text; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Moq; +using OpenIddict.Abstractions; +using OpenIddict.MongoDb.Models; +using Xunit; + +namespace OpenIddict.MongoDb.Tests +{ + public class OpenIddictAuthorizationStoreResolverTests + { + [Fact] + public void Get_ReturnsCustomStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictAuthorizationStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + [Fact] + public void Get_ThrowsAnExceptionForInvalidEntityType() + { + // Arrange + var services = new ServiceCollection(); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictAuthorizationStoreResolver(provider); + + // Act and assert + var exception = Assert.Throws(() => resolver.Get()); + + Assert.Equal(new StringBuilder() + .AppendLine("The specified authorization type is not compatible with the MongoDB stores.") + .Append("When enabling the MongoDB stores, make sure you use the built-in 'OpenIddictAuthorization' ") + .Append("entity (from the 'OpenIddict.MongoDb.Models' package) or a custom entity ") + .Append("that inherits from the 'OpenIddictAuthorization' entity.") + .ToString(), exception.Message); + } + + [Fact] + public void Get_ReturnsDefaultStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + services.AddSingleton(CreateStore()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictAuthorizationStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + private static OpenIddictAuthorizationStore CreateStore() + => new Mock>( + Mock.Of(), + Mock.Of(), + Mock.Of>()).Object; + + public class CustomAuthorization { } + + public class MyAuthorization : OpenIddictAuthorization { } + } +} diff --git a/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictScopeStoreResolverTests.cs b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictScopeStoreResolverTests.cs new file mode 100644 index 00000000..95c3fdcd --- /dev/null +++ b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictScopeStoreResolverTests.cs @@ -0,0 +1,80 @@ +/* + * 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.Text; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Moq; +using OpenIddict.Abstractions; +using OpenIddict.MongoDb.Models; +using Xunit; + +namespace OpenIddict.MongoDb.Tests +{ + public class OpenIddictScopeStoreResolverTests + { + [Fact] + public void Get_ReturnsCustomStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictScopeStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + [Fact] + public void Get_ThrowsAnExceptionForInvalidEntityType() + { + // Arrange + var services = new ServiceCollection(); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictScopeStoreResolver(provider); + + // Act and assert + var exception = Assert.Throws(() => resolver.Get()); + + Assert.Equal(new StringBuilder() + .AppendLine("The specified scope type is not compatible with the MongoDB stores.") + .Append("When enabling the MongoDB stores, make sure you use the built-in 'OpenIddictScope' ") + .Append("entity (from the 'OpenIddict.MongoDb.Models' package) or a custom entity ") + .Append("that inherits from the 'OpenIddictScope' entity.") + .ToString(), exception.Message); + } + + [Fact] + public void Get_ReturnsDefaultStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + services.AddSingleton(CreateStore()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictScopeStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + private static OpenIddictScopeStore CreateStore() + => new Mock>( + Mock.Of(), + Mock.Of(), + Mock.Of>()).Object; + + public class CustomScope { } + + public class MyScope : OpenIddictScope { } + } +} diff --git a/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictTokenStoreResolverTests.cs b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictTokenStoreResolverTests.cs new file mode 100644 index 00000000..06b9c7ca --- /dev/null +++ b/test/OpenIddict.MongoDb.Tests/Resolvers/OpenIddictTokenStoreResolverTests.cs @@ -0,0 +1,80 @@ +/* + * 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.Text; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Moq; +using OpenIddict.Abstractions; +using OpenIddict.MongoDb.Models; +using Xunit; + +namespace OpenIddict.MongoDb.Tests +{ + public class OpenIddictTokenStoreResolverTests + { + [Fact] + public void Get_ReturnsCustomStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictTokenStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + [Fact] + public void Get_ThrowsAnExceptionForInvalidEntityType() + { + // Arrange + var services = new ServiceCollection(); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictTokenStoreResolver(provider); + + // Act and assert + var exception = Assert.Throws(() => resolver.Get()); + + Assert.Equal(new StringBuilder() + .AppendLine("The specified token type is not compatible with the MongoDB stores.") + .Append("When enabling the MongoDB stores, make sure you use the built-in 'OpenIddictToken' ") + .Append("entity (from the 'OpenIddict.MongoDb.Models' package) or a custom entity ") + .Append("that inherits from the 'OpenIddictToken' entity.") + .ToString(), exception.Message); + } + + [Fact] + public void Get_ReturnsDefaultStoreCorrespondingToTheSpecifiedTypeWhenAvailable() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(Mock.Of>()); + services.AddSingleton(CreateStore()); + + var provider = services.BuildServiceProvider(); + var resolver = new OpenIddictTokenStoreResolver(provider); + + // Act and assert + Assert.NotNull(resolver.Get()); + } + + private static OpenIddictTokenStore CreateStore() + => new Mock>( + Mock.Of(), + Mock.Of(), + Mock.Of>()).Object; + + public class CustomToken { } + + public class MyToken : OpenIddictToken { } + } +}