public async Task GetDatabaseAsync_ThrowsAnExceptionWhenDatabaseCannotBeFound() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var database = GetDatabase(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >( mock => mock.CurrentValue == new OpenIddictMongoDbOptions { Database = null }); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert var exception = await Assert.ThrowsAsync <InvalidOperationException>(async delegate { await context.GetDatabaseAsync(CancellationToken.None); }); Assert.Equal(new StringBuilder() .AppendLine("No suitable MongoDB database service can be found.") .Append("To configure the OpenIddict MongoDB stores to use a specific database, use ") .Append("'services.AddOpenIddict().AddCore().UseMongoDb().UseDatabase()' or register an ") .Append("'IMongoDatabase' in the dependency injection container in 'ConfigureServices()'.") .ToString(), exception.Message); }
public async Task GetDatabaseAsync_SkipsInitializationWhenDisabled() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var database = GetDatabase(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >( mock => mock.CurrentValue == new OpenIddictMongoDbOptions { Database = database.Object, DisableInitialization = true }); var context = new OpenIddictMongoDbContext(options, provider); // Act await context.GetDatabaseAsync(CancellationToken.None); // Assert database.Verify(mock => mock.GetCollection <OpenIddictApplication>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Never()); database.Verify(mock => mock.GetCollection <OpenIddictAuthorization>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Never()); database.Verify(mock => mock.GetCollection <OpenIddictScope>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Never()); database.Verify(mock => mock.GetCollection <OpenIddictToken>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Never()); }
public async Task GetDatabaseAsync_FailedInvocationDoesNotPreventFutureInvocations() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var count = 0; var collection = new Mock <IMongoCollection <OpenIddictApplication> >(); collection.SetupGet(mock => mock.Indexes) .Returns(Mock.Of <IMongoIndexManager <OpenIddictApplication> >()); var database = GetDatabase(); database.Setup(mock => mock.GetCollection <OpenIddictApplication>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>())) .Callback(() => count++) .Returns(delegate { if (count == 1) { throw new Exception(); } return(collection.Object); }); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >( mock => mock.CurrentValue == new OpenIddictMongoDbOptions { Database = database.Object }); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert await Assert.ThrowsAsync <Exception>(async() => await context.GetDatabaseAsync(CancellationToken.None)); Assert.Same(database.Object, await context.GetDatabaseAsync(CancellationToken.None)); database.Verify(mock => mock.GetCollection <OpenIddictApplication>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Exactly(2)); database.Verify(mock => mock.GetCollection <OpenIddictAuthorization>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Once()); database.Verify(mock => mock.GetCollection <OpenIddictScope>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Once()); database.Verify(mock => mock.GetCollection <OpenIddictToken>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Once()); }
public async Task GetDatabaseAsync_ReturnsCachedDatabase() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var database = GetDatabase(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >( mock => mock.CurrentValue == new OpenIddictMongoDbOptions { Database = database.Object }); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert Assert.Same(database.Object, await context.GetDatabaseAsync(CancellationToken.None)); Assert.Same(database.Object, await context.GetDatabaseAsync(CancellationToken.None)); database.Verify(mock => mock.GetCollection <OpenIddictApplication>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Once()); database.Verify(mock => mock.GetCollection <OpenIddictScope>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Once()); database.Verify(mock => mock.GetCollection <OpenIddictToken>(It.IsAny <string>(), It.IsAny <MongoCollectionSettings>()), Times.Once()); }
public async Task GetDatabaseAsync_ThrowsAnExceptionForCanceledToken() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >(); var token = new CancellationToken(canceled: true); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert var exception = await Assert.ThrowsAsync <TaskCanceledException>(async delegate { await context.GetDatabaseAsync(token); }); Assert.Equal(token, exception.CancellationToken); }
public async Task GetDatabaseAsync_ThrowsAnExceptionForNullOptions() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var database = GetDatabase(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >(); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert var exception = await Assert.ThrowsAsync <InvalidOperationException>(async delegate { await context.GetDatabaseAsync(CancellationToken.None); }); Assert.Equal("The OpenIddict MongoDB options cannot be retrieved.", exception.Message); }
public async Task GetDatabaseAsync_PrefersDatabaseRegisteredInOptionsToDatabaseRegisteredInDependencyInjectionContainer() { // Arrange var services = new ServiceCollection(); services.AddSingleton(Mock.Of <IMongoDatabase>()); var provider = services.BuildServiceProvider(); var database = Mock.Of <IMongoDatabase>(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >( mock => mock.CurrentValue == new OpenIddictMongoDbOptions { Database = database }); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert Assert.Same(database, await context.GetDatabaseAsync(CancellationToken.None)); }
public async Task GetDatabaseAsync_ThrowsAnExceptionWhenDatabaseCannotBeFound() { // Arrange var services = new ServiceCollection(); var provider = services.BuildServiceProvider(); var options = Mock.Of <IOptionsMonitor <OpenIddictMongoDbOptions> >( mock => mock.CurrentValue == new OpenIddictMongoDbOptions { Database = null }); var context = new OpenIddictMongoDbContext(options, provider); // Act and assert var exception = await Assert.ThrowsAsync <InvalidOperationException>(async delegate { await context.GetDatabaseAsync(CancellationToken.None); }); Assert.Equal(SR.GetResourceString(SR.ID0262), exception.Message); }