示例#1
0
        public void SuccessfullyAttachUntrackedEntities()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <DbSetModel>(context);

            var entities = new[] {
                new DbSetModel
                {
                    Id = "abcd"
                },
                new DbSetModel
                {
                    Id = "efgh"
                }
            };

            dbSet.AddRange(entities);

            context.SaveChanges();

            ResetMongoDb();

            context = new MongoDbTenantContext(connection, tenantId);
            dbSet   = new MongoDbTenantSet <DbSetModel>(context);

            var result = dbSet.AsNoTracking().ToList();

            context.AttachRange(result);

            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.NoChanges, context.ChangeTracker.GetEntry(result[0]).State);
            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.NoChanges, context.ChangeTracker.GetEntry(result[1]).State);
        }
示例#2
0
        public void AttachRejectsMismatchedEntities()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <DbSetModel>(context);

            var entities = new[] {
                new DbSetModel
                {
                    Id = "abcd"
                },
                new DbSetModel
                {
                    Id = "efgh"
                }
            };

            dbSet.AddRange(entities);

            context.SaveChanges();

            ResetMongoDb();

            context = new MongoDbTenantContext(connection, tenantId);
            dbSet   = new MongoDbTenantSet <DbSetModel>(context);

            var result = dbSet.AsNoTracking().ToList();

            result[0].TenantId = tenantId + "a";

            Assert.ThrowsException <MultiTenantException>(() => context.AttachRange(result));
        }
        public void SuccessfullyBlocksRemoveRange()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var entities = new[] {
                new TestModel
                {
                    Description = "SuccessfullyBlocksRemoveRange.1"
                },
                new TestModel
                {
                    Description = "SuccessfullyBlocksRemoveRange.2"
                }
            };

            dbSet.AddRange(entities);
            context.SaveChanges();

            dbSet = new MongoDbTenantSet <TestModel>(context);

            entities[0].TenantId = "qweasd";
            entities[1].TenantId = "qweasd";

            Assert.ThrowsException <MultiTenantException>(() => dbSet.RemoveRange(entities));
        }
        public void SuccessfullyRemoveRange()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var entities = new[] {
                new TestModel
                {
                    Description = "SuccessfullyRemoveRange.1"
                },
                new TestModel
                {
                    Description = "SuccessfullyRemoveRange.2"
                }
            };

            dbSet.AddRange(entities);
            context.SaveChanges();

            dbSet = new MongoDbTenantSet <TestModel>(context);

            dbSet.RemoveRange(entities);

            Assert.IsTrue(dbSet.Any(m => m.Description == "SuccessfullyRemoveRange.1"));
            Assert.IsTrue(dbSet.Any(m => m.Description == "SuccessfullyRemoveRange.2"));
            context.SaveChanges();
            Assert.IsFalse(dbSet.Any(m => m.Description == "SuccessfullyRemoveRange.1"));
            Assert.IsFalse(dbSet.Any(m => m.Description == "SuccessfullyRemoveRange.2"));
        }
        public void SuccessfullyBlocksNulls()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            Assert.ThrowsException <ArgumentNullException>(() => dbSet.Add(null));
            Assert.ThrowsException <ArgumentNullException>(() => dbSet.AddRange(null));
            Assert.ThrowsException <ArgumentNullException>(() => dbSet.Update(null));
            Assert.ThrowsException <ArgumentNullException>(() => dbSet.UpdateRange(null));
        }
        public void SuccessfullyRemoveRangeByPredicate()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var context2 = new MongoDbTenantContext(connection, tenantId + "-alt");
            var dbSet2   = new MongoDbTenantSet <TestModel>(context2);


            var entities = new[] {
                new TestModel
                {
                    Description = "SuccessfullyRemoveRangeByPredicate"
                },
                new TestModel
                {
                    Description  = "SuccessfullyRemoveRangeByPredicate",
                    BooleanField = true
                }
            };

            var entities2 = new[] {
                new TestModel
                {
                    Description = "SuccessfullyRemoveRangeByPredicate"
                },
                new TestModel
                {
                    Description  = "SuccessfullyRemoveRangeByPredicate",
                    BooleanField = true
                }
            };

            dbSet.AddRange(entities);
            dbSet2.AddRange(entities2);

            context.SaveChanges();
            context2.SaveChanges();

            dbSet = new MongoDbTenantSet <TestModel>(context);

            dbSet.RemoveRange(e => e.BooleanField);

            Assert.AreEqual(2, dbSet.Count(m => m.Description == "SuccessfullyRemoveRangeByPredicate"));
            Assert.AreEqual(2, dbSet2.Count(m => m.Description == "SuccessfullyRemoveRangeByPredicate"));
            context.SaveChanges();
            Assert.AreEqual(1, dbSet.Count(m => m.Description == "SuccessfullyRemoveRangeByPredicate"));
            Assert.AreEqual(2, dbSet2.Count(m => m.Description == "SuccessfullyRemoveRangeByPredicate"));
            Assert.IsNotNull(dbSet.FirstOrDefault(m => m.Id == entities[0].Id));
        }
示例#7
0
        public async Task MinAsync_NoValues()
        {
            var tenantId   = TestConfiguration.GetTenantId();
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <QueryableAsyncModel>(context);

            dbSet.AddRange(GetModels());
            context.SaveChanges();

            var context2 = new MongoDbTenantContext(connection, tenantId + "-2");
            var dbSet2   = new MongoDbTenantSet <QueryableAsyncModel>(context2);

            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() => await dbSet2.Select(e => e.IntNumber).MinAsync());
        }
