public void Can_Move_Page_With_Multiple_Levels_Of_Children()
{
// Given
Trie structureInfo;
// When
using (var store = this.SetupContext())
{
using (var session = store.OpenSession())
{
session.Store(new FakePage {Id = "fakepages/1", Metadata = {Name = "Start"}});
session.Store(
new FakePage
{
Id = "fakepages/2",
Parent = new PageReference("fakepages/1"),
Metadata = {Name = "Child page 1"}
}, StoreAction.Publish);
session.Store(
new FakePage
{
Id = "fakepages/3",
Parent = new PageReference("fakepages/2"),
Metadata = {Name = "Child page 2"}
}, StoreAction.Publish);
session.Store(
new FakePage
{
Id = "fakepages/4",
Parent = new PageReference("fakepages/3"),
Metadata = {Name = "Child page 3"}
}, StoreAction.Publish);
session.Store(
new FakePage
{
Id = "fakepages/5",
Parent = new PageReference("fakepages/4"),
Metadata = {Name = "Child page 4"}
}, StoreAction.Publish);
session.Store(
new FakePage
{
Id = "fakepages/6",
Parent = new PageReference("fakepages/4"),
Metadata = {Name = "Child page 5"}
}, StoreAction.Publish);
session.SaveChanges();
}
using (var session = store.OpenSession())
{
IPage fakeChild = session.Load<FakePage>("fakepages/4");
fakeChild.Parent = new PageReference("fakepages/2");
session.SaveChanges();
}
using (var session = store.OpenSession())
{
structureInfo = session.Load<Trie>(DefaultBrickPileBootstrapper.TrieId);
}
// Then
var parent = structureInfo.RootNode.Flatten(n => n.Children).Single(n => n.PageId == "fakepages/2");
var childPage3 =
structureInfo.RootNode.Flatten(n => n.Children).Single(n => n.PageId == "fakepages/4");
var childPage4 =
structureInfo.RootNode.Flatten(n => n.Children).Single(n => n.PageId == "fakepages/5");
var childPage5 =
structureInfo.RootNode.Flatten(n => n.Children).Single(n => n.PageId == "fakepages/6");
Assert.Equal(2, parent.Children.Count);
Assert.Equal("child-page-1/child-page-3", childPage3.Url);
Assert.Equal(2, childPage3.Children.Count);
Assert.Equal("child-page-1/child-page-3/child-page-4", childPage4.Url);
Assert.Equal("child-page-1/child-page-3/child-page-5", childPage5.Url);
}
}