diff --git a/src/WhiteMagic.Tests/ContentRepository/when_getting_ancestors.cs b/src/WhiteMagic.Tests/ContentRepository/when_getting_ancestors.cs new file mode 100644 index 0000000..b2e16c0 --- /dev/null +++ b/src/WhiteMagic.Tests/ContentRepository/when_getting_ancestors.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using System.Linq; +using EPiServer.Core; +using NUnit.Framework; +using Shouldly; +using WhiteMagic.Tests.Pages; + +namespace WhiteMagic.Tests.ContentRepository +{ + public class when_getting_ancestors : TestBase + { + private PageReference _pageToUseRef; + private IEnumerable _ancestors; + + public override void Given() + { + base.Given(); + + var startPageReference = ContentRepository.Publish(ContentReference.RootPage, "StartPage"); + var childPage1Reference = ContentRepository.Publish(startPageReference, "ChildPage1"); + var childPage1ChildPage1Reference = ContentRepository.Publish(childPage1Reference, "ChildPage1-ChildPage1"); + + _pageToUseRef = ContentRepository.Publish(childPage1ChildPage1Reference, "ChildPage1-ChildPage3-ChildPage1"); + } + + public override void When() + { + base.When(); + _ancestors = ContentRepository.GetAncestors(_pageToUseRef); + } + + [Test] + public void it_should_return_the_correct_number_of_pages() + { + _ancestors.Count().ShouldBe(4); + } + + [Test] + public void it_should_return_the_pages_in_order_of_distance_to_origin() + { + _ancestors.ElementAt(0).Name.ShouldBe("ChildPage1-ChildPage1"); + _ancestors.ElementAt(1).Name.ShouldBe("ChildPage1"); + _ancestors.ElementAt(2).Name.ShouldBe("StartPage"); + _ancestors.ElementAt(3).Name.ShouldBe("RootPage"); + } + } + + public class when_getting_ancestors_for_the_root_page : TestBase + { + private IEnumerable _ancestors; + + //public override void Given() + //{ + // base.Given(); + + // var startPageReference = ContentRepository.Publish(ContentReference.RootPage, "StartPage"); + // var childPage1Reference = ContentRepository.Publish(startPageReference, "ChildPage1"); + // var childPage1ChildPage1Reference = ContentRepository.Publish(childPage1Reference, "ChildPage1-ChildPage1"); + + // _pageToUseRef = ContentRepository.Publish(childPage1ChildPage1Reference, "ChildPage1-ChildPage3-ChildPage1"); + //} + + public override void When() + { + base.When(); + _ancestors = ContentRepository.GetAncestors(ContentReference.RootPage); + } + + [Test] + public void it_should_not_have_any_ancestors() + { + _ancestors.Count().ShouldBe(0); + } + } +} \ No newline at end of file diff --git a/src/WhiteMagic.Tests/ContentRepository/when_getting_children.cs b/src/WhiteMagic.Tests/ContentRepository/when_getting_children.cs index e05b8bc..92b2b7c 100644 --- a/src/WhiteMagic.Tests/ContentRepository/when_getting_children.cs +++ b/src/WhiteMagic.Tests/ContentRepository/when_getting_children.cs @@ -81,4 +81,35 @@ public void it_should_throw_a_page_not_found_exception() Assert.Throws(() => ContentRepository.GetChildren(new ContentReference(1000))); } } + + public class when_getting_children_of_a_page_that_has_no_children : TestBase + { + private PageReference _startPageReference; + private PageReference _childPage1Reference; + private IEnumerable _children; + + public override void Given() + { + base.Given(); + + _startPageReference = ContentRepository.Publish(ContentReference.RootPage); + + //_childPage1Reference = ContentRepository.Publish(_startPageReference, "ChildPage1"); + //ContentRepository.Publish(_startPageReference, "ChildPage2"); + //ContentRepository.Publish(_startPageReference, "ChildPage3"); + //ContentRepository.Publish(_childPage1Reference, "ChildPage1-ChildPage1"); + } + + public override void When() + { + base.When(); + _children = ContentRepository.GetChildren(_startPageReference); + } + + [Test] + public void it_should_not_return_any_children() + { + _children.Count().ShouldBe(0); + } + } } \ No newline at end of file diff --git a/src/WhiteMagic.Tests/ContentRepository/when_getting_descendents.cs b/src/WhiteMagic.Tests/ContentRepository/when_getting_descendents.cs new file mode 100644 index 0000000..48b02a4 --- /dev/null +++ b/src/WhiteMagic.Tests/ContentRepository/when_getting_descendents.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using EPiServer.Core; +using NUnit.Framework; +using Shouldly; +using WhiteMagic.Tests.Pages; + +namespace WhiteMagic.Tests.ContentRepository +{ + public class when_getting_descendents : TestBase + { + protected PageReference StartPageReference; + protected PageReference ChildPage3Reference; + protected PageReference ChildPage3ChildPage3Reference; + protected IEnumerable Descendants; + + public override void Given() + { + base.Given(); + + StartPageReference = ContentRepository.Publish(ContentReference.RootPage); + + ContentRepository.Publish(StartPageReference, "ChildPage1"); + ContentRepository.Publish(StartPageReference, "ChildPage2"); + ChildPage3Reference = ContentRepository.Publish(StartPageReference, "ChildPage3"); + + ContentRepository.Publish(ChildPage3Reference, "ChildPage3-ChildPage1"); + ContentRepository.Publish(ChildPage3Reference, "ChildPage3-ChildPage2"); + ChildPage3ChildPage3Reference = ContentRepository.Publish(ChildPage3Reference, "ChildPage3-ChildPage3"); + + ContentRepository.Publish(ChildPage3ChildPage3Reference, "ChildPage3-ChildPage3-ChildPage1"); + ContentRepository.Publish(ChildPage3ChildPage3Reference, "ChildPage3-ChildPage3-ChildPage2"); + ContentRepository.Publish(ChildPage3ChildPage3Reference, "ChildPage3-ChildPage3-ChildPage3"); + } + } + + public class when_getting_descendents_from_start_page : when_getting_descendents + { + public override void When() + { + base.When(); + Descendants = ContentRepository.GetDescendents(ContentReference.RootPage); + } + + [Test] + public void it_should_return_the_correct_number_of_descendants_including_the_waste_basket_page() + { + Descendants.Count().ShouldBe(11); + } + } + + public class when_getting_descendents_from_page_deeper_in_structure : when_getting_descendents + { + + public override void When() + { + base.When(); + Descendants = ContentRepository.GetDescendents(ChildPage3Reference); + } + + [Test] + public void it_should_return_the_correct_number_of_descendants() + { + Descendants.Count().ShouldBe(6); + } + } +} diff --git a/src/WhiteMagic.Tests/InMemoryContentRepository.cs b/src/WhiteMagic.Tests/InMemoryContentRepository.cs index 6943441..78e6882 100644 --- a/src/WhiteMagic.Tests/InMemoryContentRepository.cs +++ b/src/WhiteMagic.Tests/InMemoryContentRepository.cs @@ -116,12 +116,35 @@ public IEnumerable GetChildren(ContentReference contentLink, ILanguageSele public IEnumerable GetDescendents(ContentReference contentLink) { - throw new NotImplementedException(); + var descendents = new List(); + + foreach (var child in GetChildren(contentLink)) + { + descendents.Add(child.ContentLink); + descendents.AddRange(GetDescendents(child.ContentLink)); + } + + return descendents; } public IEnumerable GetAncestors(ContentReference contentLink) { - throw new NotImplementedException(); + if (contentLink.CompareToIgnoreWorkID(ContentReference.RootPage)) + { + yield break; + } + + var parent = Get(Get(contentLink.ToPageReference()).ParentLink); + + yield return parent; + + if (!parent.ContentLink.CompareToIgnoreWorkID(ContentReference.RootPage)) + { + foreach (var ancestor in GetAncestors(parent.ContentLink)) + { + yield return ancestor; + } + } } public IEnumerable GetItems(IEnumerable contentLinks, ILanguageSelector selector) @@ -189,6 +212,11 @@ private PageDataCollection GetChildren(PageReference pageLink, int startIndex, i { var children = new List(); + if (!_pages.ContainsKey(pageLink)) + { + throw new PageNotFoundException(pageLink); + } + List childrenRefs; if (_structure.TryGetValue(pageLink, out childrenRefs)) { @@ -207,11 +235,7 @@ private PageDataCollection GetChildren(PageReference pageLink, int startIndex, i children.Add(GetPage(link)); } } - else - { - throw new PageNotFoundException(pageLink); - } - + return new PageDataCollection(children); } diff --git a/src/WhiteMagic.Tests/WhiteMagic.Tests.csproj b/src/WhiteMagic.Tests/WhiteMagic.Tests.csproj index 3b2cf08..c98a796 100644 --- a/src/WhiteMagic.Tests/WhiteMagic.Tests.csproj +++ b/src/WhiteMagic.Tests/WhiteMagic.Tests.csproj @@ -153,8 +153,10 @@ + +