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());
        }
Пример #3
0
        public void AttachRejectsMismatchedEntity()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <DbSetModel>(context);

            var model = new DbSetModel
            {
                Id = "abcd"
            };

            dbSet.Add(model);

            context.SaveChanges();

            ResetMongoDb();

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

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

            result.TenantId = tenantId + "a";

            Assert.ThrowsException <MultiTenantException>(() => context.Attach(result));
        }
Пример #4
0
        public void SuccessfullyAttachUntrackedEntity()
        {
            var connection = TestConfiguration.GetConnection();
            var tenantId   = TestConfiguration.GetTenantId();
            var context    = new MongoDbTenantContext(connection, tenantId);
            var dbSet      = new MongoDbTenantSet <DbSetModel>(context);

            var model = new DbSetModel
            {
                Id = "abcd"
            };

            dbSet.Add(model);

            context.SaveChanges();

            ResetMongoDb();

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

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

            context.Attach(result);

            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.NoChanges, context.ChangeTracker.GetEntry(result).State);
        }
        public async Task SuccessfullyLinqFindNoTrackingAsync()
        {
            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();

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

            var result = await dbSet.AsNoTracking().FirstOrDefaultAsync();

            Assert.IsNull(context.ChangeTracker.GetEntry(result));
        }
        public async Task SuccessfullyLinqFindTrackedAsync()
        {
            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 = await dbSet.FirstOrDefaultAsync();

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

            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.Updated, context.ChangeTracker.GetEntry(result).State);
        }
        public void SuccessfullyUpdateEntity()
        {
            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 = "SuccessfullyUpdateEntity"
            };

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

            dbSet = new MongoDbTenantSet <TestModel>(context);

            entity.Description = "SuccessfullyUpdateEntity-Updated";
            dbSet.Update(entity);

            Assert.IsFalse(dbSet.Any(m => m.Description == "SuccessfullyUpdateEntity-Updated"));
            context.SaveChanges();
            Assert.IsTrue(dbSet.Any(m => m.Description == "SuccessfullyUpdateEntity-Updated"));
            Assert.IsTrue(dbSet.First(m => m.Description == "SuccessfullyUpdateEntity-Updated").TenantId == tenantId);
        }
        public async Task SuccessfullyFindAsyncTracked()
        {
            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 model = new TestModel
            {
                Id          = "abcd",
                Description = "SuccessfullyFindTracked.1"
            };

            var model2 = new TestModel
            {
                Id          = "abcd",
                Description = "SuccessfullyFindTracked.2"
            };

            dbSet.Add(model);
            dbSet2.Add(model2);

            //Note: not saving, but still should be found as tracked
            Assert.AreEqual("SuccessfullyFindTracked.1", (await dbSet.FindAsync(model.Id)).Description);
            Assert.AreEqual("SuccessfullyFindTracked.2", (await dbSet2.FindAsync(model2.Id)).Description);
            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.Added, context.ChangeTracker.GetEntry(model).State);
            Assert.AreEqual(MongoFramework.Infrastructure.EntityEntryState.Added, context.ChangeTracker.GetEntry(model2).State);
        }
        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 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 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 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 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));
        }
        public void SuccessfullyBlocksUpdateEntity()
        {
            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 = "SuccessfullyBlocksUpdateEntity"
            };

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

            dbSet              = new MongoDbTenantSet <TestModel>(context);
            entity.TenantId    = "qweasd";
            entity.Description = "SuccessfullyBlocksUpdateEntity-Updated";
            Assert.ThrowsException <MultiTenantException>(() => dbSet.Update(entity));
        }
        public async Task SuccessfullyRemoveEntityByIdAsync()
        {
            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 = "SuccessfullyRemoveEntityByIdAsync"
            };

            dbSet.Add(entity);
            await context.SaveChangesAsync();

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

            dbSet2.Add(entity2);
            await context2.SaveChangesAsync();

            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 == "SuccessfullyRemoveEntityByIdAsync"));
            Assert.IsTrue(dbSet2.Any(m => m.Description == "SuccessfullyRemoveEntityByIdAsync"));
            await context.SaveChangesAsync();

            Assert.IsFalse(dbSet.Any(m => m.Description == "SuccessfullyRemoveEntityByIdAsync"));
            Assert.IsTrue(dbSet2.Any(m => m.Description == "SuccessfullyRemoveEntityByIdAsync"));
        }
Пример #16
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);
        }