From b12767c8cec4947ca1faf44a974d7db253cfaa6e Mon Sep 17 00:00:00 2001 From: loudej Date: Mon, 23 Nov 2009 21:19:23 +0000 Subject: [PATCH] Make page manager not use the page view model (separation of concerns) --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041950 --- .../Pages/Controllers/AdminControllerTests.cs | 20 +++++----- .../Controllers/TemplatesControllerTests.cs | 2 +- .../Pages/Services/PageManagerTests.cs | 37 ++++++++++--------- .../Pages/Services/TestExtensions.cs | 2 +- .../Controllers/AdminController.cs | 2 +- .../Orchard.CmsPages/Services/PageManager.cs | 25 ++++++++++--- .../Services/XmlRpcHandler.cs | 5 +-- 7 files changed, 52 insertions(+), 41 deletions(-) diff --git a/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs b/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs index 05dbeb637..09afcfb07 100644 --- a/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs +++ b/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs @@ -39,7 +39,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { _pageScheduler = _container.Resolve(); _templateProvider = _container.Resolve(); _authorizer = _container.Resolve(); - var page = _pageManager.CreatePage(new PageCreateViewModel { Slug = "slug", Templates = _templateProvider.List() }); + var page = _pageManager.CreatePage(new CreatePageParams(null, "slug", null)); _slugPageId = page.Id; _controller = _container.Resolve(); @@ -155,11 +155,11 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void IndexShouldReturnTheListOfFilteredPages() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); _pageManager.Publish(revision, new PublishOptions()); - var createPage2 = new PageCreateViewModel { Title = "hello2", Slug = "world2", TemplateName = "twocolumn" }; + var createPage2 = new CreatePageParams { Title = "hello2", Slug = "world2", TemplateName = "twocolumn" }; var revision2 = _pageManager.CreatePage(createPage2); _pageScheduler.AddPublishTask(revision2, _clock.FutureMoment(TimeSpan.FromMinutes(1))); @@ -212,7 +212,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void IndexPostShouldPerformBulkPublishNow() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); // Add a scheduled publish task to make sure it's deleted when bulk "PublishNow" is called @@ -249,7 +249,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void IndexPostShouldPerformBulkPublishLater() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); // Add a scheduled publish task to make sure it's deleted when bulk "PublishNow" is called @@ -293,7 +293,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void IndexPostShouldPerformBulkDelete() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); // Add a scheduled publish task to make sure it's deleted when bulk "PublishNow" is called @@ -330,7 +330,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void IndexPostShouldPerformBulkUnpublish() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); _pageManager.Publish(revision, new PublishOptions()); @@ -394,7 +394,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void ChooseTemplateListsAvailableTemplatesWithCurrentOneSelected() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); var result = _controller.ChooseTemplate(revision.Id); @@ -407,7 +407,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test] public void PostingDifferentTemplateResultsInDraftAndExtendsNamedContentItems() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); _pageManager.Publish(revision, new PublishOptions()); @@ -436,7 +436,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { [Test, Ignore("This can't be properly implementated until a transaction scope with rollback abilities is available to the controller")] public void PostingSameTemplateDoesNotResultInDraftBeingCreated() { - var createPage = new PageCreateViewModel { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; + var createPage = new CreatePageParams { Title = "hello", Slug = "world", TemplateName = "twocolumn" }; var revision = _pageManager.CreatePage(createPage); _pageManager.Publish(revision, new PublishOptions()); diff --git a/src/Orchard.Tests.Packages/Pages/Controllers/TemplatesControllerTests.cs b/src/Orchard.Tests.Packages/Pages/Controllers/TemplatesControllerTests.cs index 5d032b671..f8cee5990 100644 --- a/src/Orchard.Tests.Packages/Pages/Controllers/TemplatesControllerTests.cs +++ b/src/Orchard.Tests.Packages/Pages/Controllers/TemplatesControllerTests.cs @@ -25,7 +25,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers { _templateProvider = _container.Resolve(); _controller = _container.Resolve(); - var revision = _pageManager.CreatePage(new PageCreateViewModel { Slug = "slug", Templates = _templateProvider.List() }); + var revision = _pageManager.CreatePage(new CreatePageParams(null, "slug", null)); _pageManager.Publish(revision, new PublishOptions()); } diff --git a/src/Orchard.Tests.Packages/Pages/Services/PageManagerTests.cs b/src/Orchard.Tests.Packages/Pages/Services/PageManagerTests.cs index e495c5584..a7952fdbc 100644 --- a/src/Orchard.Tests.Packages/Pages/Services/PageManagerTests.cs +++ b/src/Orchard.Tests.Packages/Pages/Services/PageManagerTests.cs @@ -65,8 +65,9 @@ namespace Orchard.Tests.Packages.Pages.Services { Assert.That(page.Contents, Has.Some.Property("ZoneName").EqualTo("content2")); } - private PageCreateViewModel PageCreate(string slug, string title, string template) { - return new PageCreateViewModel { Slug = slug, Title = title, TemplateName = template, Templates = _templateProvider.List() }; + private CreatePageParams PageCreate(string slug, string title, string template) { + return new CreatePageParams(title, slug, template); + //return new CreatePageParams { Slug = slug, Title = title, TemplateName = template, Templates = _templateProvider.List() }; } [Test] @@ -95,7 +96,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void GetPublishedBySlugShouldOnlyReturnPageAfterItIsPublished() { - var revision = _manager.CreatePage(new PageCreateViewModel { Slug = "hello-world", Templates = _templateProvider.List() }); + var revision = _manager.CreatePage(new CreatePageParams { Slug = "hello-world" }); var notPublishedYet = _manager.GetPublishedBySlug("hello-world"); Assert.That(notPublishedYet, Is.Null); @@ -109,7 +110,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] [Ignore("Linq to NHib doesn't support calling 'String.Equals' in expressions. Figure out a workaround.")] public void GetPublishedBySlugShouldBeCaseInsensitive() { - var revision = _manager.CreatePage(new PageCreateViewModel { Slug = "hello-world", Templates = _templateProvider.List() }); + var revision = _manager.CreatePage(new CreatePageParams { Slug = "hello-world" }); _manager.Publish(revision, new PublishOptions()); var publishedNow = _manager.GetPublishedBySlug("hello-WORLD"); @@ -118,9 +119,9 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishingPagesAddsToCurrentlyPublishedSlugList() { - _manager.Publish(_manager.CreatePage(new PageCreateViewModel { Slug = "one", Templates = _templateProvider.List() }), new PublishOptions()); - _manager.Publish(_manager.CreatePage(new PageCreateViewModel { Slug = "two", Templates = _templateProvider.List() }), new PublishOptions()); - _manager.Publish(_manager.CreatePage(new PageCreateViewModel { Slug = "three", Templates = _templateProvider.List() }), new PublishOptions()); + _manager.Publish(_manager.CreatePage(new CreatePageParams { Slug = "one" }), new PublishOptions()); + _manager.Publish(_manager.CreatePage(new CreatePageParams { Slug = "two" }), new PublishOptions()); + _manager.Publish(_manager.CreatePage(new CreatePageParams { Slug = "three" }), new PublishOptions()); var slugs = _manager.GetCurrentlyPublishedSlugs(); Assert.That(slugs, Has.Count.GreaterThanOrEqualTo(3)); @@ -131,9 +132,9 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishingPagesDoesNotChangeSlugCasing() { - _manager.Publish(_manager.CreatePage(new PageCreateViewModel { Slug = "One", Templates = _templateProvider.List() }), new PublishOptions()); - _manager.Publish(_manager.CreatePage(new PageCreateViewModel { Slug = "TWO", Templates = _templateProvider.List() }), new PublishOptions()); - _manager.Publish(_manager.CreatePage(new PageCreateViewModel { Slug = "thRee", Templates = _templateProvider.List() }), new PublishOptions()); + _manager.Publish(_manager.CreatePage(new CreatePageParams { Slug = "One" }), new PublishOptions()); + _manager.Publish(_manager.CreatePage(new CreatePageParams { Slug = "TWO" }), new PublishOptions()); + _manager.Publish(_manager.CreatePage(new CreatePageParams { Slug = "thRee" }), new PublishOptions()); var slugs = _manager.GetCurrentlyPublishedSlugs(); Assert.That(slugs, Has.Count.GreaterThanOrEqualTo(3)); @@ -144,7 +145,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishingThePublishedRevisionDoesNothing() { - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); _manager.Publish(initial, new PublishOptions()); DateTime initialRevisionTime = initial.PublishedDate.Value; @@ -161,14 +162,14 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void AcquireDraftOnUnpublishedPageShouldReturnExistingRevision() { - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); var draft = _manager.AcquireDraft(initial.Page.Id); Assert.That(initial, Is.SameAs(draft)); } [Test] public void AcquireDraftForUpdateOnPublishedPageShouldCreateNewRevision() { - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); _manager.Publish(initial, new PublishOptions()); var draft = _manager.AcquireDraft(initial.Page.Id); Assert.That(initial, Is.Not.SameAs(draft)); @@ -177,7 +178,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishingDraftWithKeepHistoryFalseShouldDeletePreviousPublishedRevision() { - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); var pageId = initial.Page.Id; _manager.Publish(initial, new PublishOptions()); @@ -196,7 +197,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishingDraftWithKeepHistoryTrueShouldLeavePreviousRevisionIntact() { - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); var pageId = initial.Page.Id; Trace.WriteLine("Publish initial"); @@ -218,7 +219,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishDateIsSetWhenPublishOccurs() { - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); Assert.That(initial.PublishedDate, Is.Null); _manager.Publish(initial, new PublishOptions()); Assert.That(initial.PublishedDate, Is.EqualTo(_clock.UtcNow)); @@ -228,7 +229,7 @@ namespace Orchard.Tests.Packages.Pages.Services { public void ModifiedDateIsSetWhenPageIsCreatedAndWhenAcquireDraftIsCalled() { var mark1 = _clock.UtcNow; - var initial = _manager.CreatePage(new PageCreateViewModel { Slug = "foo", Templates = _templateProvider.List() }); + var initial = _manager.CreatePage(new CreatePageParams { Slug = "foo" }); Assert.That(initial.PublishedDate, Is.Null); Assert.That(initial.ModifiedDate, Is.EqualTo(mark1)); @@ -267,7 +268,7 @@ namespace Orchard.Tests.Packages.Pages.Services { [Test] public void PublishedPropertyShouldCascadeInsertsAndDeletesWhenSetAndNulled() { - var page = new Page {Published = new Published()}; + var page = new Page { Published = new Published() }; page.Published.Page = page; var pageRepos = _container.Resolve>(); diff --git a/src/Orchard.Tests.Packages/Pages/Services/TestExtensions.cs b/src/Orchard.Tests.Packages/Pages/Services/TestExtensions.cs index 957144c84..cbabf8c4e 100644 --- a/src/Orchard.Tests.Packages/Pages/Services/TestExtensions.cs +++ b/src/Orchard.Tests.Packages/Pages/Services/TestExtensions.cs @@ -5,7 +5,7 @@ using Orchard.CmsPages.ViewModels; namespace Orchard.Tests.Packages.Pages.Services { public static class TestExtensions { public static PageRevision CreateAndPublishPage(this IPageManager manager, string slug, string title) { - var revision = manager.CreatePage(new PageCreateViewModel {Slug = slug, Title = title}); + var revision = manager.CreatePage(new CreatePageParams(title, slug, null)); manager.Publish(revision, new PublishOptions()); return revision; } diff --git a/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs index f5b515f35..ec31ceefb 100644 --- a/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs +++ b/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs @@ -204,7 +204,7 @@ namespace Orchard.CmsPages.Controllers { Logger.Information("Creating CmsPage slug:{0} title{1}: template{2}", viewModel.Slug, viewModel.Title, viewModel.TemplateName); - var revision = _pageManager.CreatePage(viewModel); + var revision = _pageManager.CreatePage(new CreatePageParams(viewModel.Title, viewModel.Slug, viewModel.TemplateName)); return RedirectToAction("Edit", new { revision.Page.Id }); } catch (Exception ex) { diff --git a/src/Orchard.Web/Packages/Orchard.CmsPages/Services/PageManager.cs b/src/Orchard.Web/Packages/Orchard.CmsPages/Services/PageManager.cs index ef4c3bf62..8ac11c6ab 100644 --- a/src/Orchard.Web/Packages/Orchard.CmsPages/Services/PageManager.cs +++ b/src/Orchard.Web/Packages/Orchard.CmsPages/Services/PageManager.cs @@ -22,13 +22,26 @@ namespace Orchard.CmsPages.Services { public PublishHistory History { get; set; } } + public class CreatePageParams { + public CreatePageParams(){} + public CreatePageParams(string title, string slug, string templateName) { + Title = title; + Slug = slug; + TemplateName = templateName; + } + + public string Title { get; set; } + public string Slug { get; set; } + public string TemplateName { get; set; } + } + public interface IPageManager : IDependency { IEnumerable GetCurrentlyPublishedSlugs(); PageRevision GetPublishedBySlug(string slug); PageRevision GetLastRevision(int pageId); - PageRevision CreatePage(PageCreateViewModel pageCreate); + PageRevision CreatePage(CreatePageParams createPageParams); PageRevision AcquireDraft(int pageId); void ApplyTemplateName(PageRevision revision, string templateName); void Publish(PageRevision revision, [NotNull] PublishOptions options); @@ -60,7 +73,8 @@ namespace Orchard.CmsPages.Services { public ILogger Logger { get; set; } - public PageRevision CreatePage(PageCreateViewModel pageCreate) { + + public PageRevision CreatePage(CreatePageParams createPageParams) { Logger.Information("CreatePage"); //var templateDescriptor = _templateProvider.Get(pageCreate.TemplateName); @@ -68,9 +82,8 @@ namespace Orchard.CmsPages.Services { var page = new Page(); var revision = new PageRevision { Page = page, - Title = pageCreate.Title, - Slug = pageCreate.Slug, - TemplateName = pageCreate.TemplateName, + Title = createPageParams.Title, + Slug = createPageParams.Slug, ModifiedDate = _clock.UtcNow, Number = 1 }; @@ -81,7 +94,7 @@ namespace Orchard.CmsPages.Services { // revision.Contents.Add(new ContentItem { PageRevision = revision, ZoneName = zone }); // } //} - ApplyTemplateName(revision, pageCreate.TemplateName); + ApplyTemplateName(revision, createPageParams.TemplateName); _pageRepository.Create(page); diff --git a/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs b/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs index 5c7e53463..bfed34b9c 100644 --- a/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs +++ b/src/Orchard.Web/Packages/Orchard.CmsPages/Services/XmlRpcHandler.cs @@ -75,10 +75,7 @@ namespace Orchard.CmsPages.Services { var title = content.Optional("title"); var description = content.Optional("description"); - var pageRevision = _pageManager.CreatePage(new PageCreateViewModel { - Title = title, - TemplateName = "TwoColumns" - }); + var pageRevision = _pageManager.CreatePage(new CreatePageParams(title, null, "TwoColumns")); pageRevision.Contents.First().Content = description; if (publish) {