From 5496b0985de3825d6f8fa18ee3a2a91f1cfcf085 Mon Sep 17 00:00:00 2001 From: Stefan Forsberg Date: Wed, 20 Mar 2013 09:42:16 +0100 Subject: [PATCH] When loading a page you work against you recieve a copy of the stored page --- src/WhiteMagic.Tests/ContentExtensions.cs | 4 +-- .../when_getting_children_by_page_type.cs | 13 +++---- .../ContentRepository/when_moving_a_page.cs | 16 ++++----- .../ContentRepository/when_saving_a_page.cs | 36 +++++++++++++++++-- .../ContentRepositoryExtensions.cs | 4 +-- .../InMemoryContentRepository.cs | 2 +- 6 files changed, 53 insertions(+), 22 deletions(-) diff --git a/src/WhiteMagic.Tests/ContentExtensions.cs b/src/WhiteMagic.Tests/ContentExtensions.cs index a4edf8b..87a6e05 100644 --- a/src/WhiteMagic.Tests/ContentExtensions.cs +++ b/src/WhiteMagic.Tests/ContentExtensions.cs @@ -8,10 +8,10 @@ namespace WhiteMagic.Tests { public static class ContentExtensions { - public static T SaveAndPublish(this T page, IContentRepository repository) where T : IContent + public static PageReference SaveAndPublish(this T page, IContentRepository repository) where T : IContent { repository.Save(page, SaveAction.Publish, AccessLevel.NoAccess); - return page; + return page.ContentLink.ToPageReference(); } public static T With(this T page, Action with) where T : IContent diff --git a/src/WhiteMagic.Tests/ContentRepository/when_getting_children_by_page_type.cs b/src/WhiteMagic.Tests/ContentRepository/when_getting_children_by_page_type.cs index fd0bd5b..b36107f 100644 --- a/src/WhiteMagic.Tests/ContentRepository/when_getting_children_by_page_type.cs +++ b/src/WhiteMagic.Tests/ContentRepository/when_getting_children_by_page_type.cs @@ -11,24 +11,25 @@ namespace WhiteMagic.Tests.ContentRepository { public class when_getting_children_by_page_type : TestBase { - StartPage _startPage; + IEnumerable _children; + private PageReference _startPageReference; public override void Given() { base.Given(); - _startPage = ContentRepository.Publish(ContentReference.RootPage); + _startPageReference = ContentRepository.Publish(ContentReference.RootPage); - ContentRepository.Publish(_startPage.PageLink, "ChildPage1"); - ContentRepository.Publish(_startPage.PageLink, "ChildPage2"); - ContentRepository.Publish(_startPage.PageLink, "ChildPage3"); + ContentRepository.Publish(_startPageReference, "ChildPage1"); + ContentRepository.Publish(_startPageReference, "ChildPage2"); + ContentRepository.Publish(_startPageReference, "ChildPage3"); } public override void When() { base.When(); - _children = ContentRepository.GetChildren(_startPage.PageLink); + _children = ContentRepository.GetChildren(_startPageReference); } [Test] diff --git a/src/WhiteMagic.Tests/ContentRepository/when_moving_a_page.cs b/src/WhiteMagic.Tests/ContentRepository/when_moving_a_page.cs index 56c98ba..be6b949 100644 --- a/src/WhiteMagic.Tests/ContentRepository/when_moving_a_page.cs +++ b/src/WhiteMagic.Tests/ContentRepository/when_moving_a_page.cs @@ -10,20 +10,20 @@ namespace WhiteMagic.Tests.ContentRepository { public class when_moving_a_page : TestBase { - StartPage _startPage; - StartPage _oldParent; StartPage _newParent; StartPage _pageToMove; + private PageReference _startPageReference; + private PageReference _oldParentReference; public override void Given() { base.Given(); - _startPage = ContentRepository + _startPageReference = ContentRepository .Publish(ContentReference.RootPage); - _oldParent = ContentRepository - .GetDefault(_startPage.PageLink) + _oldParentReference = ContentRepository + .GetDefault(_startPageReference) .With(p => { p.PageName = "OldParent"; @@ -31,12 +31,12 @@ public override void Given() }) .SaveAndPublish(ContentRepository); - _newParent = ContentRepository.GetDefault(_startPage.PageLink); + _newParent = ContentRepository.GetDefault(_startPageReference); _newParent.PageName = "NewParent"; _newParent.LinkURL = "newparent"; ContentRepository.Save(_newParent, SaveAction.Publish, AccessLevel.NoAccess); - _pageToMove = ContentRepository.GetDefault(_oldParent.PageLink); + _pageToMove = ContentRepository.GetDefault(_oldParentReference); _pageToMove.PageName = "PageToMove"; ContentRepository.Save(_pageToMove, SaveAction.Publish, AccessLevel.NoAccess); } @@ -66,7 +66,7 @@ public void it_should_be_returned_when_getting_children_for_new_parent() public void it_should_not_be_returned_when_getting_children_for_old_parent() { ContentRepository - .GetChildren(_oldParent.PageLink) + .GetChildren(_oldParentReference) .ShouldNotContain(p => p.PageName == "PageToMove"); } diff --git a/src/WhiteMagic.Tests/ContentRepository/when_saving_a_page.cs b/src/WhiteMagic.Tests/ContentRepository/when_saving_a_page.cs index 3e8eead..5d3c8da 100644 --- a/src/WhiteMagic.Tests/ContentRepository/when_saving_a_page.cs +++ b/src/WhiteMagic.Tests/ContentRepository/when_saving_a_page.cs @@ -7,20 +7,21 @@ namespace WhiteMagic.Tests.ContentRepository { public class when_saving_a_page : TestBase { - private StartPage _startPage; private StartPage _loadedPage; + private PageReference _startPageReference; public override void Given() { base.Given(); - _startPage = ContentRepository + _startPageReference = ContentRepository .Publish(ContentReference.RootPage, p => p.MainBody = "Hejhej!"); } public override void When() { base.When(); - _loadedPage = ContentRepository.Get(_startPage.PageLink); + + _loadedPage = ContentRepository.Get(_startPageReference); } [Test] @@ -30,4 +31,33 @@ public void it_should_be_returned_when_loaded() } } + + public class when_editing_an_existing_page_without_saving_it : TestBase + { + private PageReference _startPageReference; + + public override void Given() + { + base.Given(); + _startPageReference = ContentRepository + .Publish(ContentReference.RootPage, p => p.MainBody = "Hejhej!"); + } + + public override void When() + { + base.When(); + + var startPage = ContentRepository.Get(_startPageReference); + startPage.MainBody = "An edited mainbody"; + } + + [Test] + public void it_should_not_return_a_value_set_when_page_is_not_saved_afterwards() + { + ContentRepository + .Get(_startPageReference) + .MainBody + .ShouldBe("Hejhej!"); + } + } } \ No newline at end of file diff --git a/src/WhiteMagic.Tests/ContentRepositoryExtensions.cs b/src/WhiteMagic.Tests/ContentRepositoryExtensions.cs index 8fd0c44..edff558 100644 --- a/src/WhiteMagic.Tests/ContentRepositoryExtensions.cs +++ b/src/WhiteMagic.Tests/ContentRepositoryExtensions.cs @@ -11,12 +11,12 @@ public static class ContentRepositoryExtensions public static readonly Guid RootPageGuid = new Guid("945D02B0-B744-4349-A995-87CE3FCD51F4"); public static readonly Guid WasteBasketGuid = new Guid("27D4C717-4ABC-4DC4-B3A1-5008F311E301"); - public static T Publish(this IContentRepository contentRepository, ContentReference parent, string pageName = "") where T : IContent + public static PageReference Publish(this IContentRepository contentRepository, ContentReference parent, string pageName = "") where T : IContent { return contentRepository.Publish(parent, p => p.Name = pageName); } - public static T Publish(this IContentRepository contentRepository, ContentReference parent, Action setValues) where T : IContent + public static PageReference Publish(this IContentRepository contentRepository, ContentReference parent, Action setValues) where T : IContent { return contentRepository .GetDefault(parent) diff --git a/src/WhiteMagic.Tests/InMemoryContentRepository.cs b/src/WhiteMagic.Tests/InMemoryContentRepository.cs index b59c42f..faf1c98 100644 --- a/src/WhiteMagic.Tests/InMemoryContentRepository.cs +++ b/src/WhiteMagic.Tests/InMemoryContentRepository.cs @@ -404,7 +404,7 @@ private PageData GetPage(PageReference pageLink) { throw new PageNotFoundException(pageLink); } - return pages.Last(); + return pages.Last().Copy(); } private void RaisePageEvent(PageEventHandler pageEvent, PageEventArgs e)