public void EntityProcessorsNotFiredWhenNotTEntity_Select()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsNotFiredWhenNotTEntity_Select"
            }, EntityEntryState.Added);
            context.SaveChanges();

            foreach (var titles in queryable.Select(e => e.Title))
            {
                //Do nothing
            }

            Assert.IsFalse(processor.EntityProcessed);
        }
        public void EntityProcessorsNotFiredWhenNotTEntity()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            var entityCollection = new EntityCollection <MongoFrameworkQueryableModel>();
            var writerPipeline   = new EntityWriterPipeline <MongoFrameworkQueryableModel>(connection);

            writerPipeline.AddCollection(entityCollection);
            entityCollection.Update(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorNoFireTest"
            }, EntityEntryState.Added);
            writerPipeline.Write();

            foreach (var titles in queryable.Select(e => e.Title))
            {
                //Do nothing
            }

            Assert.IsFalse(processor.EntityProcessed);
        }
        public void EntityProcessorsRunWhenToDictionaryIsUsed()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            var entityCollection = new EntityCollection <MongoFrameworkQueryableModel>();
            var writerPipeline   = new EntityWriterPipeline <MongoFrameworkQueryableModel>(connection);

            writerPipeline.AddCollection(entityCollection);
            entityCollection.Update(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsRunWithToDictionaryTest"
            }, EntityEntryState.Added);
            writerPipeline.Write();

            var result = queryable.ToDictionary(m => m.Id);

            Assert.AreEqual("EntityProcessorsRunWithToDictionaryTest", result.FirstOrDefault().Value.Title);
            Assert.IsTrue(processor.EntityProcessed);
        }
        public void EntityProcessorsFiresOnEnumerationOfTEntity()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorFireTest"
            }, EntityEntryState.Added);
            context.SaveChanges();

            foreach (var dbEntity in queryable)
            {
                //Do nothing
            }

            Assert.IsTrue(processor.EntityProcessed);
        }
        public void ReadMixedEntities()
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var provider   = new MongoFrameworkQueryProvider <MixedReadA>(connection);
            var queryable  = new MongoFrameworkQueryable <MixedReadA>(provider);

            context.ChangeTracker.SetEntityState(new MixedReadA
            {
                Description = "MongoFrameworkQueryableTests.ReadMixedEntities"
            }, EntityEntryState.Added);

            context.ChangeTracker.SetEntityState <MixedReadA>(new MixedReadB
            {
                BIsForBoolean = true,
                Description   = "MongoFrameworkQueryableTests.ReadMixedEntities"
            }, EntityEntryState.Added);

            context.SaveChanges();

            var readMixedEntitiesQuery = queryable.Where(e => e.Description == "MongoFrameworkQueryableTests.ReadMixedEntities");

            Assert.AreEqual(2, readMixedEntitiesQuery.Count());
            Assert.AreEqual(2, readMixedEntitiesQuery.OfType <MixedReadA>().Count());
            Assert.AreEqual(1, readMixedEntitiesQuery.OfType <MixedReadB>().Count());
        }
        public IQueryable <TEntity> AsQueryable()
        {
            var underlyingQueryable = GetCollection().AsQueryable();
            var queryable           = new MongoFrameworkQueryable <TEntity, TEntity>(underlyingQueryable);

            queryable.EntityProcessors.Add(new EntityMutationProcessor <TEntity>(Database));
            return(queryable);
        }
Example #7
0
        public void ValidToQuery()
        {
            var collection          = TestConfiguration.GetDatabase().GetCollection <LinqExtensionsModel>("LinqExtensionsModel");
            var underlyingQueryable = collection.AsQueryable();
            var queryable           = new MongoFrameworkQueryable <LinqExtensionsModel, LinqExtensionsModel>(underlyingQueryable);
            var result = LinqExtensions.ToQuery(queryable);

            Assert.AreEqual("db.LinqExtensionsModel.aggregate([])", result);
        }
