Beispiel #1
0
        public void ChildrenOfGroupHaveCorrectParentID()
        {
            using (var conn = CreateConnection()) {
                ResetDatabase(conn);

                var repo  = CreateRepository(conn);
                var group = repo.Create()
                            .SetField(Guid.NewGuid(), m => m.ID)
                            .SetField("default", m => m.Tenant)
                            .SetField("test name", m => m.Name)
                            .SetField(DateTime.Now, m => m.Created)
                            .SetField(DateTime.Now, m => m.LastUpdated);

                var child1 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                var child2 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                group.CallMethod("AddChild", new object[] { child1 });
                group.CallMethod("AddChild", new object[] { child2 });

                repo.Add(group);

                var groupCount = conn.Query <int>("select count(*) from Groups").FirstOrDefault();
                Assert.Equal(1, groupCount);

                var groupKey = conn.Query <int>("select [Key] from Groups").FirstOrDefault();
                Assert.NotEqual(0, groupKey);

                var groupChildCount = conn.Query <int>("select count(*) from GroupChilds where [ParentKey] = @key", new { key = groupKey }).FirstOrDefault();
                Assert.Equal(2, groupChildCount);

                var parentKeys = conn.Query <int>("select [ParentKey] from GroupChilds");
                Assert.Equal(new int[] { groupKey, groupKey }, parentKeys);
            }
        }
Beispiel #2
0
        public void CanAddNewGroupWithChildren()
        {
            using (var conn = CreateConnection()) {
                ResetDatabase(conn);

                var repo  = CreateRepository(conn);
                var group = repo.Create()
                            .SetField(Guid.NewGuid(), m => m.ID)
                            .SetField("default", m => m.Tenant)
                            .SetField("test name", m => m.Name)
                            .SetField(DateTime.Now, m => m.Created)
                            .SetField(DateTime.Now, m => m.LastUpdated);

                var child1 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                var child2 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                group.CallMethod("AddChild", new object[] { child1 });
                group.CallMethod("AddChild", new object[] { child2 });

                repo.Add(group);

                var groupCount = conn.Query <int>("select count(*) from Groups").FirstOrDefault();
                Assert.Equal(1, groupCount);

                var groupChildCount = conn.Query <int>("select count(*) from GroupChilds").FirstOrDefault();
                Assert.Equal(2, groupChildCount);
            }
        }
Beispiel #3
0
        public void CanUpdateGroupWithNewChildren()
        {
            using (var conn = CreateConnection()) {
                ResetDatabase(conn);

                var repo  = CreateRepository(conn);
                var group = repo.Create()
                            .SetField(Guid.NewGuid(), m => m.ID)
                            .SetField("default", m => m.Tenant)
                            .SetField("name", m => m.Name)
                            .SetField(DateTime.Now, m => m.Created)
                            .SetField(DateTime.Now, m => m.LastUpdated);

                var child1 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                var child2 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                group.CallMethod("AddChild", new object[] { child1 });
                group.CallMethod("AddChild", new object[] { child2 });

                repo.Add(group);

                var groupFromDb = repo.GetByID(group.ID);
                Assert.NotNull(groupFromDb);
                Assert.Equal(group.ID, groupFromDb.ID);
                Assert.Equal(group.Tenant, groupFromDb.Tenant);
                Assert.Equal(group.Name, groupFromDb.Name);
                Assert.Equal(group.Created, groupFromDb.Created, DateTimeComparer);
                Assert.Equal(group.LastUpdated, groupFromDb.LastUpdated, DateTimeComparer);

                Assert.NotNull(groupFromDb.Children);
                Assert.Equal(2, groupFromDb.Children.Count());
                foreach (var child in groupFromDb.ChildrenCollection)
                {
                    Assert.NotNull(child);
                    Assert.Equal(groupFromDb.Key, child.ParentKey);
                }

                var child3 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                var child4 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                groupFromDb.CallMethod("AddChild", new object[] { child3 });
                groupFromDb.CallMethod("AddChild", new object[] { child4 });

                repo.Update(groupFromDb);

                groupFromDb = repo.GetByID(groupFromDb.ID);
                Assert.NotNull(groupFromDb);

                Assert.NotNull(groupFromDb.Children);
                Assert.Equal(4, groupFromDb.Children.Count());
                foreach (var child in groupFromDb.ChildrenCollection)
                {
                    Assert.NotNull(child);
                    Assert.Equal(groupFromDb.Key, child.ParentKey);
                }
            }
        }
