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