Example #8
0
        public IQueryable <TEntity> AsQueryable()
        {
            var provider = new MongoFrameworkQueryProvider <TEntity>(Connection);

            provider.EntityProcessors.Add(new EntityMutationProcessor <TEntity>());
            var queryable = new MongoFrameworkQueryable <TEntity>(provider);

            return(queryable);
        }
        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 FirstAsync_NoValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncModel));

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

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await queryable.FirstAsync());
        }
        public void ValidToQuery()
        {
            EntityMapping.RegisterType(typeof(LinqExtensionsModel));

            var connection = TestConfiguration.GetConnection();
            var provider   = new MongoFrameworkQueryProvider <LinqExtensionsModel>(connection);
            var queryable  = new MongoFrameworkQueryable <LinqExtensionsModel>(provider);
            var result     = LinqExtensions.ToQuery(queryable);

            Assert.AreEqual("db.LinqExtensionsModel.aggregate([])", result);
        }
        public void ValidToQuery()
        {
            EntityMapping.RegisterType(typeof(LinqExtensionsModel));

            var connection          = TestConfiguration.GetConnection();
            var collection          = connection.GetDatabase().GetCollection <LinqExtensionsModel>(nameof(LinqExtensionsModel));
            var underlyingQueryable = collection.AsQueryable();
            var queryable           = new MongoFrameworkQueryable <LinqExtensionsModel, LinqExtensionsModel>(connection, underlyingQueryable);
            var result = LinqExtensions.ToQuery(queryable);

            Assert.AreEqual("db.LinqExtensionsModel.aggregate([])", result);
        }
Example #13
0
        public async Task SumAsync_NullableLong_NoValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncSumModel));

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

            var result = await queryable.Select(e => e.NullableLongNumber).SumAsync();

            Assert.IsNull(result);
        }
        public async Task AnyAsync_NoValues()
        {
            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);

            var result = await queryable.AnyAsync();

            Assert.IsFalse(result);
        }
        public async Task MinAsync_NoValues()
        {
            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.SaveChanges();

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await queryable.Select(e => e.IntNumber).MinAsync());
        }
        public async Task CountAsync_NoValues()
        {
            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.SaveChanges();

            var result = await queryable.CountAsync();

            Assert.AreEqual(0, result);
        }
Example #17
0
        /// <inheritdoc/>
        public async ValueTask <CacheEntry <T>?> GetAsync <T>(string cacheKey)
        {
            await TryConfigureIndexes();

            var provider  = new MongoFrameworkQueryProvider <DbCachedEntry>(Connection);
            var queryable = new MongoFrameworkQueryable <DbCachedEntry>(provider);

            var dbEntry    = queryable.Where(e => e.CacheKey == cacheKey).FirstOrDefault();
            var cacheEntry = default(CacheEntry <T>);

            if (dbEntry != default)
            {
                cacheEntry = new CacheEntry <T>((T)dbEntry.Value !, dbEntry.Expiry);
            }

            return(cacheEntry);
        }
        public async Task AnyAsync_HasValues()
        {
            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 = "AnyAsync_HasValues.1"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.AnyAsync();

            Assert.IsTrue(result);
        }
        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());
        }
        public void EnumerateQueryable()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EnumerateQueryable"
            }, EntityEntryState.Added);
            context.SaveChanges();

            foreach (var dbEntity in queryable)
            {
                Assert.AreEqual("EnumerateQueryable", dbEntity.Title);
            }
        }
        public async Task AsyncEnumeration()
        {
            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 = "EnumerateQueryableAsync"
            }, EntityEntryState.Added);
            context.SaveChanges();

            await foreach (var entity in queryable.AsAsyncEnumerable())
            {
                Assert.AreEqual("EnumerateQueryableAsync", entity.Title);
            }
        }
        public async Task ToListAsync()
        {
            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 = "ToListAsync"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.ToListAsync();

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("ToListAsync", result[0].Title);
        }
