public async Task SingleOrDefaultAsync_NoValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            Assert.IsNull(await queryable.SingleOrDefaultAsync());
        }
        public async Task SingleOrDefaultAsync_HasValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasValue.1"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.SingleOrDefaultAsync();

            Assert.AreEqual("SingleOrDefaultAsync_HasValue.1", result.Title);
        }
        public async Task SingleOrDefaultAsync_HasMoreThanOneValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <QueryableAsyncModel>(connection);
            var queryable  = new MongoFrameworkQueryable <QueryableAsyncModel>(provider);

            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasMoreThanOneValue.1"
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasMoreThanOneValue.2"
            }, EntityEntryState.Added);
            context.SaveChanges();

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await queryable.SingleOrDefaultAsync());
        }