示例#8
0
        public async Task SingleOrDefaultAsync_NoValue()
        {
            var tenantId   = TestConfiguration.GetTenantId();
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <QueryableAsyncModel>(context);

            dbSet.AddRange(GetModels());
            context.SaveChanges();

            var context2 = new MongoDbTenantContext(connection, tenantId + "-2");
            var dbSet2   = new MongoDbTenantSet <QueryableAsyncModel>(context2);

            Assert.IsNull(await dbSet2.SingleOrDefaultAsync());
        }
        public void SuccessfulLimitsQueryToTenant()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var context2 = new MongoDbTenantContext(connection, tenantId + "-alt");
            var dbSet2   = new MongoDbTenantSet <TestModel>(context2);


            var entities = new[] {
                new TestModel
                {
                    Description = "SuccessfulLimitsQueryToTenant.1"
                },
                new TestModel
                {
                    Description  = "SuccessfulLimitsQueryToTenant.2",
                    BooleanField = true
                }
            };

            var entities2 = new[] {
                new TestModel
                {
                    Description = "SuccessfulLimitsQueryToTenant.1"
                },
                new TestModel
                {
                    Description  = "SuccessfulLimitsQueryToTenant.2",
                    BooleanField = true
                }
            };

            dbSet.AddRange(entities);
            dbSet2.AddRange(entities2);

            context.SaveChanges();
            context2.SaveChanges();

            Assert.AreEqual(2, dbSet.Count());
            Assert.AreEqual(2, dbSet2.Count());

            Assert.AreEqual(1, dbSet.Where(e => e.BooleanField).Count());
            Assert.AreEqual(1, dbSet2.Where(e => e.BooleanField).Count());
        }
示例#10
0
        private MongoDbTenantSet <QueryableAsyncModel> SetupTwoTenantsData(string tenantId)
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <QueryableAsyncModel>(context);

            var context2 = new MongoDbTenantContext(connection, tenantId + "-2");
            var dbSet2   = new MongoDbTenantSet <QueryableAsyncModel>(context2);

            dbSet.AddRange(GetModels());
            context.SaveChanges();

            dbSet2.AddRange(GetModels());
            context2.SaveChanges();

            return(dbSet);
        }
示例#11
0
        public async Task AnyAsync_NoValues()
        {
            var tenantId   = TestConfiguration.GetTenantId();
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <QueryableAsyncModel>(context);

            dbSet.AddRange(GetModels());
            context.SaveChanges();

            var context2 = new MongoDbTenantContext(connection, tenantId + "-2");
            var dbSet2   = new MongoDbTenantSet <QueryableAsyncModel>(context2);

            var result = await dbSet2.AnyAsync();

            Assert.IsFalse(result);
        }
        public void SearchTextTenant()
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbTenantContext(connection, TestConfiguration.GetTenantId());
            var dbSet      = new MongoDbTenantSet <SearchTextTenantModel>(context);

            var models = new SearchTextTenantModel[]
            {
                new SearchTextTenantModel {
                    MiscField = 1, Text = "The quick brown fox jumps over the lazy dog."
                },
                new SearchTextTenantModel {
                    MiscField = 2, Text = "The five boxing wizards jump quickly."
                },
                new SearchTextTenantModel {
                    MiscField = 3, Text = "The quick brown fox jumps over the lazy dog."
                },
                new SearchTextTenantModel {
                    MiscField = 4, Text = "Jived fox nymph grabs quick waltz."
                },
            };

            dbSet.AddRange(models);
            context.SaveChanges();

            //add some extras to ensure only our tenant's results are coming back.
            var context2 = new MongoDbTenantContext(connection, "second");
            var dbSet2   = new MongoDbTenantSet <SearchTextTenantModel>(context);

            dbSet2.AddRange(models);
            context2.SaveChanges();

            Assert.AreEqual(4, dbSet.SearchText("quick").Count());
            Assert.AreEqual(0, dbSet.SearchText("the").Count());             //Stop words aren't used in text indexes: https://docs.mongodb.com/manual/core/index-text/#supported-languages-and-stop-words
            Assert.AreEqual(2, dbSet.SearchText("dog").Count());
            Assert.AreEqual(1, dbSet.SearchText("jived").Count());

            Assert.AreEqual(1, dbSet.SearchText("quick").Where(e => e.MiscField == 3).Count());
        }
示例#13
0
        public async Task SingleOrDefaultAsync_HasValue()
        {
            var tenantId   = TestConfiguration.GetTenantId();
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <QueryableAsyncModel>(context);

            dbSet.AddRange(GetModels());
            context.SaveChanges();

            var context2 = new MongoDbTenantContext(connection, tenantId + "-2");
            var dbSet2   = new MongoDbTenantSet <QueryableAsyncModel>(context2);

            dbSet2.Add(new QueryableAsyncModel {
                Title = "SingleOrDefaultAsync_HasValue.1"
            });
            context2.SaveChanges();

            var result = await dbSet2.SingleOrDefaultAsync();

            Assert.AreEqual("SingleOrDefaultAsync_HasValue.1", result.Title);
        }