Example #23
0
        public async Task SumAsync_Int32_HasValue()
        {
            EntityMapping.RegisterType(typeof(QueryableAsyncSumModel));

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

            context.ChangeTracker.SetEntityState(new QueryableAsyncSumModel {
                Title = "SumAsync_Int32_HasValue.1", Int32Number = 5
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncSumModel {
                Title = "SumAsync_Int32_HasValue.2", Int32Number = 9
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.Select(e => e.Int32Number).SumAsync();

            Assert.AreEqual(14, result);
        }
        public async Task SingleOrDefaultAsync_WithPredicate()
        {
            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_WithPredicate.1"
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_WithPredicate.2"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.SingleOrDefaultAsync(e => e.Title == "SingleOrDefaultAsync_WithPredicate.2");

            Assert.AreEqual("SingleOrDefaultAsync_WithPredicate.2", result.Title);
        }
        public async Task MinAsync_HasValues_Date()
        {
            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 = "MinAsync_HasValues_Date.1", Date = new DateTime(2020, 3, 10, 0, 0, 0, DateTimeKind.Utc)
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "MinAsync_HasValues_Date.2", Date = new DateTime(2020, 1, 10, 0, 0, 0, DateTimeKind.Utc)
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.Select(e => e.Date).MinAsync();

            Assert.AreEqual(new DateTime(2020, 1, 10, 0, 0, 0, DateTimeKind.Utc), result);
        }
        public async Task MinAsync_WithSelector()
        {
            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 = "MinAsync_WithSelector.1", IntNumber = 20
            }, EntityEntryState.Added);
            context.ChangeTracker.SetEntityState(new QueryableAsyncModel {
                Title = "MinAsync_WithSelector.2", IntNumber = 10
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = await queryable.MinAsync(e => e.IntNumber);

            Assert.AreEqual(10, result);
        }
        public void EnumerateQueryable()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var entityCollection = new EntityCollection <MongoFrameworkQueryableModel>();
            var writerPipeline   = new EntityWriterPipeline <MongoFrameworkQueryableModel>(connection);

            writerPipeline.AddCollection(entityCollection);
            entityCollection.Update(new MongoFrameworkQueryableModel {
                Title = "EnumerateQueryable"
            }, EntityEntryState.Added);
            writerPipeline.Write();

            foreach (var entity in queryable)
            {
                Assert.AreEqual("EnumerateQueryable", entity.Title);
            }
        }
Example #28
0
        public void EnumerateQueryable()
        {
            var database = TestConfiguration.GetDatabase();

            new EntityMapper <MongoFrameworkQueryableModel>();
            var collection          = database.GetCollection <MongoFrameworkQueryableModel>("MongoFrameworkQueryableModel");
            var underlyingQueryable = collection.AsQueryable();
            var queryable           = new MongoFrameworkQueryable <MongoFrameworkQueryableModel, MongoFrameworkQueryableModel>(underlyingQueryable);

            var entityContainer = new DbEntityCollection <MongoFrameworkQueryableModel>();
            var writer          = new DbEntityWriter <MongoFrameworkQueryableModel>(database);

            entityContainer.Update(new MongoFrameworkQueryableModel {
                Title = "EnumerateQueryable"
            }, DbEntityEntryState.Added);
            writer.Write(entityContainer);

            foreach (var entity in queryable)
            {
                Assert.AreEqual("EnumerateQueryable", entity.Title);
            }
        }
        public void EntityProcessorsNotFiredWhenNotTEntity_Any()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsNotFiredWhenNotTEntity_Any"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = queryable.Any(e => e.Title == "EntityProcessorsNotFiredWhenNotTEntity_Any");

            Assert.IsTrue(result);
            Assert.IsFalse(processor.EntityProcessed);
        }
        public void EntityProcessorsRunWhenToDictionaryIsUsed()
        {
            EntityMapping.RegisterType(typeof(MongoFrameworkQueryableModel));

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

            var processor = new TestProcessor <MongoFrameworkQueryableModel>();

            provider.EntityProcessors.Add(processor);

            context.ChangeTracker.SetEntityState(new MongoFrameworkQueryableModel {
                Title = "EntityProcessorsRunWithToDictionaryTest"
            }, EntityEntryState.Added);
            context.SaveChanges();

            var result = queryable.ToDictionary(m => m.Id);

            Assert.AreEqual("EntityProcessorsRunWithToDictionaryTest", result.FirstOrDefault().Value.Title);
            Assert.IsTrue(processor.EntityProcessed);
        }