Beispiel #4
0
        protected override void AddChild(GroupChild child)
        {
            var groupChild = new NhGroupChild();

            groupChild.GetType().GetProperty("ChildGroupID").SetValue(groupChild, child.ChildGroupID);
            groupChild.GetType().GetProperty("Group").SetValue(groupChild, this);
            this.ChildrenCollection.Add(groupChild);
        }
Beispiel #5
0
        public void CanUpdateGroupChild()
        {
            using (var conn = CreateConnection()) {
                ResetDatabase(conn);

                var initialID = Guid.NewGuid();
                var changedID = Guid.NewGuid();

                var repo  = CreateRepository(conn);
                var group = repo.Create()
                            .SetField(Guid.NewGuid(), m => m.ID)
                            .SetField("default", m => m.Tenant)
                            .SetField("name", m => m.Name)
                            .SetField(DateTime.Now, m => m.Created)
                            .SetField(DateTime.Now, m => m.LastUpdated);

                var child1 = new GroupChild()
                             .SetField(initialID, m => m.ChildGroupID);
                group.CallMethod("AddChild", new object[] { child1 });

                repo.Add(group);

                var groupFromDb = repo.GetByID(group.ID);
                Assert.NotNull(groupFromDb);
                Assert.Equal(group.ID, groupFromDb.ID);
                Assert.Equal(group.Tenant, groupFromDb.Tenant);
                Assert.Equal(group.Name, groupFromDb.Name);
                Assert.Equal(group.Created, groupFromDb.Created, DateTimeComparer);
                Assert.Equal(group.LastUpdated, groupFromDb.LastUpdated, DateTimeComparer);

                Assert.NotNull(groupFromDb.Children);
                Assert.Single(groupFromDb.Children);
                var child = (RelationalGroupChild)groupFromDb.Children.First();
                Assert.NotNull(child);
                Assert.Equal(groupFromDb.Key, child.ParentKey);
                Assert.Equal(initialID, child.ChildGroupID);
                var childKey = child.Key;

                child.SetField(changedID, m => m.ChildGroupID);

                repo.Update(groupFromDb);

                groupFromDb = repo.GetByID(groupFromDb.ID);
                Assert.NotNull(groupFromDb);

                Assert.NotNull(groupFromDb.Children);
                Assert.Single(groupFromDb.Children);
                child = (RelationalGroupChild)groupFromDb.Children.First();
                Assert.NotNull(child);
                Assert.Equal(childKey, child.Key);
                Assert.Equal(groupFromDb.Key, child.ParentKey);
                Assert.Equal(changedID, child.ChildGroupID);
            }
        }
Beispiel #6
0
        public void DeletingGroupDeletesChildren()
        {
            using (var conn = CreateConnection()) {
                ResetDatabase(conn);

                var repo  = CreateRepository(conn);
                var group = repo.Create()
                            .SetField(Guid.NewGuid(), m => m.ID)
                            .SetField("default", m => m.Tenant)
                            .SetField("name", m => m.Name)
                            .SetField(DateTime.Now, m => m.Created)
                            .SetField(DateTime.Now, m => m.LastUpdated);

                var child1 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                var child2 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                group.CallMethod("AddChild", new object[] { child1 });
                group.CallMethod("AddChild", new object[] { child2 });

                repo.Add(group);

                var groupFromDb = repo.GetByID(group.ID);
                Assert.NotNull(groupFromDb);
                var key = groupFromDb.Key;

                var childCount = conn.Query <int>("select count(*) from GroupChilds where [ParentKey] = @key", new { key = key }).First();
                Assert.Equal(2, childCount);

                repo.Remove(groupFromDb);

                groupFromDb = repo.GetByID(group.ID);
                Assert.Null(groupFromDb);

                childCount = conn.Query <int>("select count(*) from GroupChilds where [ParentKey] = @key", new { key = key }).First();
                Assert.Equal(0, childCount);
            }
        }
