public void UpdateEntity()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <EntityWriterModel>();
            var writer          = new DbEntityWriter <EntityWriterModel>(database);
            var reader          = new DbEntityReader <EntityWriterModel>(database);

            //Get entity initially into the DB so we can update it
            var entity = new EntityWriterModel
            {
                Title = "DbEntityWriterTests.UpdateEntity"
            };

            entityContainer.Update(entity, DbEntityEntryState.Added);
            writer.Write(entityContainer);
            entityContainer.Clear();

            //Our updated entity with the same ID
            var updatedEntity = new EntityWriterModel
            {
                Id    = entity.Id,
                Title = "DbEntityWriterTests.UpdateEntity-Updated"
            };

            entityContainer.Update(updatedEntity, DbEntityEntryState.Updated);
            writer.Write(entityContainer);

            var dbEntity = reader.AsQueryable().Where(e => e.Id == entity.Id).FirstOrDefault();

            Assert.AreEqual("DbEntityWriterTests.UpdateEntity-Updated", dbEntity.Title);
        }
示例#2
0
        public void EntityProcessorsNotFiredWhenNotTEntity()
        {
            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 processor = new TestProcessor <MongoFrameworkQueryableModel>();

            queryable.EntityProcessors.Add(processor);

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

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

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

            Assert.IsFalse(processor.EntityProcessed);
        }
        public void AddMixedTypeEntities()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <EntityWriterModel>();
            var writer          = new DbEntityWriter <EntityWriterModel>(database);
            var entities        = new[]
            {
                new EntityWriterModel
                {
                    Title = "DbEntityWriterTests.AddMixedTypeEntities"
                },
                new ExtendedEntityWriterModel
                {
                    Title           = "DbEntityWriterTests.AddMixedTypeEntities",
                    AdditionalField = "AdditionalFieldSet"
                }
            };

            foreach (var entity in entities)
            {
                entityContainer.Update(entity, DbEntityEntryState.Added);
            }

            writer.Write(entityContainer);

            Assert.IsTrue(entities.OfType <EntityWriterModel>().Any(e => e.Title == "DbEntityWriterTests.AddMixedTypeEntities"));
            Assert.IsTrue(entities.OfType <ExtendedEntityWriterModel>().Any(e => e.AdditionalField == "AdditionalFieldSet"));
        }
        public void LoadRelationship()
        {
            var database = TestConfiguration.GetDatabase();

            var relatedEntity = new StringIdModel
            {
                Description = "LoadRelationship-RelatedItem"
            };
            var dbEntityWriter = new DbEntityWriter <StringIdModel>(database);
            var collection     = new DbEntityCollection <StringIdModel>
            {
                relatedEntity
            };

            dbEntityWriter.Write(collection);

            var entity = new SingleEntityIntegrationModel
            {
                RelatedItemId = relatedEntity.Id
            };

            var entityMapper = new EntityMapper <SingleEntityIntegrationModel>();

            new NavigationPropertyMutator <SingleEntityIntegrationModel>().MutateEntity(entity, MutatorType.Select, entityMapper, database);

            Assert.AreEqual("LoadRelationship-RelatedItem", entity.RelatedItem.Description);
        }
示例#5
0
        public void WhereIdMatchesGuids()
        {
            var database = TestConfiguration.GetDatabase();

            var dbEntityWriter   = new DbEntityWriter <WhereIdMatchesGuidModel>(database);
            var entityCollection = new DbEntityCollection <WhereIdMatchesGuidModel>
            {
                new WhereIdMatchesGuidModel {
                    Description = "1"
                },
                new WhereIdMatchesGuidModel {
                    Description = "2"
                },
                new WhereIdMatchesGuidModel {
                    Description = "3"
                },
                new WhereIdMatchesGuidModel {
                    Description = "4"
                }
            };

            dbEntityWriter.Write(entityCollection);

            var collection          = TestConfiguration.GetDatabase().GetCollection <WhereIdMatchesGuidModel>("WhereIdMatchesGuidModel");
            var underlyingQueryable = collection.AsQueryable();
            var queryable           = new MongoFrameworkQueryable <WhereIdMatchesGuidModel, WhereIdMatchesGuidModel>(underlyingQueryable);

            var entityIds = entityCollection.Select(e => e.Id).Take(2);

            var idMatchQueryable = LinqExtensions.WhereIdMatches(queryable, entityIds);

            Assert.AreEqual(2, idMatchQueryable.Count());
            Assert.IsTrue(idMatchQueryable.ToList().All(e => entityIds.Contains(e.Id)));
        }
