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 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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        public void InvalidRemoveArguments()
        {
            var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new Mock <IMongoDbContext>().Object, new BucketSetOptions
            {
                BucketSize         = 2,
                EntityTimeProperty = "Date"
            });

            Assert.ThrowsException <ArgumentNullException>(() => dbSet.Remove(null));
        }
        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 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 WithGroupOnEmptyBucket()
        {
            var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions
            {
                BucketSize = 2
            });

            dbSet.SetConnection(TestConfiguration.GetConnection());

            var result = dbSet.WithGroup(new EntityGroup
            {
                Name      = "Group1",
                Reference = 123
            }).Count();

            Assert.AreEqual(0, result);
        }
Beispiel #11
0
        public void WithGroupOnEmptyBucket()
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var dbSet      = new MongoDbBucketSet <EntityGroup, SubEntityClass>(context, new BucketSetOptions
            {
                BucketSize         = 2,
                EntityTimeProperty = "Date"
            });

            var result = dbSet.WithGroup(new EntityGroup
            {
                Name      = "Group1",
                Reference = 123
            }).Count();

            Assert.AreEqual(0, result);
        }
Beispiel #12
0
        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 SuccessfullyInsertAndQueryBackEntityBuckets()
        {
            var dbSet = new MongoDbBucketSet <EntityGroup, SubEntityClass>(new BucketSetOptions
            {
                BucketSize = 100
            });

            dbSet.SetConnection(TestConfiguration.GetConnection());

            dbSet.Add(new EntityGroup
            {
                Name = "Group1"
            }, new SubEntityClass
            {
                Label = "Entry1"
            });

            Assert.IsFalse(dbSet.Any(b => b.Group.Name == "Group1"));
            dbSet.SaveChanges();
            Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.Items.Any(i => i.Label == "Entry1")));
        }
Beispiel #14
0
        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));
        }
Beispiel #15
0
        public void SuccessfullyInsertAndQueryBackEntityBuckets()
        {
            var connection = TestConfiguration.GetConnection();
            var context    = new MongoDbContext(connection);
            var dbSet      = new MongoDbBucketSet <EntityGroup, SubEntityClass>(context, new BucketSetOptions
            {
                BucketSize         = 100,
                EntityTimeProperty = "Date"
            });

            dbSet.Add(new EntityGroup
            {
                Name = "Group1"
            }, new SubEntityClass
            {
                Label = "Entry1",
                Date  = new DateTime(2020, 1, 1)
            });

            Assert.IsFalse(dbSet.Any(b => b.Group.Name == "Group1"));
            context.SaveChanges();
            Assert.IsTrue(dbSet.Any(b => b.Group.Name == "Group1" && b.Items.Any(i => i.Label == "Entry1" && i.Date == new DateTime(2020, 1, 1))));
        }
Beispiel #16
0
        public void IterateQueryable()
        {
            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"
            });
            dbSet.Add(new EntityGroup
            {
                Name = "Group2"
            }, new SubEntityClass
            {
                Label = "Entry1"
            });
            dbSet.Add(new EntityGroup
            {
                Name = "Group3"
            }, new SubEntityClass
            {
                Label = "Entry1"
            });

            foreach (var bucket in dbSet)
            {
                Assert.AreEqual("Entry", bucket.Items[0].Label);
            }
        }