Beispiel #7
0
        public void CanAddUpdateAndRemoveGroupChildren()
        {
            using (var conn = CreateConnection()) {
                ResetDatabase(conn);

                var initialID = Guid.NewGuid();
                var changedID = Guid.NewGuid();

                var repo  = CreateRepository(conn);
                var group = repo.Create()
                            .SetField(Guid.NewGuid(), m => m.ID)
                            .SetField("default", m => m.Tenant)
                            .SetField("name", m => m.Name)
                            .SetField(DateTime.Now, m => m.Created)
                            .SetField(DateTime.Now, m => m.LastUpdated);

                var child1 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                var child2 = new GroupChild()
                             .SetField(initialID, m => m.ChildGroupID);
                group.CallMethod("AddChild", new object[] { child1 });
                group.CallMethod("AddChild", new object[] { child2 });

                repo.Add(group);

                var groupFromDb = repo.GetByID(group.ID);
                Assert.NotNull(groupFromDb);
                Assert.Equal(group.ID, groupFromDb.ID);
                Assert.Equal(group.Tenant, groupFromDb.Tenant);
                Assert.Equal(group.Name, groupFromDb.Name);
                Assert.Equal(group.Created, groupFromDb.Created, DateTimeComparer);
                Assert.Equal(group.LastUpdated, groupFromDb.LastUpdated, DateTimeComparer);

                Assert.NotNull(groupFromDb.Children);
                Assert.Equal(2, groupFromDb.Children.Count());
                foreach (var child in groupFromDb.ChildrenCollection)
                {
                    Assert.NotNull(child);
                    Assert.Equal(groupFromDb.Key, child.ParentKey);
                }

                var firstChild = groupFromDb.Children.First();
                groupFromDb.CallMethod("RemoveChild", new object[] { firstChild });

                var secondChild = (RelationalGroupChild)groupFromDb.Children.First(); // other remove above
                secondChild.SetField(changedID, m => m.ChildGroupID);

                var child3 = new GroupChild()
                             .SetField(Guid.NewGuid(), m => m.ChildGroupID);
                groupFromDb.CallMethod("AddChild", new object[] { child3 });

                repo.Update(groupFromDb);

                groupFromDb = repo.GetByID(groupFromDb.ID);
                Assert.NotNull(groupFromDb);

                Assert.NotNull(groupFromDb.Children);
                Assert.Equal(2, groupFromDb.Children.Count());
                foreach (var child in groupFromDb.ChildrenCollection)
                {
                    Assert.NotNull(child);
                    Assert.Equal(groupFromDb.Key, child.ParentKey);
                    if (child.Key == secondChild.Key)
                    {
                        Assert.Equal(changedID, child.ChildGroupID);
                    }
                }
            }
        }
 protected override void RemoveChild(GroupChild child)
 {
     var removed = this.ChildrenCollection.SingleOrDefault(x => x.ChildGroupID == child.ChildGroupID);
     this.ChildrenCollection.Remove(removed);
 }
 protected override void AddChild(GroupChild child)
 {
     var groupChild = new NhGroupChild();
     groupChild.GetType().GetProperty("ChildGroupID").SetValue(groupChild, child.ChildGroupID);
     groupChild.GetType().GetProperty("Group").SetValue(groupChild, this);
     this.ChildrenCollection.Add(groupChild);
 }
Beispiel #10
0
        protected override void RemoveChild(GroupChild child)
        {
            var removed = this.ChildrenCollection.SingleOrDefault(x => x.ChildGroupID == child.ChildGroupID);

            this.ChildrenCollection.Remove(removed);
        }