示例#6
0
        public void ReadMixedEntities()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <A>();
            var reader          = new DbEntityReader <A>(database);
            var writer          = new DbEntityWriter <A>(database);

            entityContainer.Update(new A
            {
                Description = "DbEntityReaderTests.ReadMixedEntities"
            }, DbEntityEntryState.Added);

            entityContainer.Update(new B
            {
                BIsForBoolean = true,
                Description   = "DbEntityReaderTests.ReadMixedEntities"
            }, DbEntityEntryState.Added);


            writer.Write(entityContainer);

            var readMixedEntitiesQuery =
                reader.AsQueryable().Where(e => e.Description == "DbEntityReaderTests.ReadMixedEntities");

            Assert.AreEqual(2, readMixedEntitiesQuery.Count());
            Assert.AreEqual(2, readMixedEntitiesQuery.OfType <A>().Count());
            Assert.AreEqual(1, readMixedEntitiesQuery.OfType <B>().Count());
        }
        public void ValidObjectId()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <MongoDbUtilityModel>();
            var writer          = new DbEntityWriter <MongoDbUtilityModel>(database);

            var entity = new MongoDbUtilityModel();

            entityContainer.Update(entity, DbEntityEntryState.Added);
            writer.Write(entityContainer);

            Assert.IsTrue(MongoDbUtility.IsValidObjectId(entity.Id));
        }
        public void AddEntity()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <EntityWriterModel>();
            var writer          = new DbEntityWriter <EntityWriterModel>(database);

            var entity = new EntityWriterModel
            {
                Title = "DbEntityWriterTests.AddEntity"
            };

            entityContainer.Update(entity, DbEntityEntryState.Added);
            writer.Write(entityContainer);

            Assert.IsNotNull(entity.Id);
        }
示例#9
0
        /// <summary>
        /// Initialise a new entity reader and writer to the specified database.
        /// </summary>
        /// <param name="database"></param>
        public void SetDatabase(IMongoDatabase database)
        {
            Database = database;

            var entityMapper = new EntityMapper <TEntity>();

            EntityWriter = new DbEntityWriter <TEntity>(database, entityMapper);
            EntityReader = new DbEntityReader <TEntity>(database, entityMapper);

            //TODO: Look at this again in the future, this seems unnecessarily complex
            var indexMapper = new EntityIndexMapper <TEntity>(entityMapper);
            var collection  = database.GetCollection <TEntity>(entityMapper.GetCollectionName());

            EntityIndexWriter = new EntityIndexWriter <TEntity>(collection, indexMapper);

            EntityRelationshipWriter = new EntityRelationshipWriter <TEntity>(database, entityMapper);
        }
        public async Task MixedActionWriteAsync()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <EntityWriterModel>();
            var writer          = new DbEntityWriter <EntityWriterModel>(database);
            var reader          = new DbEntityReader <EntityWriterModel>(database);

            var updateEntity = new EntityWriterModel
            {
                Title = "DbEntityWriterTests.MixedActionWriteAsync-UpdateEntity"
            };
            var deleteEntity = new EntityWriterModel
            {
                Title = "DbEntityWriterTests.MixedActionWriteAsync-DeleteEntity"
            };

            entityContainer.Update(updateEntity, DbEntityEntryState.Added);
            entityContainer.Update(deleteEntity, DbEntityEntryState.Added);
            await writer.WriteAsync(entityContainer).ConfigureAwait(false);

            entityContainer.Clear();

            var addedEntity = new EntityWriterModel
            {
                Title = "DbEntityWriterTests.MixedActionWriteAsync-AddEntity"
            };

            updateEntity.Title = "DbEntityWriterTests.MixedActionWriteAsync-UpdateEntity-Updated";
            entityContainer.Update(addedEntity, DbEntityEntryState.Added);
            entityContainer.Update(updateEntity, DbEntityEntryState.Updated);
            entityContainer.Update(deleteEntity, DbEntityEntryState.Deleted);
            await writer.WriteAsync(entityContainer).ConfigureAwait(false);

            Assert.IsTrue(reader.AsQueryable().Where(e => e.Id == addedEntity.Id).Any());
            Assert.IsFalse(reader.AsQueryable().Where(e => e.Id == deleteEntity.Id).Any());

            var dbEntity = reader.AsQueryable().Where(e => e.Id == updateEntity.Id).FirstOrDefault();

            Assert.AreEqual("DbEntityWriterTests.MixedActionWriteAsync-UpdateEntity-Updated", dbEntity.Title);
        }
示例#11
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 RemoveEntity()
        {
            var database        = TestConfiguration.GetDatabase();
            var entityContainer = new DbEntityCollection <EntityWriterModel>();
            var writer          = new DbEntityWriter <EntityWriterModel>(database);
            var reader          = new DbEntityReader <EntityWriterModel>(database);

            //Get entity initially into the DB so we can remove it
            var entity = new EntityWriterModel
            {
                Title = "DbEntityWriterTests.RemoveEntity"
            };

            entityContainer.Update(entity, DbEntityEntryState.Added);
            writer.Write(entityContainer);
            entityContainer.Clear();

            //Remove the entity
            entityContainer.Update(entity, DbEntityEntryState.Deleted);
            writer.Write(entityContainer);

            Assert.IsFalse(reader.AsQueryable().Any(e => e.Id == entity.Id));
        }