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 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)); }
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")); }
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); }