From 097014454f9da44f85fc4487e4883a3fd2c7ce7f Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Fri, 27 Jun 2014 12:42:15 +0200 Subject: [PATCH] Fixing issue in MacroRepository which was causing a test to fail. Changing the alias of a macro property didn't alias work, so added a fallback to the Id of the property in the cases where the Alias wouldn't work. --- .../Repositories/MacroRepository.cs | 18 ++++++++++-- .../Services/MacroServiceTests.cs | 29 +++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs index c8ffcbe68a..f8c6955ada 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs @@ -188,10 +188,22 @@ namespace Umbraco.Core.Persistence.Repositories } else { - //only update if it's dirty - if (macro.Properties[propDto.Alias].IsDirty()) + //This will only work if the Alias hasn't been changed + if (macro.Properties.ContainsKey(propDto.Alias)) { - Database.Update(propDto); + //only update if it's dirty + if (macro.Properties[propDto.Alias].IsDirty()) + { + Database.Update(propDto); + } + } + else + { + var property = macro.Properties.FirstOrDefault(x => x.Id == propDto.Id); + if (property != null && property.IsDirty()) + { + Database.Update(propDto); + } } } } diff --git a/src/Umbraco.Tests/Services/MacroServiceTests.cs b/src/Umbraco.Tests/Services/MacroServiceTests.cs index d88dd26dd4..9f81ffab9a 100644 --- a/src/Umbraco.Tests/Services/MacroServiceTests.cs +++ b/src/Umbraco.Tests/Services/MacroServiceTests.cs @@ -150,6 +150,35 @@ namespace Umbraco.Tests.Services } + [Test] + public void Can_Update_Remove_Property() + { + // Arrange + var macroService = ServiceContext.MacroService; + IMacro macro = new Macro("test", "Test", scriptPath: "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); + macro.Properties.Add(new MacroProperty("blah1", "Blah1", 0, "blah1")); + macro.Properties.Add(new MacroProperty("blah2", "Blah2", 1, "blah2")); + macro.Properties.Add(new MacroProperty("blah3", "Blah3", 2, "blah3")); + macroService.Save(macro); + + // Act + macro.Properties["blah1"].Alias = "newAlias"; + macro.Properties["blah1"].Name = "new Name"; + macro.Properties["blah1"].SortOrder = 1; + macro.Properties["blah1"].EditorAlias = "new"; + macro.Properties.Remove("blah3"); + macroService.Save(macro); + + macro = macroService.GetById(macro.Id); + + //assert + Assert.AreEqual(2, macro.Properties.Count()); + Assert.AreEqual("newAlias", macro.Properties["newAlias"].Alias); + Assert.AreEqual("new Name", macro.Properties["newAlias"].Name); + Assert.AreEqual(1, macro.Properties["newAlias"].SortOrder); + Assert.AreEqual("new", macro.Properties["newAlias"].EditorAlias); + } + [Test] public void Can_Add_And_Remove_Properties() {