Changes to tests for MVC 2 value provider changes

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4044578
This commit is contained in:
loudej
2009-12-25 09:03:03 +00:00
parent 96f427eb00
commit 27098815f3
8 changed files with 182 additions and 160 deletions
@@ -99,6 +99,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Roles\Controllers\AdminControllerTests.cs" /> <Compile Include="Roles\Controllers\AdminControllerTests.cs" />
<Compile Include="Roles\Services\RoleServiceTests.cs" /> <Compile Include="Roles\Services\RoleServiceTests.cs" />
<Compile Include="Values.cs" />
<Compile Include="Users\Controllers\AdminControllerTests.cs" /> <Compile Include="Users\Controllers\AdminControllerTests.cs" />
<Compile Include="Users\Services\MembershipServiceTests.cs" /> <Compile Include="Users\Services\MembershipServiceTests.cs" />
<Compile Include="XmlRpc\Controllers\HomeControllerTests.cs" /> <Compile Include="XmlRpc\Controllers\HomeControllerTests.cs" />
@@ -1,4 +1,5 @@
using System; using System;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using System.Web; using System.Web;
@@ -83,7 +84,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
} }
} }
class StubAuthorizer: IAuthorizer { class StubAuthorizer : IAuthorizer {
#region IAuthorizer Members #region IAuthorizer Members
public bool Authorize(Permission permission, LocalizedString message) { public bool Authorize(Permission permission, LocalizedString message) {
@@ -103,8 +104,11 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
[Test] [Test]
public void CreateShouldReturnViewWithErrorIfSlugIsNull() { public void CreateShouldReturnViewWithErrorIfSlugIsNull() {
var input = new FormCollection { { ReflectOn<PageCreateViewModel>.NameOf(m => m.Slug), null } }; _controller.ValueProvider = Values.From(new PageCreateViewModel {
var result = _controller.Create(input); Slug = null
});
var result = _controller.CreatePOST();
Assert.That(result, Is.TypeOf<ViewResult>()); Assert.That(result, Is.TypeOf<ViewResult>());
Assert.That(_controller.ModelState.IsValid, Is.False); Assert.That(_controller.ModelState.IsValid, Is.False);
} }
@@ -130,12 +134,12 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
var pageDoesntExist = _pageManager.GetPublishedBySlug("slug2"); var pageDoesntExist = _pageManager.GetPublishedBySlug("slug2");
var input = new FormCollection { _controller.ValueProvider = Values.From(new PageCreateViewModel {
{ ReflectOn<PageCreateViewModel>.NameOf(m => m.Slug), "slug2" }, Title = "title2",
{ ReflectOn<PageCreateViewModel>.NameOf(m => m.TemplateName), "threecolumn" } Slug = "slug2",
}; TemplateName = "threecolumn",
});
var result = _controller.Create(input); var result = _controller.CreatePOST();
Assert.That(result, Is.TypeOf<RedirectToRouteResult>()); Assert.That(result, Is.TypeOf<RedirectToRouteResult>());
var redirect = (RedirectToRouteResult)result; var redirect = (RedirectToRouteResult)result;
@@ -227,15 +231,21 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1)); Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1));
// Build controller input // Build controller input
var input = new FormCollection { { ReflectOn<PageIndexViewModel>.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.PublishNow.ToString() } };
var options = new PageIndexOptions {
BulkAction = PageIndexBulkAction.PublishNow
};
var pageEntries = new List<PageEntry>();
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
//TODO: Use "NameOf" when it supports these expressions pageEntries.Add(new PageEntry {
input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString()); PageId = pages[i].Id,
input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString()); IsChecked = true
});
} }
// Call controller // call controller
var result = _controller.Index(input); var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state // Verify result, check database state
ClearSession(); ClearSession();
@@ -263,21 +273,25 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(pages[1].Published, Is.Null); Assert.That(pages[1].Published, Is.Null);
Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1)); Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1));
// Build controller input
DateTime scheduledDate = _clock.FutureMoment(TimeSpan.FromMinutes(1));
var input = new FormCollection { // Build controller input
{ ReflectOn<PageIndexViewModel>.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.PublishLater.ToString() } ,
{ ReflectOn<PageIndexViewModel>.NameOf(m => m.Options.BulkPublishLaterDate), string.Format("{0:d} {0:T}", scheduledDate) } DateTime scheduledDate = _clock.FutureMoment(TimeSpan.FromMinutes(1));
}; var options = new PageIndexOptions {
BulkAction = PageIndexBulkAction.PublishLater,
BulkPublishLaterDate = scheduledDate,
};
var pageEntries = new List<PageEntry>();
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
//TODO: Use "NameOf" when it supports these expressions pageEntries.Add(new PageEntry {
input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString()); PageId = pages[i].Id,
input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString()); IsChecked = true
});
} }
// Call controller // call controller
var result = _controller.Index(input); var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state // Verify result, check database state
ClearSession(); ClearSession();
@@ -307,20 +321,24 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(pages[1].Published, Is.Null); Assert.That(pages[1].Published, Is.Null);
Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1)); Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1));
// Build controller input
var input = new FormCollection {
{ ReflectOn<PageIndexViewModel>.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.Delete.ToString() },
{ ReflectOn<PageIndexViewModel>.NameOf(m => m.Options.BulkDeleteConfirmed), true.ToString() }
};
// Build controller input
var options = new PageIndexOptions {
BulkAction = PageIndexBulkAction.Delete,
BulkDeleteConfirmed = true,
};
var pageEntries = new List<PageEntry>();
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
//TODO: Use "NameOf" when it supports these expressions pageEntries.Add(new PageEntry {
input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString()); PageId = pages[i].Id,
input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString()); IsChecked = true
});
} }
// Call controller // call controller
var result = _controller.Index(input); var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state // Verify result, check database state
ClearSession(); ClearSession();
@@ -342,18 +360,20 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(pages[1].Published, Is.Not.Null); Assert.That(pages[1].Published, Is.Not.Null);
// Build controller input // Build controller input
var input = new FormCollection { var options = new PageIndexOptions {
{ ReflectOn<PageIndexViewModel>.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.Unpublish.ToString() }, BulkAction = PageIndexBulkAction.Unpublish,
}; };
var pageEntries = new List<PageEntry>();
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
//TODO: Use "NameOf" when it supports these expressions pageEntries.Add(new PageEntry {
input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString()); PageId = pages[i].Id,
input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString()); IsChecked = true
});
} }
// Call controller // call controller
var result = _controller.Index(input); var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state // Verify result, check database state
ClearSession(); ClearSession();
@@ -374,11 +394,11 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
public void PublishNowShouldApplyChangesAndRedirect() { public void PublishNowShouldApplyChangesAndRedirect() {
var pageBeforeEdit = _pageManager.GetLastRevision(_slugPageId); var pageBeforeEdit = _pageManager.GetLastRevision(_slugPageId);
var input = new FormCollection { _controller.ValueProvider = Values.From(new Dictionary<string, string> {
{ ReflectOn<PageEditViewModel>.NameOf(m => m.Revision.Slug), "new-slug-value" }, {"Revision.Slug","new-slug-value" },
{ ReflectOn<PageEditViewModel>.NameOf(m => m.Command), PageEditCommand.PublishNow.ToString() } {"Command","PublishNow"},
}; });
var result = _controller.Edit(_slugPageId, input); var result = _controller.EditPOST(_slugPageId);
var pageNotFoundAnymore = _pageManager.GetPublishedBySlug("slug"); var pageNotFoundAnymore = _pageManager.GetPublishedBySlug("slug");
var pageFromNewSlug = _pageManager.GetPublishedBySlug("new-slug-value"); var pageFromNewSlug = _pageManager.GetPublishedBySlug("new-slug-value");
@@ -414,8 +434,10 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(revision.Contents, Has.Count.EqualTo(2)); Assert.That(revision.Contents, Has.Count.EqualTo(2));
Assert.That(revision.Contents, Has.None.Property("ZoneName").EqualTo("content3")); Assert.That(revision.Contents, Has.None.Property("ZoneName").EqualTo("content3"));
var input = new FormCollection { { "TemplateName", "threecolumn" } }; _controller.ValueProvider = Values.From(new Dictionary<string, string> {
var result = _controller.ChooseTemplate(revision.Id, input); { "TemplateName", "threecolumn" }
});
var result = _controller.ChooseTemplatePOST(revision.Id);
Assert.That(result, Is.TypeOf<RedirectToRouteResult>()); Assert.That(result, Is.TypeOf<RedirectToRouteResult>());
@@ -443,8 +465,10 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(revision.Contents, Has.Count.EqualTo(2)); Assert.That(revision.Contents, Has.Count.EqualTo(2));
Assert.That(revision.Contents, Has.None.Property("ZoneName").EqualTo("content3")); Assert.That(revision.Contents, Has.None.Property("ZoneName").EqualTo("content3"));
var input = new FormCollection { { "TemplateName", "twocolumn" } }; _controller.ValueProvider = Values.From(new Dictionary<string, string> {
var result = _controller.ChooseTemplate(revision.Id, input); { "TemplateName", "twocolumn" }
});
var result = _controller.ChooseTemplatePOST(revision.Id);
Assert.That(result, Is.TypeOf<RedirectToRouteResult>()); Assert.That(result, Is.TypeOf<RedirectToRouteResult>());
@@ -460,41 +484,41 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
[Test, Ignore("This actually requires the data binder to be registered, because it's going through contoller's update model method.")] [Test, Ignore("This actually requires the data binder to be registered, because it's going through contoller's update model method.")]
public void SavingDraftAfterEmptyingUnusedContentItemShouldRemoveUnusedItems() { public void SavingDraftAfterEmptyingUnusedContentItemShouldRemoveUnusedItems() {
var createInput = new FormCollection { _controller.ValueProvider = Values.From(new PageCreateViewModel {
{"Title", "One"}, Title = "One",
{"Slug", "Two"}, Slug = "Two",
{"TemplateName", "threecolumn"}, TemplateName = "threecolumn",
}; });
var createResult = (RedirectToRouteResult)_controller.Create(createInput); var createResult = (RedirectToRouteResult)_controller.CreatePOST();
ClearSession(); ClearSession();
var pageId = (int)createResult.RouteValues["id"]; var pageId = (int)createResult.RouteValues["id"];
var publishInput = new FormCollection { _controller.ValueProvider = Values.From(new Dictionary<string, string> {
{"Command", "PublishNow"}, {"Command", "PublishNow"},
{"Revision.Contents[content1].Content", "alpha"}, {"Revision.Contents[content1].Content", "alpha"},
{"Revision.Contents[content2].Content", "beta"}, {"Revision.Contents[content2].Content", "beta"},
{"Revision.Contents[content3].Content", "gamma"}, {"Revision.Contents[content3].Content", "gamma"},
}; });
_controller.Edit(pageId, publishInput); _controller.EditPOST(pageId);
ClearSession(); ClearSession();
var chooseTemplateInput = new FormCollection { _controller.ValueProvider = Values.From(new Dictionary<string, string> {
{"TemplateName", "twocolumn"}, {"TemplateName", "twocolumn"},
}; });
_controller.ChooseTemplate(pageId, chooseTemplateInput); _controller.ChooseTemplatePOST(pageId);
ClearSession(); ClearSession();
var revision = _pageManager.GetLastRevision(pageId); var revision = _pageManager.GetLastRevision(pageId);
Assert.That(revision.Contents, Has.Count.EqualTo(3)); Assert.That(revision.Contents, Has.Count.EqualTo(3));
var publishInput2 = new FormCollection { _controller.ValueProvider = Values.From(new Dictionary<string, string> {
{"Command", "PublishNow"}, {"Command", "PublishNow"},
{"Revision.Contents[content1].Content", "alpha"}, {"Revision.Contents[content1].Content", "alpha"},
{"Revision.Contents[content2].Content", "beta"}, {"Revision.Contents[content2].Content", "beta"},
{"Revision.Contents[content3].Content", ""}, {"Revision.Contents[content3].Content", ""},
}; });
_controller.Edit(pageId, publishInput2); _controller.EditPOST(pageId);
ClearSession(); ClearSession();
var revision2 = _pageManager.GetLastRevision(pageId); var revision2 = _pageManager.GetLastRevision(pageId);
Assert.That(revision2.Contents, Has.Count.EqualTo(2)); Assert.That(revision2.Contents, Has.Count.EqualTo(2));
@@ -80,37 +80,11 @@ namespace Orchard.Tests.Packages.Users.Controllers {
Assert.That(model.Rows, Is.Not.Null); Assert.That(model.Rows, Is.Not.Null);
} }
public static class Values {
public static IValueProvider Of<T>(T obj) {
return new ValueProvider<T>(obj);
}
class ValueProvider<T> : IValueProvider {
private readonly T _obj;
public ValueProvider(T obj) {
_obj = obj;
}
public bool ContainsPrefix( string prefix) {
return typeof(T).GetProperties().Any(x => x.Name.StartsWith(prefix));
}
public ValueProviderResult GetValue( string key) {
var property = typeof(T).GetProperty(key);
if (property == null)
return null;
return new ValueProviderResult(
property.GetValue(_obj, null),
Convert.ToString(property.GetValue(_obj, null)),
null);
}
}
}
[Test] [Test]
public void CreateShouldAddUserAndRedirect() { public void CreateShouldAddUserAndRedirect() {
var controller = _container.Resolve<AdminController>(); var controller = _container.Resolve<AdminController>();
controller.ValueProvider = Values.Of(new { controller.ValueProvider = Values.From(new {
UserName = "four", UserName = "four",
Password = "five", Password = "five",
ConfirmPassword = "five" ConfirmPassword = "five"
@@ -134,7 +108,7 @@ namespace Orchard.Tests.Packages.Users.Controllers {
Assert.That(model.UserName, Is.EqualTo("two")); Assert.That(model.UserName, Is.EqualTo("two"));
var controller = _container.Resolve<AdminController>(); var controller = _container.Resolve<AdminController>();
controller.ValueProvider = Values.Of(new { controller.ValueProvider = Values.From(new {
UserName = "bubba", UserName = "bubba",
Email = "hotep", Email = "hotep",
}); });
+41
View File
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web.Mvc;
namespace Orchard.Tests.Packages {
public static class Values {
public static IValueProvider From<T>(T obj) {
if (obj is IDictionary<string,string>) {
return new DictionaryValueProvider<string>(
(IDictionary<string,string>)obj,
CultureInfo.InvariantCulture);
}
return new ValueProvider<T>(obj);
}
class ValueProvider<T> : IValueProvider {
private readonly T _obj;
public ValueProvider(T obj) {
_obj = obj;
}
public bool ContainsPrefix(string prefix) {
return typeof(T).GetProperties().Any(x => x.Name.StartsWith(prefix));
}
public ValueProviderResult GetValue(string key) {
var property = typeof(T).GetProperty(key);
if (property == null)
return null;
return new ValueProviderResult(
property.GetValue(_obj, null),
Convert.ToString(property.GetValue(_obj, null)),
null);
}
}
}
}
@@ -172,26 +172,5 @@ namespace Orchard.Tests.Models {
return modelRecord; return modelRecord;
} }
[Test]
public void EditorsShouldBeOrderedByPositionAndDefaultPositionIsSix() {
var alpha = _manager.New("alpha");
var templates = _manager.BuildDisplayModel(alpha, null).Displays;
Assert.That(templates.Count(), Is.EqualTo(3));
var t0 = templates.First();
var t1 = templates.Skip(1).First();
var t2 = templates.Skip(2).First();
Assert.That(t0.Model, Is.TypeOf<Alpha>());
Assert.That(t1.Model, Is.TypeOf<Flavored>());
Assert.That(t2.Model, Is.TypeOf<Styled>());
Assert.That(t0.Position, Is.EqualTo("3"));
Assert.That(t1.Position, Is.Null);
Assert.That(t2.Position, Is.EqualTo("10"));
}
} }
} }
@@ -65,11 +65,11 @@ namespace Orchard.Tests.UI.Notify {
var model = new AdminViewModel(); var model = new AdminViewModel();
var context = BuildContext(); var context = BuildContext();
context.Controller.TempData.Add("messages", "dont-destroy" + System.Environment.NewLine); context.Controller.TempData.Add("messages", "dont-destroy" + System.Environment.NewLine + "-" + System.Environment.NewLine);
context.Result = new ViewResult { context.Result = new ViewResult {
ViewData = new ViewDataDictionary<AdminViewModel>(model), ViewData = new ViewDataDictionary<AdminViewModel>(model),
TempData = context.Controller.TempData TempData = context.Controller.TempData
}; };
filter.OnActionExecuted(context); filter.OnActionExecuted(context);
filter.OnResultExecuting(new ResultExecutingContext(context, context.Result)); filter.OnResultExecuting(new ResultExecutingContext(context, context.Result));
@@ -82,15 +82,15 @@ namespace Orchard.CmsPages.Controllers {
return View(model); return View(model);
} }
[HttpPost] [HttpPost, ActionName("Index")]
[FormValueRequired("submit.BulkEdit")] [FormValueRequired("submit.BulkEdit")]
public ActionResult Index(FormCollection input) { public ActionResult IndexPOST(PageIndexOptions options, IList<PageEntry> pageEntries) {
var viewModel = new PageIndexViewModel(); //var viewModel = new PageIndexViewModel();
UpdateModel(viewModel, input.ToValueProvider()); //UpdateModel(viewModel);
try { try {
IEnumerable<PageEntry> checkedEntries = viewModel.PageEntries.Where(p => p.IsChecked); IEnumerable<PageEntry> checkedEntries = pageEntries.Where(p => p.IsChecked);
switch (viewModel.Options.BulkAction) { switch (options.BulkAction) {
case PageIndexBulkAction.None: case PageIndexBulkAction.None:
break; break;
@@ -111,17 +111,20 @@ namespace Orchard.CmsPages.Controllers {
if (!_authorizer.Authorize(Permissions.SchedulePages, T("Couldn't publish page"))) if (!_authorizer.Authorize(Permissions.SchedulePages, T("Couldn't publish page")))
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
if (viewModel.Options.BulkPublishLaterDate != null) { if (options.BulkPublishLaterDate != null) {
//TODO: Transaction //TODO: Transaction
foreach (PageEntry entry in checkedEntries) { foreach (PageEntry entry in checkedEntries) {
var page = _repository.Get(entry.PageId); var page = _repository.Get(entry.PageId);
var revision = _pageManager.AcquireDraft(page.Id); var revision = _pageManager.AcquireDraft(page.Id);
_pageScheduler.ClearTasks(page); _pageScheduler.ClearTasks(page);
_pageScheduler.AddPublishTask(revision, viewModel.Options.BulkPublishLaterDate.Value); _pageScheduler.AddPublishTask(revision, options.BulkPublishLaterDate.Value);
} }
} }
else { else {
return View("BulkPublishLater", viewModel); return View("BulkPublishLater", new PageIndexViewModel {
Options = options,
PageEntries = pageEntries
});
} }
break; break;
@@ -139,7 +142,7 @@ namespace Orchard.CmsPages.Controllers {
if (!_authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page"))) if (!_authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page")))
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
if (viewModel.Options.BulkDeleteConfirmed) { if (options.BulkDeleteConfirmed) {
//TODO: Transaction //TODO: Transaction
foreach (PageEntry entry in checkedEntries) { foreach (PageEntry entry in checkedEntries) {
var page = _repository.Get(entry.PageId); var page = _repository.Get(entry.PageId);
@@ -148,7 +151,10 @@ namespace Orchard.CmsPages.Controllers {
} }
} }
else { else {
return View("BulkDeleteConfirm", viewModel); return View("BulkDeleteConfirm", new PageIndexViewModel {
Options = options,
PageEntries = pageEntries
});
} }
break; break;
@@ -159,7 +165,7 @@ namespace Orchard.CmsPages.Controllers {
catch (Exception ex) { catch (Exception ex) {
ModelState.AddModelError("", ex); ModelState.AddModelError("", ex);
//TODO: Is this a good idea to return to the index view in case of error? //TODO: Is this a good idea to return to the index view in case of error?
return Index(viewModel.Options); return Index(options);
} }
return RedirectToAction("Index"); return RedirectToAction("Index");
@@ -191,12 +197,12 @@ namespace Orchard.CmsPages.Controllers {
return View(model); return View(model);
} }
[AcceptVerbs(HttpVerbs.Post)] [AcceptVerbs(HttpVerbs.Post), ActionName("Create")]
public ActionResult Create(FormCollection input) { public ActionResult CreatePOST() {
var viewModel = new PageCreateViewModel { Templates = _templateProvider.List() }; var viewModel = new PageCreateViewModel { Templates = _templateProvider.List() };
try { try {
UpdateModel(viewModel, input.ToValueProvider()); UpdateModel(viewModel);
if (!_authorizer.Authorize(Permissions.CreatePages, T("Couldn't create page"))) if (!_authorizer.Authorize(Permissions.CreatePages, T("Couldn't create page")))
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
@@ -235,9 +241,9 @@ namespace Orchard.CmsPages.Controllers {
return View(model); return View(model);
} }
[HttpPost] [HttpPost, ActionName("Edit")]
[FormValueRequired("submit.Save")] [FormValueRequired("submit.Save")]
public ActionResult Edit(int id, FormCollection input) { public ActionResult EditPOST(int id) {
var model = new PageEditViewModel(); var model = new PageEditViewModel();
try { try {
//TODO: need a transaction to surround this entire lot, really //TODO: need a transaction to surround this entire lot, really
@@ -245,7 +251,7 @@ namespace Orchard.CmsPages.Controllers {
model.Revision = _pageManager.AcquireDraft(id); model.Revision = _pageManager.AcquireDraft(id);
model.Template = _templateProvider.Get(model.Revision.TemplateName); model.Template = _templateProvider.Get(model.Revision.TemplateName);
UpdateModel(model, input.ToValueProvider()); UpdateModel(model);
RemoveUnusedContentItems(model.Revision, model.Template); RemoveUnusedContentItems(model.Revision, model.Template);
_pageScheduler.ClearTasks(model.Revision.Page); _pageScheduler.ClearTasks(model.Revision.Page);
@@ -342,11 +348,11 @@ namespace Orchard.CmsPages.Controllers {
return View(viewModel); return View(viewModel);
} }
[AcceptVerbs(HttpVerbs.Post)] [HttpPost, ActionName("ChooseTemplate")]
public ActionResult ChooseTemplate(int id, FormCollection input) { public ActionResult ChooseTemplatePOST(int id) {
var viewModel = new ChooseTemplateViewModel(); var viewModel = new ChooseTemplateViewModel();
try { try {
UpdateModel(viewModel, input.ToValueProvider()); UpdateModel(viewModel);
//todo: needs transaction //todo: needs transaction
var draft = _pageManager.AcquireDraft(id); var draft = _pageManager.AcquireDraft(id);
@@ -16,19 +16,16 @@ namespace Orchard.ContentManagement.Drivers {
} }
public override void Apply(BuildDisplayModelContext context) { public override void Apply(BuildDisplayModelContext context) {
context.AddDisplay(new TemplateViewModel(Model, Prefix) { context.DisplayModel.Zones.AddDisplayPart(
TemplateName = TemplateName, Zone + ":" + Position, Model, TemplateName, Prefix);
ZoneName = Zone,
Position = Position
});
} }
public override void Apply(BuildEditorModelContext context) { public override void Apply(BuildEditorModelContext context) {
context.AddEditor(new TemplateViewModel(Model, Prefix) { context.AddEditor(new TemplateViewModel(Model, Prefix) {
TemplateName = TemplateName, TemplateName = TemplateName,
ZoneName = Zone, ZoneName = Zone,
Position = Position Position = Position
}); });
} }
public PartTemplateResult Location(string zone) { public PartTemplateResult Location(string zone) {