You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
5.0 KiB
117 lines
5.0 KiB
/*
|
|
* 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.Data.Entity;
|
|
using System.Text;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
using Moq;
|
|
using OpenIddict.Abstractions;
|
|
using OpenIddict.EntityFramework.Models;
|
|
using Xunit;
|
|
|
|
namespace OpenIddict.EntityFramework.Tests
|
|
{
|
|
public class OpenIddictApplicationStoreResolverTests
|
|
{
|
|
[Fact]
|
|
public void Get_ReturnsCustomStoreCorrespondingToTheSpecifiedTypeWhenAvailable()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
services.AddSingleton(Mock.Of<IOpenIddictApplicationStore<CustomApplication>>());
|
|
|
|
var monitor = Mock.Of<IOptionsMonitor<OpenIddictEntityFrameworkOptions>>();
|
|
var provider = services.BuildServiceProvider();
|
|
var resolver = new OpenIddictApplicationStoreResolver(monitor, provider);
|
|
|
|
// Act and assert
|
|
Assert.NotNull(resolver.Get<CustomApplication>());
|
|
}
|
|
|
|
[Fact]
|
|
public void Get_ThrowsAnExceptionForInvalidEntityType()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
|
|
var monitor = Mock.Of<IOptionsMonitor<OpenIddictEntityFrameworkOptions>>();
|
|
var provider = services.BuildServiceProvider();
|
|
var resolver = new OpenIddictApplicationStoreResolver(monitor, provider);
|
|
|
|
// Act and assert
|
|
var exception = Assert.Throws<InvalidOperationException>(() => resolver.Get<CustomApplication>());
|
|
|
|
Assert.Equal(new StringBuilder()
|
|
.AppendLine("The specified application type is not compatible with the Entity Framework 6.x stores.")
|
|
.Append("When enabling the Entity Framework 6.x stores, make sure you use the built-in ")
|
|
.Append("'OpenIddictApplication' entity (from the 'OpenIddict.EntityFramework.Models' package) ")
|
|
.Append("or a custom entity that inherits from the generic 'OpenIddictApplication' entity.")
|
|
.ToString(), exception.Message);
|
|
}
|
|
|
|
[Fact]
|
|
public void Get_ThrowsAnExceptionWhenDbContextTypeIsNotAvailable()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
|
|
var monitor = Mock.Of<IOptionsMonitor<OpenIddictEntityFrameworkOptions>>(
|
|
mock => mock.CurrentValue == new OpenIddictEntityFrameworkOptions
|
|
{
|
|
DbContextType = null
|
|
});
|
|
|
|
var provider = services.BuildServiceProvider();
|
|
var resolver = new OpenIddictApplicationStoreResolver(monitor, provider);
|
|
|
|
// Act and assert
|
|
var exception = Assert.Throws<InvalidOperationException>(() => resolver.Get<OpenIddictApplication>());
|
|
|
|
Assert.Equal(new StringBuilder()
|
|
.AppendLine("No Entity Framework 6.x context was specified in the OpenIddict options.")
|
|
.Append("To configure the OpenIddict Entity Framework 6.x stores to use a specific 'DbContext', ")
|
|
.Append("use 'options.UseEntityFramework().UseDbContext<TContext>()'.")
|
|
.ToString(), exception.Message);
|
|
}
|
|
|
|
[Fact]
|
|
public void Get_ReturnsDefaultStoreCorrespondingToTheSpecifiedTypeWhenAvailable()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
services.AddSingleton(Mock.Of<IOpenIddictApplicationStore<CustomApplication>>());
|
|
services.AddSingleton(CreateStore());
|
|
|
|
var monitor = Mock.Of<IOptionsMonitor<OpenIddictEntityFrameworkOptions>>(
|
|
mock => mock.CurrentValue == new OpenIddictEntityFrameworkOptions
|
|
{
|
|
DbContextType = typeof(DbContext)
|
|
});
|
|
|
|
var provider = services.BuildServiceProvider();
|
|
var resolver = new OpenIddictApplicationStoreResolver(monitor, provider);
|
|
|
|
// Act and assert
|
|
Assert.NotNull(resolver.Get<MyApplication>());
|
|
}
|
|
|
|
private static OpenIddictApplicationStore<MyApplication, MyAuthorization, MyToken, DbContext, long> CreateStore()
|
|
=> new Mock<OpenIddictApplicationStore<MyApplication, MyAuthorization, MyToken, DbContext, long>>(
|
|
Mock.Of<IMemoryCache>(),
|
|
Mock.Of<DbContext>(),
|
|
Mock.Of<IOptionsMonitor<OpenIddictEntityFrameworkOptions>>()).Object;
|
|
|
|
public class CustomApplication { }
|
|
|
|
public class MyApplication : OpenIddictApplication<long, MyAuthorization, MyToken> { }
|
|
public class MyAuthorization : OpenIddictAuthorization<long, MyApplication, MyToken> { }
|
|
public class MyScope : OpenIddictScope<long> { }
|
|
public class MyToken : OpenIddictToken<long, MyApplication, MyAuthorization> { }
|
|
}
|
|
}
|
|
|