diff --git a/src/Orchard.Tests.Packages/Orchard.Tests.Packages.csproj b/src/Orchard.Tests.Packages/Orchard.Tests.Packages.csproj
index aa7b6a996..b0f089de4 100644
--- a/src/Orchard.Tests.Packages/Orchard.Tests.Packages.csproj
+++ b/src/Orchard.Tests.Packages/Orchard.Tests.Packages.csproj
@@ -99,6 +99,7 @@
+
diff --git a/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs b/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs
index 09afcfb07..813edccb4 100644
--- a/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs
+++ b/src/Orchard.Tests.Packages/Pages/Controllers/AdminControllerTests.cs
@@ -1,4 +1,5 @@
using System;
+using System.Globalization;
using System.Linq;
using System.Collections.Generic;
using System.Web;
@@ -83,7 +84,7 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
}
}
- class StubAuthorizer: IAuthorizer {
+ class StubAuthorizer : IAuthorizer {
#region IAuthorizer Members
public bool Authorize(Permission permission, LocalizedString message) {
@@ -103,8 +104,11 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
[Test]
public void CreateShouldReturnViewWithErrorIfSlugIsNull() {
- var input = new FormCollection { { ReflectOn.NameOf(m => m.Slug), null } };
- var result = _controller.Create(input);
+ _controller.ValueProvider = Values.From(new PageCreateViewModel {
+ Slug = null
+ });
+
+ var result = _controller.CreatePOST();
Assert.That(result, Is.TypeOf());
Assert.That(_controller.ModelState.IsValid, Is.False);
}
@@ -130,12 +134,12 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
var pageDoesntExist = _pageManager.GetPublishedBySlug("slug2");
- var input = new FormCollection {
- { ReflectOn.NameOf(m => m.Slug), "slug2" },
- { ReflectOn.NameOf(m => m.TemplateName), "threecolumn" }
- };
-
- var result = _controller.Create(input);
+ _controller.ValueProvider = Values.From(new PageCreateViewModel {
+ Title = "title2",
+ Slug = "slug2",
+ TemplateName = "threecolumn",
+ });
+ var result = _controller.CreatePOST();
Assert.That(result, Is.TypeOf());
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));
// Build controller input
- var input = new FormCollection { { ReflectOn.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.PublishNow.ToString() } };
+
+ var options = new PageIndexOptions {
+ BulkAction = PageIndexBulkAction.PublishNow
+ };
+
+ var pageEntries = new List();
for (int i = 0; i < 2; i++) {
- //TODO: Use "NameOf" when it supports these expressions
- input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString());
- input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString());
+ pageEntries.Add(new PageEntry {
+ PageId = pages[i].Id,
+ IsChecked = true
+ });
}
- // Call controller
- var result = _controller.Index(input);
+ // call controller
+ var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state
ClearSession();
@@ -263,21 +273,25 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(pages[1].Published, Is.Null);
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 {
- { ReflectOn.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.PublishLater.ToString() } ,
- { ReflectOn.NameOf(m => m.Options.BulkPublishLaterDate), string.Format("{0:d} {0:T}", scheduledDate) }
- };
+ // Build controller input
+
+ DateTime scheduledDate = _clock.FutureMoment(TimeSpan.FromMinutes(1));
+ var options = new PageIndexOptions {
+ BulkAction = PageIndexBulkAction.PublishLater,
+ BulkPublishLaterDate = scheduledDate,
+ };
+
+ var pageEntries = new List();
for (int i = 0; i < 2; i++) {
- //TODO: Use "NameOf" when it supports these expressions
- input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString());
- input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString());
+ pageEntries.Add(new PageEntry {
+ PageId = pages[i].Id,
+ IsChecked = true
+ });
}
- // Call controller
- var result = _controller.Index(input);
+ // call controller
+ var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state
ClearSession();
@@ -307,20 +321,24 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(pages[1].Published, Is.Null);
Assert.That(_pagesRepository.Get(revision.Page.Id).Scheduled.Count, Is.EqualTo(1));
- // Build controller input
- var input = new FormCollection {
- { ReflectOn.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.Delete.ToString() },
- { ReflectOn.NameOf(m => m.Options.BulkDeleteConfirmed), true.ToString() }
- };
+ // Build controller input
+
+ var options = new PageIndexOptions {
+ BulkAction = PageIndexBulkAction.Delete,
+ BulkDeleteConfirmed = true,
+ };
+
+ var pageEntries = new List();
for (int i = 0; i < 2; i++) {
- //TODO: Use "NameOf" when it supports these expressions
- input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString());
- input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString());
+ pageEntries.Add(new PageEntry {
+ PageId = pages[i].Id,
+ IsChecked = true
+ });
}
- // Call controller
- var result = _controller.Index(input);
+ // call controller
+ var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state
ClearSession();
@@ -342,18 +360,20 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(pages[1].Published, Is.Not.Null);
// Build controller input
- var input = new FormCollection {
- { ReflectOn.NameOf(m => m.Options.BulkAction), PageIndexBulkAction.Unpublish.ToString() },
- };
+ var options = new PageIndexOptions {
+ BulkAction = PageIndexBulkAction.Unpublish,
+ };
+ var pageEntries = new List();
for (int i = 0; i < 2; i++) {
- //TODO: Use "NameOf" when it supports these expressions
- input.Add(string.Format("PageEntries[{0}].PageId", i), pages[i].Id.ToString());
- input.Add(string.Format("PageEntries[{0}].IsChecked", i), true.ToString());
+ pageEntries.Add(new PageEntry {
+ PageId = pages[i].Id,
+ IsChecked = true
+ });
}
- // Call controller
- var result = _controller.Index(input);
+ // call controller
+ var result = _controller.IndexPOST(options, pageEntries);
// Verify result, check database state
ClearSession();
@@ -374,11 +394,11 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
public void PublishNowShouldApplyChangesAndRedirect() {
var pageBeforeEdit = _pageManager.GetLastRevision(_slugPageId);
- var input = new FormCollection {
- { ReflectOn.NameOf(m => m.Revision.Slug), "new-slug-value" },
- { ReflectOn.NameOf(m => m.Command), PageEditCommand.PublishNow.ToString() }
- };
- var result = _controller.Edit(_slugPageId, input);
+ _controller.ValueProvider = Values.From(new Dictionary {
+ {"Revision.Slug","new-slug-value" },
+ {"Command","PublishNow"},
+ });
+ var result = _controller.EditPOST(_slugPageId);
var pageNotFoundAnymore = _pageManager.GetPublishedBySlug("slug");
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.None.Property("ZoneName").EqualTo("content3"));
- var input = new FormCollection { { "TemplateName", "threecolumn" } };
- var result = _controller.ChooseTemplate(revision.Id, input);
+ _controller.ValueProvider = Values.From(new Dictionary {
+ { "TemplateName", "threecolumn" }
+ });
+ var result = _controller.ChooseTemplatePOST(revision.Id);
Assert.That(result, Is.TypeOf());
@@ -443,8 +465,10 @@ namespace Orchard.Tests.Packages.Pages.Controllers {
Assert.That(revision.Contents, Has.Count.EqualTo(2));
Assert.That(revision.Contents, Has.None.Property("ZoneName").EqualTo("content3"));
- var input = new FormCollection { { "TemplateName", "twocolumn" } };
- var result = _controller.ChooseTemplate(revision.Id, input);
+ _controller.ValueProvider = Values.From(new Dictionary {
+ { "TemplateName", "twocolumn" }
+ });
+ var result = _controller.ChooseTemplatePOST(revision.Id);
Assert.That(result, Is.TypeOf());
@@ -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.")]
public void SavingDraftAfterEmptyingUnusedContentItemShouldRemoveUnusedItems() {
- var createInput = new FormCollection {
- {"Title", "One"},
- {"Slug", "Two"},
- {"TemplateName", "threecolumn"},
- };
- var createResult = (RedirectToRouteResult)_controller.Create(createInput);
+ _controller.ValueProvider = Values.From(new PageCreateViewModel {
+ Title = "One",
+ Slug = "Two",
+ TemplateName = "threecolumn",
+ });
+ var createResult = (RedirectToRouteResult)_controller.CreatePOST();
ClearSession();
var pageId = (int)createResult.RouteValues["id"];
- var publishInput = new FormCollection {
- {"Command", "PublishNow"},
- {"Revision.Contents[content1].Content", "alpha"},
- {"Revision.Contents[content2].Content", "beta"},
- {"Revision.Contents[content3].Content", "gamma"},
- };
- _controller.Edit(pageId, publishInput);
+ _controller.ValueProvider = Values.From(new Dictionary {
+ {"Command", "PublishNow"},
+ {"Revision.Contents[content1].Content", "alpha"},
+ {"Revision.Contents[content2].Content", "beta"},
+ {"Revision.Contents[content3].Content", "gamma"},
+ });
+ _controller.EditPOST(pageId);
ClearSession();
- var chooseTemplateInput = new FormCollection {
- {"TemplateName", "twocolumn"},
- };
- _controller.ChooseTemplate(pageId, chooseTemplateInput);
+ _controller.ValueProvider = Values.From(new Dictionary {
+ {"TemplateName", "twocolumn"},
+ });
+ _controller.ChooseTemplatePOST(pageId);
ClearSession();
var revision = _pageManager.GetLastRevision(pageId);
Assert.That(revision.Contents, Has.Count.EqualTo(3));
- var publishInput2 = new FormCollection {
- {"Command", "PublishNow"},
- {"Revision.Contents[content1].Content", "alpha"},
- {"Revision.Contents[content2].Content", "beta"},
- {"Revision.Contents[content3].Content", ""},
- };
- _controller.Edit(pageId, publishInput2);
+ _controller.ValueProvider = Values.From(new Dictionary {
+ {"Command", "PublishNow"},
+ {"Revision.Contents[content1].Content", "alpha"},
+ {"Revision.Contents[content2].Content", "beta"},
+ {"Revision.Contents[content3].Content", ""},
+ });
+ _controller.EditPOST(pageId);
ClearSession();
var revision2 = _pageManager.GetLastRevision(pageId);
Assert.That(revision2.Contents, Has.Count.EqualTo(2));
diff --git a/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs b/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs
index 0d420576d..635dade2c 100644
--- a/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs
+++ b/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs
@@ -80,37 +80,11 @@ namespace Orchard.Tests.Packages.Users.Controllers {
Assert.That(model.Rows, Is.Not.Null);
}
- public static class Values {
- public static IValueProvider Of(T obj) {
- return new ValueProvider(obj);
- }
- class ValueProvider : 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]
public void CreateShouldAddUserAndRedirect() {
var controller = _container.Resolve();
- controller.ValueProvider = Values.Of(new {
+ controller.ValueProvider = Values.From(new {
UserName = "four",
Password = "five",
ConfirmPassword = "five"
@@ -134,7 +108,7 @@ namespace Orchard.Tests.Packages.Users.Controllers {
Assert.That(model.UserName, Is.EqualTo("two"));
var controller = _container.Resolve();
- controller.ValueProvider = Values.Of(new {
+ controller.ValueProvider = Values.From(new {
UserName = "bubba",
Email = "hotep",
});
diff --git a/src/Orchard.Tests.Packages/Values.cs b/src/Orchard.Tests.Packages/Values.cs
new file mode 100644
index 000000000..6ab28b8fd
--- /dev/null
+++ b/src/Orchard.Tests.Packages/Values.cs
@@ -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 obj) {
+ if (obj is IDictionary) {
+ return new DictionaryValueProvider(
+ (IDictionary)obj,
+ CultureInfo.InvariantCulture);
+ }
+ return new ValueProvider(obj);
+ }
+
+ class ValueProvider : 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);
+ }
+ }
+ }
+}
diff --git a/src/Orchard.Tests/Models/DefaultModelManagerTests.cs b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs
index 2a9524780..62d32beaa 100644
--- a/src/Orchard.Tests/Models/DefaultModelManagerTests.cs
+++ b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs
@@ -172,26 +172,5 @@ namespace Orchard.Tests.Models {
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());
- Assert.That(t1.Model, Is.TypeOf());
- Assert.That(t2.Model, Is.TypeOf());
-
- Assert.That(t0.Position, Is.EqualTo("3"));
- Assert.That(t1.Position, Is.Null);
- Assert.That(t2.Position, Is.EqualTo("10"));
-
-
- }
-
}
}
diff --git a/src/Orchard.Tests/UI/Notify/NotifyFilterTests.cs b/src/Orchard.Tests/UI/Notify/NotifyFilterTests.cs
index 358cf3f7a..312e3a831 100644
--- a/src/Orchard.Tests/UI/Notify/NotifyFilterTests.cs
+++ b/src/Orchard.Tests/UI/Notify/NotifyFilterTests.cs
@@ -65,11 +65,11 @@ namespace Orchard.Tests.UI.Notify {
var model = new AdminViewModel();
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 {
- ViewData = new ViewDataDictionary(model),
- TempData = context.Controller.TempData
- };
+ ViewData = new ViewDataDictionary(model),
+ TempData = context.Controller.TempData
+ };
filter.OnActionExecuted(context);
filter.OnResultExecuting(new ResultExecutingContext(context, context.Result));
diff --git a/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs
index 4d63b6b7f..52b4fae33 100644
--- a/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs
+++ b/src/Orchard.Web/Packages/Orchard.CmsPages/Controllers/AdminController.cs
@@ -82,15 +82,15 @@ namespace Orchard.CmsPages.Controllers {
return View(model);
}
- [HttpPost]
+ [HttpPost, ActionName("Index")]
[FormValueRequired("submit.BulkEdit")]
- public ActionResult Index(FormCollection input) {
- var viewModel = new PageIndexViewModel();
- UpdateModel(viewModel, input.ToValueProvider());
+ public ActionResult IndexPOST(PageIndexOptions options, IList pageEntries) {
+ //var viewModel = new PageIndexViewModel();
+ //UpdateModel(viewModel);
try {
- IEnumerable checkedEntries = viewModel.PageEntries.Where(p => p.IsChecked);
- switch (viewModel.Options.BulkAction) {
+ IEnumerable checkedEntries = pageEntries.Where(p => p.IsChecked);
+ switch (options.BulkAction) {
case PageIndexBulkAction.None:
break;
@@ -111,17 +111,20 @@ namespace Orchard.CmsPages.Controllers {
if (!_authorizer.Authorize(Permissions.SchedulePages, T("Couldn't publish page")))
return new HttpUnauthorizedResult();
- if (viewModel.Options.BulkPublishLaterDate != null) {
+ if (options.BulkPublishLaterDate != null) {
//TODO: Transaction
foreach (PageEntry entry in checkedEntries) {
var page = _repository.Get(entry.PageId);
var revision = _pageManager.AcquireDraft(page.Id);
_pageScheduler.ClearTasks(page);
- _pageScheduler.AddPublishTask(revision, viewModel.Options.BulkPublishLaterDate.Value);
+ _pageScheduler.AddPublishTask(revision, options.BulkPublishLaterDate.Value);
}
}
else {
- return View("BulkPublishLater", viewModel);
+ return View("BulkPublishLater", new PageIndexViewModel {
+ Options = options,
+ PageEntries = pageEntries
+ });
}
break;
@@ -139,7 +142,7 @@ namespace Orchard.CmsPages.Controllers {
if (!_authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page")))
return new HttpUnauthorizedResult();
- if (viewModel.Options.BulkDeleteConfirmed) {
+ if (options.BulkDeleteConfirmed) {
//TODO: Transaction
foreach (PageEntry entry in checkedEntries) {
var page = _repository.Get(entry.PageId);
@@ -148,7 +151,10 @@ namespace Orchard.CmsPages.Controllers {
}
}
else {
- return View("BulkDeleteConfirm", viewModel);
+ return View("BulkDeleteConfirm", new PageIndexViewModel {
+ Options = options,
+ PageEntries = pageEntries
+ });
}
break;
@@ -159,7 +165,7 @@ namespace Orchard.CmsPages.Controllers {
catch (Exception ex) {
ModelState.AddModelError("", ex);
//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");
@@ -191,12 +197,12 @@ namespace Orchard.CmsPages.Controllers {
return View(model);
}
- [AcceptVerbs(HttpVerbs.Post)]
- public ActionResult Create(FormCollection input) {
+ [AcceptVerbs(HttpVerbs.Post), ActionName("Create")]
+ public ActionResult CreatePOST() {
var viewModel = new PageCreateViewModel { Templates = _templateProvider.List() };
try {
- UpdateModel(viewModel, input.ToValueProvider());
+ UpdateModel(viewModel);
if (!_authorizer.Authorize(Permissions.CreatePages, T("Couldn't create page")))
return new HttpUnauthorizedResult();
@@ -235,9 +241,9 @@ namespace Orchard.CmsPages.Controllers {
return View(model);
}
- [HttpPost]
+ [HttpPost, ActionName("Edit")]
[FormValueRequired("submit.Save")]
- public ActionResult Edit(int id, FormCollection input) {
+ public ActionResult EditPOST(int id) {
var model = new PageEditViewModel();
try {
//TODO: need a transaction to surround this entire lot, really
@@ -245,7 +251,7 @@ namespace Orchard.CmsPages.Controllers {
model.Revision = _pageManager.AcquireDraft(id);
model.Template = _templateProvider.Get(model.Revision.TemplateName);
- UpdateModel(model, input.ToValueProvider());
+ UpdateModel(model);
RemoveUnusedContentItems(model.Revision, model.Template);
_pageScheduler.ClearTasks(model.Revision.Page);
@@ -342,11 +348,11 @@ namespace Orchard.CmsPages.Controllers {
return View(viewModel);
}
- [AcceptVerbs(HttpVerbs.Post)]
- public ActionResult ChooseTemplate(int id, FormCollection input) {
+ [HttpPost, ActionName("ChooseTemplate")]
+ public ActionResult ChooseTemplatePOST(int id) {
var viewModel = new ChooseTemplateViewModel();
try {
- UpdateModel(viewModel, input.ToValueProvider());
+ UpdateModel(viewModel);
//todo: needs transaction
var draft = _pageManager.AcquireDraft(id);
diff --git a/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs b/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs
index a1b647ee2..544d60649 100644
--- a/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs
+++ b/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs
@@ -16,19 +16,16 @@ namespace Orchard.ContentManagement.Drivers {
}
public override void Apply(BuildDisplayModelContext context) {
- context.AddDisplay(new TemplateViewModel(Model, Prefix) {
- TemplateName = TemplateName,
- ZoneName = Zone,
- Position = Position
- });
+ context.DisplayModel.Zones.AddDisplayPart(
+ Zone + ":" + Position, Model, TemplateName, Prefix);
}
public override void Apply(BuildEditorModelContext context) {
context.AddEditor(new TemplateViewModel(Model, Prefix) {
- TemplateName = TemplateName,
- ZoneName = Zone,
- Position = Position
- });
+ TemplateName = TemplateName,
+ ZoneName = Zone,
+ Position = Position
+ });
}
public PartTemplateResult Location(string zone) {