public void SuccessfullyLinqFindTracked()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var model = new TestModel
            {
                Id          = "abcd",
                Description = "SuccessfullyFindTracked.1"
            };

            dbSet.Add(model);

            context.SaveChanges();

            ResetMongoDb();

            var result = dbSet.FirstOrDefault();

            result.Description = "changed";
            context.ChangeTracker.DetectChanges();

            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.Updated, context.ChangeTracker.GetEntry(result).State);
        }
        public void AllowsUniquesByTenant()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestUniqueModel>(context);

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

            dbSet.Add(new TestUniqueModel {
                UserName = "******"
            });
            dbSet.Add(new TestUniqueModel {
                UserName = "******"
            });
            dbSet2.Add(new TestUniqueModel {
                UserName = "******"
            });
            dbSet2.Add(new TestUniqueModel {
                UserName = "******"
            });

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

            Assert.AreEqual(2, dbSet.Count());
            Assert.AreEqual(2, dbSet2.Count());
        }
        public void BlocksDuplicatesByTenant()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestUniqueModel>(context);

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

            dbSet.Add(new TestUniqueModel {
                UserName = "******"
            });
            dbSet2.Add(new TestUniqueModel {
                UserName = "******"
            });

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

            dbSet.Add(new TestUniqueModel {
                UserName = "******"
            });
            Assert.ThrowsException <MongoBulkWriteException <TestUniqueModel> >(() => context.SaveChanges());
        }
        public async Task BlocksWrongTenantFindAsync()
        {
            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 entity1 = new TestModel {
                Description = "SuccessfulInsertAndFind.1"
            };
            var entity2 = new TestModel {
                Description = "SuccessfulInsertAndFind.1"
            };

            dbSet.Add(entity1);
            dbSet2.Add(entity2);

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

            Assert.IsNull(await dbSet.FindAsync(entity2.Id));
        }
        public void SuccessfulNullFind()
        {
            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 entity1 = new TestModel {
                Description = "SuccessfulInsertAndFind.1"
            };
            var entity2 = new TestModel {
                Description = "SuccessfulInsertAndFind.2"
            };

            dbSet.Add(entity1);
            dbSet2.Add(entity2);

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

            Assert.IsNull(dbSet.Find("abcd"));
        }
        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 async Task SuccessfulInsertAndFindAsync()
        {
            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 entity1 = new TestModel {
                Description = "SuccessfulInsertAndFind.1"
            };
            var entity2 = new TestModel {
                Description = "SuccessfulInsertAndFind.2"
            };

            dbSet.Add(entity1);
            dbSet2.Add(entity2);

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

            context = new MongoDbTenantContext(connection, tenantId);
            dbSet   = new MongoDbTenantSet <TestModel>(context);
            Assert.AreEqual("SuccessfulInsertAndFind.1", (await dbSet.FindAsync(entity1.Id)).Description);
            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.NoChanges, context.ChangeTracker.GetEntry(entity1).State);
        }
        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));
        }
        public void SuccessfullyRemoveEntityById()
        {
            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 entity = new TestModel
            {
                Description = "SuccessfullyRemoveEntityById"
            };

            dbSet.Add(entity);
            context.SaveChanges();

            var entity2 = new TestModel
            {
                Description = "SuccessfullyRemoveEntityById"
            };

            dbSet2.Add(entity2);
            context2.SaveChanges();

            dbSet = new MongoDbTenantSet <TestModel>(context);

            dbSet.RemoveById(entity.Id);

            //mismatched tenant, should not delete anything
            dbSet.RemoveById(entity2.Id);

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

            var entity = new TestModel
            {
                Description = "SuccessfullyBlocksUpdateChangedEntity"
            };

            dbSet.Add(entity);
            context.SaveChanges();
            entity.Description = "SuccessfullyBlocksUpdateChangedEntity-Updated";

            dbSet.Update(entity);

            //changing tenant ID after state is updated
            entity.TenantId = "qweasd";
            Assert.ThrowsException <MultiTenantException>(() => context.SaveChanges());
        }
        public void SuccessfullyRemoveEntity()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var entity = new TestModel
            {
                Description = "SuccessfullyRemoveEntity"
            };

            dbSet.Add(entity);
            context.SaveChanges();

            dbSet = new MongoDbTenantSet <TestModel>(context);

            dbSet.Remove(entity);

            Assert.IsTrue(dbSet.Any(m => m.Description == "SuccessfullyRemoveEntity"));
            context.SaveChanges();
            Assert.IsFalse(dbSet.Any(m => m.Description == "SuccessfullyRemoveEntity"));
        }
예제 #12
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());
        }
예제 #13
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());
        }
        public void SuccessfulInsertAndQueryBack()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            dbSet.Add(new TestModel
            {
                Description = "SuccessfulInsertAndQueryBack"
            });

            Assert.IsFalse(dbSet.Any(m => m.Description == "SuccessfulInsertAndQueryBack"));
            context.SaveChanges();
            Assert.IsTrue(dbSet.Any(m => m.Description == "SuccessfulInsertAndQueryBack"));
            Assert.IsTrue(dbSet.Any(m => m.TenantId == tenantId));
        }
예제 #16
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);
        }
예제 #17
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 SuccessfullyBlocksRemoveEntity()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <TestModel>(context);

            var entity = new TestModel
            {
                Description = "SuccessfullyBlocksRemoveEntity"
            };

            dbSet.Add(entity);
            context.SaveChanges();

            entity.TenantId = "qweasd";

            dbSet = new MongoDbTenantSet <TestModel>(context);

            Assert.ThrowsException <MultiTenantException>(() => dbSet.Remove(entity));
        }
        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());
        }
예제 #20
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);
        }