From 7cc0f2a514261518fb062aac4e01b3711b05dc22 Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Tue, 5 Mar 2013 05:56:53 +0600 Subject: [PATCH] Fixes: #U4-1819 --- .../EnumerableExtensionsTests.cs | 71 +++++++++++++++++++ src/Umbraco.Web/Mvc/NotChildAction.cs | 20 ++++++ src/Umbraco.Web/Umbraco.Web.csproj | 1 + 3 files changed, 92 insertions(+) create mode 100644 src/Umbraco.Web/Mvc/NotChildAction.cs diff --git a/src/Umbraco.Tests/EnumerableExtensionsTests.cs b/src/Umbraco.Tests/EnumerableExtensionsTests.cs index 64f0c6a381..6a311340b0 100644 --- a/src/Umbraco.Tests/EnumerableExtensionsTests.cs +++ b/src/Umbraco.Tests/EnumerableExtensionsTests.cs @@ -10,6 +10,77 @@ namespace Umbraco.Tests [TestFixture] public class EnumerableExtensionsTests { + + [Test] + public void Flatten_List() + { + var hierarchy = new TestItem() + { + Children = new List() + { + new TestItem() + { + Children = new List() + { + new TestItem() + { + Children = new List() + { + new TestItem() + { + Children = new List() + { + new TestItem(), + new TestItem() + } + } + } + } + } + }, + new TestItem() + { + Children = new List() + { + new TestItem() + { + Children = new List() + { + new TestItem() + { + Children = new List() + } + } + }, + new TestItem() + { + Children = new List() + { + new TestItem() + { + Children = new List() + } + } + } + } + }, + } + }; + + var flattened = hierarchy.Children.FlattenList(x => x.Children); + + Assert.AreEqual(10, flattened.Count()); + } + + private class TestItem + { + public TestItem() + { + Children = Enumerable.Empty(); + } + public IEnumerable Children { get; set; } + } + [Test] public void InGroupsOf_ReturnsAllElements() { diff --git a/src/Umbraco.Web/Mvc/NotChildAction.cs b/src/Umbraco.Web/Mvc/NotChildAction.cs new file mode 100644 index 0000000000..8106ac47b1 --- /dev/null +++ b/src/Umbraco.Web/Mvc/NotChildAction.cs @@ -0,0 +1,20 @@ +using System.Web.Mvc; + +namespace Umbraco.Web.Mvc +{ + /// + /// Used to ensure that actions with duplicate names that are not child actions don't get executed when + /// we are Posting and not redirecting. + /// + /// + /// See issue: http://issues.umbraco.org/issue/U4-1819 + /// + public class NotChildAction : ActionMethodSelectorAttribute + { + public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo) + { + var isChildAction = controllerContext.IsChildAction; + return !isChildAction; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 7781076be3..9fb91811c5 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -273,6 +273,7 @@ +