public void DistinctGroups() { var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions { BucketSize = 2, EntityTimeProperty = "Date" }); dbSet.SetConnection(TestConfiguration.GetConnection()); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry1", Date = new DateTime(2020, 1, 1) }, new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 2) }, new SubEntityClass { Label = "Entry3", Date = new DateTime(2020, 1, 3) } }); dbSet.AddRange(new EntityGroup { Name = "Group2" }, new[] { new SubEntityClass { Label = "Entry1", Date = new DateTime(2020, 1, 1) }, new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 2) }, new SubEntityClass { Label = "Entry3", Date = new DateTime(2020, 1, 3) } }); dbSet.SaveChanges(); Assert.AreEqual(4, dbSet.Count()); var results = dbSet.Groups().OrderBy(g => g.Name).ToArray(); Assert.AreEqual(2, results.Length); Assert.AreEqual("Group1", results[0].Name); Assert.AreEqual("Group2", results[1].Name); }
public void InvalidAddArguments() { var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions { BucketSize = 2 }); Assert.ThrowsException <ArgumentNullException>(() => dbSet.Add(null, new SubEntityClass())); Assert.ThrowsException <ArgumentNullException>(() => dbSet.AddRange(null, null)); Assert.ThrowsException <ArgumentNullException>(() => dbSet.AddRange(new EntityGroup(), null)); }
public void InvalidAddArguments() { var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new Mock <IMongoDbContext>().Object, new BucketSetOptions { BucketSize = 2, EntityTimeProperty = "Date" }); Assert.ThrowsException <ArgumentNullException>(() => dbSet.Add(null, new SubEntityClass())); Assert.ThrowsException <ArgumentNullException>(() => dbSet.AddRange(null, null)); Assert.ThrowsException <ArgumentNullException>(() => dbSet.AddRange(new EntityGroup(), null)); }
public void FillIntoAdditionalBuckets() { var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions { BucketSize = 2 }); dbSet.SetConnection(TestConfiguration.GetConnection()); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry1" }, new SubEntityClass { Label = "Entry2" }, new SubEntityClass { Label = "Entry2" } }); Assert.IsFalse(dbSet.Any(b => b.Group.Name == "Group1")); dbSet.SaveChanges(); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 2)); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 1)); }
public void ValueTypeSubEntity() { var dbSet = new MongoDbBucketSet <EntityGroup, int>(new BucketSetOptions { BucketSize = 2 }); dbSet.SetConnection(TestConfiguration.GetConnection()); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { 2, 4, 6, 8, 10 }); dbSet.SaveChanges(); Assert.AreEqual(3, dbSet.Count()); var results = dbSet.WithGroup(new EntityGroup { Name = "Group1" }).ToArray(); Assert.AreEqual(5, results.Length); Assert.AreEqual(2, results[0]); Assert.AreEqual(4, results[1]); Assert.AreEqual(6, results[2]); Assert.AreEqual(8, results[3]); Assert.AreEqual(10, results[4]); }
public void ContinuousSubEntityAccessAcrossBuckets() { var connection = TestConfiguration.GetConnection(); var context = new MongoDbContext(connection); var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(context, new BucketSetOptions { BucketSize = 2, EntityTimeProperty = "Date" }); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry1", Date = new DateTime(2020, 1, 1) }, new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 2) }, new SubEntityClass { Label = "Entry3", Date = new DateTime(2020, 1, 3) }, new SubEntityClass { Label = "Entry4", Date = new DateTime(2020, 1, 4) }, new SubEntityClass { Label = "Entry5", Date = new DateTime(2020, 1, 5) } }); context.SaveChanges(); Assert.AreEqual(3, dbSet.Count()); var results = dbSet.WithGroup(new EntityGroup { Name = "Group1" }).ToArray(); Assert.AreEqual(5, results.Length); Assert.AreEqual("Entry1", results[0].Label); Assert.AreEqual("Entry2", results[1].Label); Assert.AreEqual("Entry3", results[2].Label); Assert.AreEqual("Entry4", results[3].Label); Assert.AreEqual("Entry5", results[4].Label); }
public void BackfillIntoExistingBucket() { var connection = TestConfiguration.GetConnection(); var context = new MongoDbContext(connection); var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(context, new BucketSetOptions { BucketSize = 2, EntityTimeProperty = "Date" }); dbSet.Add(new EntityGroup { Name = "Group1" }, new SubEntityClass { Label = "Entry1", Date = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc) }); context.SaveChanges(); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 1)); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 2, 0, 0, 0, DateTimeKind.Utc) }, new SubEntityClass { Label = "Entry3", Date = new DateTime(2020, 1, 3, 0, 0, 0, DateTimeKind.Utc) } }); context.SaveChanges(); var buckets = dbSet.Where(b => b.Group.Name == "Group1").ToArray(); Assert.AreEqual(2, buckets.Count()); var backfilledBucket = buckets[0]; Assert.AreEqual(new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc), backfilledBucket.Min); Assert.AreEqual(new DateTime(2020, 1, 2, 0, 0, 0, DateTimeKind.Utc), backfilledBucket.Max); Assert.AreEqual(2, backfilledBucket.ItemCount); Assert.AreEqual("Entry1", backfilledBucket.Items[0].Label); Assert.AreEqual("Entry2", backfilledBucket.Items[1].Label); var additionalBucket = buckets[1]; Assert.AreEqual(new DateTime(2020, 1, 3, 0, 0, 0, DateTimeKind.Utc), additionalBucket.Min); Assert.AreEqual(new DateTime(2020, 1, 3, 0, 0, 0, DateTimeKind.Utc), additionalBucket.Max); Assert.AreEqual(1, additionalBucket.ItemCount); Assert.AreEqual("Entry3", additionalBucket.Items[0].Label); }
public void ContinuousSubEntityAccessAcrossBuckets() { var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions { BucketSize = 2 }); dbSet.SetConnection(TestConfiguration.GetConnection()); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry1" }, new SubEntityClass { Label = "Entry2" }, new SubEntityClass { Label = "Entry3" }, new SubEntityClass { Label = "Entry4" }, new SubEntityClass { Label = "Entry5" } }); dbSet.SaveChanges(); Assert.AreEqual(3, dbSet.Count()); var results = dbSet.WithGroup(new EntityGroup { Name = "Group1" }).ToArray(); Assert.AreEqual(5, results.Length); Assert.AreEqual("Entry1", results[0].Label); Assert.AreEqual("Entry2", results[1].Label); Assert.AreEqual("Entry3", results[2].Label); Assert.AreEqual("Entry4", results[3].Label); Assert.AreEqual("Entry5", results[4].Label); }
public void BackfillIntoExistingBucket() { var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions { BucketSize = 2 }); dbSet.SetConnection(TestConfiguration.GetConnection()); dbSet.Add(new EntityGroup { Name = "Group1" }, new SubEntityClass { Label = "Entry1" }); dbSet.SaveChanges(); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 1)); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry2" }, new SubEntityClass { Label = "Entry3" } }); dbSet.SaveChanges(); var buckets = dbSet.Where(b => b.Group.Name == "Group1").ToArray(); Assert.AreEqual(2, buckets.Count()); var backfilledBucket = buckets.FirstOrDefault(); Assert.AreEqual(2, backfilledBucket.ItemCount); Assert.AreEqual("Entry1", backfilledBucket.Items[0].Label); Assert.AreEqual("Entry2", backfilledBucket.Items[1].Label); var additionalBucket = buckets.LastOrDefault(); Assert.AreEqual(1, additionalBucket.ItemCount); Assert.AreEqual("Entry3", additionalBucket.Items[0].Label); }
public void RemoveBucket() { var connection = TestConfiguration.GetConnection(); var context = new MongoDbContext(connection); var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(context, new BucketSetOptions { BucketSize = 2, EntityTimeProperty = "Date" }); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry1", Date = new DateTime(2020, 1, 1) }, new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 2) }, new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 3) } }); Assert.IsFalse(dbSet.Any(b => b.Group.Name == "Group1")); context.SaveChanges(); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 2)); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 1)); dbSet.Remove(new EntityGroup { Name = "Group1" }); context.SaveChanges(); Assert.IsFalse(dbSet.Any(b => b.Group.Name == "Group1")); }
public void FillIntoAdditionalBuckets() { var connection = TestConfiguration.GetConnection(); var context = new MongoDbContext(connection); var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(context, new BucketSetOptions { BucketSize = 2, EntityTimeProperty = "Date" }); dbSet.AddRange(new EntityGroup { Name = "Group1" }, new[] { new SubEntityClass { Label = "Entry1", Date = new DateTime(2020, 1, 1) }, new SubEntityClass { Label = "Entry2", Date = new DateTime(2020, 1, 2) }, new SubEntityClass { Label = "Entry3", Date = new DateTime(2020, 1, 3) } }); var a = MongoFramework.Infrastructure.Mapping.EntityMapping.GetOrCreateDefinition(typeof(EntityBucket <EntityGroup, SubEntityClass>)); var cb = MongoDB.Bson.Serialization.BsonClassMap.LookupClassMap(typeof(EntityBucket <EntityGroup, SubEntityClass>)); Assert.IsFalse(dbSet.Any(b => b.Group.Name == "Group1")); context.SaveChanges(); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 2)); Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.ItemCount == 1)); }