diff --git a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs index 33111d4b3e..51e8d2a6aa 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MacroRepository.cs @@ -44,7 +44,7 @@ namespace Umbraco.Core.Persistence.Repositories { var name = string.Concat(id, ".macro"); Stream file = _fileSystem.OpenFile(name); - var o = _serializationService.FromStream(file, typeof(IMacro)); + var o = _serializationService.FromStream(file, typeof(Macro)); var macro = o as IMacro; if(macro != null) diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config index 06db4d81a9..6dbed2f883 100644 --- a/src/Umbraco.Tests/App.config +++ b/src/Umbraco.Tests/App.config @@ -105,7 +105,7 @@ - + diff --git a/src/Umbraco.Tests/Models/MacroTests.cs b/src/Umbraco.Tests/Models/MacroTests.cs new file mode 100644 index 0000000000..68d3e1b1d5 --- /dev/null +++ b/src/Umbraco.Tests/Models/MacroTests.cs @@ -0,0 +1,166 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using NUnit.Framework; +using Umbraco.Core.IO; +using Umbraco.Core.Models; +using Umbraco.Core.Serialization; + +namespace Umbraco.Tests.Models +{ + [TestFixture] + public class MacroTests + { + [Test] + public void Can_Create_And_Serialize_Macro() + { + // Arrange + var serviceStackSerializer = new ServiceStackJsonSerializer(); + var serializationService = new SerializationService(serviceStackSerializer); + + var macro = new Macro + { + Alias = "test", + CacheByPage = false, + CacheByMember = false, + DontRender = true, + Name = "Test", + Xslt = "/xslt/testMacro.xslt", + UseInEditor = false + }; + + macro.Properties = new List(); + macro.Properties.Add(new MacroProperty { Alias = "level", Name = "Level", SortOrder = 0, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Number() }); + macro.Properties.Add(new MacroProperty { Alias = "fixedTitle", Name = "Fixed Title", SortOrder = 1, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Text() }); + + // Act + var json = serializationService.ToStream(macro); + string jsonString = json.ResultStream.ToJsonString(); + + // Assert + Assert.That(json, Is.Not.Null); + Assert.That(json.Success, Is.True); + Assert.That(jsonString, Is.Not.Empty); + Assert.That(jsonString.StartsWith("{"), Is.True); + Assert.That(jsonString.EndsWith("}"), Is.True); + } + + [Test] + public void Can_Create_And_Serialize_Then_Deserialize_Macro() + { + // Arrange + var serviceStackSerializer = new ServiceStackJsonSerializer(); + var serializationService = new SerializationService(serviceStackSerializer); + + var macro = new Macro + { + Alias = "test", + CacheByPage = false, + CacheByMember = false, + DontRender = true, + Name = "Test", + Xslt = "/xslt/testMacro.xslt", + UseInEditor = false + }; + + macro.Properties = new List(); + macro.Properties.Add(new MacroProperty { Alias = "level", Name = "Level", SortOrder = 0, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Number() }); + macro.Properties.Add(new MacroProperty { Alias = "fixedTitle", Name = "Fixed Title", SortOrder = 1, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Text() }); + + // Act + var json = serializationService.ToStream(macro); + string jsonString = json.ResultStream.ToJsonString(); + + var deserialized = serializationService.FromJson(jsonString); + + var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); + object o = serializationService.FromStream(stream, typeof (Macro)); + var deserialized2 = o as IMacro; + + // Assert + Assert.That(json.Success, Is.True); + Assert.That(jsonString, Is.Not.Empty); + Assert.That(deserialized, Is.Not.Null); + Assert.That(deserialized2, Is.Not.Null); + Assert.That(deserialized.Name, Is.EqualTo(macro.Name)); + Assert.That(deserialized.Alias, Is.EqualTo(macro.Alias)); + Assert.That(deserialized2.Name, Is.EqualTo(macro.Name)); + Assert.That(deserialized2.Alias, Is.EqualTo(macro.Alias)); + } + + [Test] + public void Can_Write_Serialized_Macro_To_Disc() + { + // Arrange + var serviceStackSerializer = new ServiceStackJsonSerializer(); + var serializationService = new SerializationService(serviceStackSerializer); + var fileSystem = FileSystemProviderManager.Current.GetFileSystemProvider("macros"); + + var macro = new Macro + { + Alias = "test", + CacheByPage = false, + CacheByMember = false, + DontRender = true, + Name = "Test", + Xslt = "/xslt/testMacro.xslt", + UseInEditor = false + }; + + macro.Properties = new List(); + macro.Properties.Add(new MacroProperty { Alias = "level", Name = "Level", SortOrder = 0, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Number() }); + macro.Properties.Add(new MacroProperty { Alias = "fixedTitle", Name = "Fixed Title", SortOrder = 1, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Text() }); + + // Act + var json = serializationService.ToStream(macro); + string jsonString = json.ResultStream.ToJsonString(); + fileSystem.AddFile("test-serialized-Macro.macro", json.ResultStream, true); + + // Assert + Assert.That(json.Success, Is.True); + Assert.That(jsonString, Is.Not.Empty); + Assert.That(fileSystem.FileExists("test-serialized-Macro.macro"), Is.True); + } + + [Test] + public void Can_Read_And_Deserialize_Macro_From_Disc() + { + // Arrange + var serviceStackSerializer = new ServiceStackJsonSerializer(); + var serializationService = new SerializationService(serviceStackSerializer); + var fileSystem = FileSystemProviderManager.Current.GetFileSystemProvider("macros"); + + var macro = new Macro + { + Alias = "test", + CacheByPage = false, + CacheByMember = false, + DontRender = true, + Name = "Test", + Xslt = "/xslt/testMacro.xslt", + UseInEditor = false + }; + + macro.Properties = new List(); + macro.Properties.Add(new MacroProperty { Alias = "level", Name = "Level", SortOrder = 0, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Number() }); + macro.Properties.Add(new MacroProperty { Alias = "fixedTitle", Name = "Fixed Title", SortOrder = 1, PropertyType = new Umbraco.Core.Macros.PropertyTypes.Text() }); + + // Act + var json = serializationService.ToStream(macro); + string jsonString = json.ResultStream.ToJsonString(); + fileSystem.AddFile("test-serialized-Macro.macro", json.ResultStream, true); + + Stream stream = fileSystem.OpenFile("test-serialized-Macro.macro"); + object o = serializationService.FromStream(stream, typeof(Macro)); + var deserialized = o as IMacro; + + // Assert + Assert.That(json.Success, Is.True); + Assert.That(jsonString, Is.Not.Empty); + Assert.That(fileSystem.FileExists("test-serialized-Macro.macro"), Is.True); + Assert.That(deserialized, Is.Not.Null); + Assert.That(deserialized.Name, Is.EqualTo(macro.Name)); + Assert.That(deserialized.Alias, Is.EqualTo(macro.Alias)); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 3b64d70497..e2e2351b5c 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -96,6 +96,7 @@ +