From cee7d73b01283bfd104b50173055dbfbea32c88d Mon Sep 17 00:00:00 2001 From: cankoluman Date: Tue, 29 Apr 2014 11:23:39 +0100 Subject: [PATCH] Issue #AR-1_serialization: finish tests for complex tree model use case --- .../ArchetypeJsonConverterComplexModelTest.cs | 166 +++++++++++++++--- .../Serialization/JsonTestModels.cs | 50 ++++++ .../Serialization/JsonTestStrings.cs | 165 +++++++++++++++++ 3 files changed, 361 insertions(+), 20 deletions(-) diff --git a/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterComplexModelTest.cs b/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterComplexModelTest.cs index 23ab046..dfd095a 100644 --- a/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterComplexModelTest.cs +++ b/app/Umbraco/Archetype.Tests/Serialization/ArchetypeJsonConverterComplexModelTest.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Archetype.Umbraco.PropertyConverters; using Newtonsoft.Json; using NUnit.Framework; @@ -15,28 +12,20 @@ namespace Archetype.Tests.Serialization private TextList _textList; private Captions _captions; private PageDetails _pageDetails; + + private SlideShow _slides; + private Seo _seo; + private TextPageList _textPages; + private PageList _pages; [SetUp] public void SetUp() { - _textList = new TextList - { - new TextItem{TextString = "First Page"}, - new TextItem{TextString = "Second Page"}, - new TextItem{TextString = "Third Page"}, - new TextItem{TextString = "Fourth Page"} - }; - - _captions = new Captions {TextStringArray = _textList}; - - _pageDetails = new PageDetails - { - Captions = _captions, - Pages = "2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453" - }; + InitComplexModels(); + InitComplexTreeModel(); } - #region serialization tests + #region complex nested model tests [Test] public void PageDetailsModel_Serializes_To_Archetype_Property() @@ -87,5 +76,142 @@ namespace Archetype.Tests.Serialization } #endregion + #region complex nested tree model tests + + [Test] + public void ConvertComplexNestedModelToArchetype() + { + var converter = new ArchetypeValueConverter(); + var json = JsonConvert.SerializeObject(_pages, Formatting.Indented); + var archetype = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, json, false); + + Assert.NotNull(archetype); + } + + [Test] + public void PagesModel_Serializes_To_Archetype_Property() + { + var result = JsonConvert.SerializeObject(_pages, Formatting.Indented); + Assert.AreEqual(JsonTestStrings._PAGES_JSON, result); + } + + [Test] + public void DeserializeComplexTreeModelFromArchetype() + { + var result = JsonConvert.DeserializeObject(JsonTestStrings._PAGES_JSON); + + Assert.NotNull(result); + Assert.IsInstanceOf(result); + + Assert.AreEqual("1,2,3,4,5,6,7,8", result.Pages.ElementAt(0).Media.Slides); + Assert.AreEqual("1,2,3,4,5,6,7,8", result.Pages.ElementAt(1).Media.Slides); + Assert.AreEqual("1,2,3,4,5,6,7,8", result.Pages.ElementAt(2).Media.Slides); + + Assert.AreEqual("Test Meta Title", result.Pages.ElementAt(0).Seo.MetaTitle); + Assert.AreEqual("Test Meta Description", result.Pages.ElementAt(0).Seo.MetaDescription); + Assert.AreEqual("Test Meta Title", result.Pages.ElementAt(1).Seo.MetaTitle); + Assert.AreEqual("Test Meta Description", result.Pages.ElementAt(1).Seo.MetaDescription); + Assert.AreEqual("Test Meta Title", result.Pages.ElementAt(2).Seo.MetaTitle); + Assert.AreEqual("Test Meta Description", result.Pages.ElementAt(2).Seo.MetaDescription); + + Assert.AreEqual("Home Page Body", result.Pages.ElementAt(0).BodyText); + Assert.AreEqual("Home Page", result.Pages.ElementAt(0).PageTitle); + Assert.AreEqual("About us Page Body", result.Pages.ElementAt(1).BodyText); + Assert.AreEqual("About us Page", result.Pages.ElementAt(1).PageTitle); + Assert.AreEqual("Contact us Page Body", result.Pages.ElementAt(2).BodyText); + Assert.AreEqual("Contact us Page", result.Pages.ElementAt(2).PageTitle); + + + } + + [Test] + public void SerializeThenDeserializeComplexTreeModelFromArchetype() + { + var json = JsonConvert.SerializeObject(_pages); + var result = JsonConvert.DeserializeObject(json); + + Assert.NotNull(result); + Assert.IsInstanceOf(result); + + Assert.AreEqual(_pages.Pages.ElementAt(0).Media.Slides, result.Pages.ElementAt(0).Media.Slides); + Assert.AreEqual(_pages.Pages.ElementAt(1).Media.Slides, result.Pages.ElementAt(1).Media.Slides); + Assert.AreEqual(_pages.Pages.ElementAt(2).Media.Slides, result.Pages.ElementAt(2).Media.Slides); + + Assert.AreEqual(_pages.Pages.ElementAt(0).Seo.MetaTitle, result.Pages.ElementAt(0).Seo.MetaTitle); + Assert.AreEqual(_pages.Pages.ElementAt(0).Seo.MetaDescription, result.Pages.ElementAt(0).Seo.MetaDescription); + Assert.AreEqual(_pages.Pages.ElementAt(1).Seo.MetaTitle, result.Pages.ElementAt(1).Seo.MetaTitle); + Assert.AreEqual(_pages.Pages.ElementAt(1).Seo.MetaDescription, result.Pages.ElementAt(1).Seo.MetaDescription); + Assert.AreEqual(_pages.Pages.ElementAt(2).Seo.MetaTitle, result.Pages.ElementAt(2).Seo.MetaTitle); + Assert.AreEqual(_pages.Pages.ElementAt(2).Seo.MetaDescription, result.Pages.ElementAt(2).Seo.MetaDescription); + + Assert.AreEqual(_pages.Pages.ElementAt(0).BodyText, result.Pages.ElementAt(0).BodyText); + Assert.AreEqual(_pages.Pages.ElementAt(0).PageTitle, result.Pages.ElementAt(0).PageTitle); + Assert.AreEqual(_pages.Pages.ElementAt(1).BodyText, result.Pages.ElementAt(1).BodyText); + Assert.AreEqual(_pages.Pages.ElementAt(1).PageTitle, result.Pages.ElementAt(1).PageTitle); + Assert.AreEqual(_pages.Pages.ElementAt(2).BodyText, result.Pages.ElementAt(2).BodyText); + Assert.AreEqual(_pages.Pages.ElementAt(2).PageTitle, result.Pages.ElementAt(2).PageTitle); + + + } + + #endregion + + #region utility methods + + private void InitComplexModels() + { + _textList = new TextList + { + new TextItem{TextString = "First Page"}, + new TextItem{TextString = "Second Page"}, + new TextItem{TextString = "Third Page"}, + new TextItem{TextString = "Fourth Page"} + }; + + _captions = new Captions {TextStringArray = _textList}; + + _pageDetails = new PageDetails + { + Captions = _captions, + Pages = "2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453" + }; + } + + private void InitComplexTreeModel() + { + _slides = new SlideShow{Slides = "1,2,3,4,5,6,7,8"}; + _seo = new Seo{MetaDescription = "Test Meta Description", MetaTitle = "Test Meta Title"}; + _textPages = new TextPageList + { + new TextPage() + { + PageTitle = "Home Page", + BodyText = "Home Page Body", + Media = _slides, + Seo = _seo + }, + new TextPage() + { + PageTitle = "About us Page", + BodyText = "About us Page Body", + Media = _slides, + Seo = _seo + }, + new TextPage() + { + PageTitle = "Contact us Page", + BodyText = "Contact us Page Body", + Media = _slides, + Seo = _seo + } + }; + + _pages = new PageList + { + Pages = _textPages + }; + } + + #endregion } } diff --git a/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs b/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs index 24b13dd..e09c3a7 100644 --- a/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs +++ b/app/Umbraco/Archetype.Tests/Serialization/JsonTestModels.cs @@ -127,4 +127,54 @@ namespace Archetype.Tests.Serialization } #endregion + + #region complex nested tree model + + public abstract class PageBase + { + public string PageTitle { get; set; } + public string BodyText { get; set; } + } + + [AsArchetype("slideShow")] + [JsonConverter(typeof(ArchetypeJsonConverter))] + public class SlideShow + { + public string Slides { get; set; } + } + + [AsArchetype("seo")] + [JsonConverter(typeof(ArchetypeJsonConverter))] + public class Seo + { + public string MetaTitle { get; set; } + public string MetaDescription { get; set; } + } + + [AsArchetype("TextPage")] + [JsonConverter(typeof(ArchetypeJsonConverter))] + public class TextPage : PageBase + { + [AsFieldset] + public SlideShow Media { get; set; } + + [AsFieldset] + public Seo Seo { get; set; } + } + + [AsArchetype("TextPageList")] + [JsonConverter(typeof(ArchetypeJsonConverter))] + public class TextPageList : List + { + } + + [AsArchetype("Pages")] + [JsonConverter(typeof(ArchetypeJsonConverter))] + public class PageList + { + [AsArchetype("Pages")] + public TextPageList Pages { get; set; } + } + + #endregion } diff --git a/app/Umbraco/Archetype.Tests/Serialization/JsonTestStrings.cs b/app/Umbraco/Archetype.Tests/Serialization/JsonTestStrings.cs index 83dce45..5061e8c 100644 --- a/app/Umbraco/Archetype.Tests/Serialization/JsonTestStrings.cs +++ b/app/Umbraco/Archetype.Tests/Serialization/JsonTestStrings.cs @@ -265,6 +265,171 @@ ] }"; + public const string _PAGES_JSON = + @"{ + ""fieldsets"": [ + { + ""alias"": ""Pages"", + ""properties"": [ + { + ""alias"": ""Pages"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""TextPage"", + ""properties"": [ + { + ""alias"": ""Media"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""slideShow"", + ""properties"": [ + { + ""alias"": ""Slides"", + ""value"": ""1,2,3,4,5,6,7,8"" + } + ] + } + ] + } + }, + { + ""alias"": ""Seo"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""seo"", + ""properties"": [ + { + ""alias"": ""MetaTitle"", + ""value"": ""Test Meta Title"" + }, + { + ""alias"": ""MetaDescription"", + ""value"": ""Test Meta Description"" + } + ] + } + ] + } + }, + { + ""alias"": ""PageTitle"", + ""value"": ""Home Page"" + }, + { + ""alias"": ""BodyText"", + ""value"": ""Home Page Body"" + } + ] + }, + { + ""alias"": ""TextPage"", + ""properties"": [ + { + ""alias"": ""Media"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""slideShow"", + ""properties"": [ + { + ""alias"": ""Slides"", + ""value"": ""1,2,3,4,5,6,7,8"" + } + ] + } + ] + } + }, + { + ""alias"": ""Seo"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""seo"", + ""properties"": [ + { + ""alias"": ""MetaTitle"", + ""value"": ""Test Meta Title"" + }, + { + ""alias"": ""MetaDescription"", + ""value"": ""Test Meta Description"" + } + ] + } + ] + } + }, + { + ""alias"": ""PageTitle"", + ""value"": ""About us Page"" + }, + { + ""alias"": ""BodyText"", + ""value"": ""About us Page Body"" + } + ] + }, + { + ""alias"": ""TextPage"", + ""properties"": [ + { + ""alias"": ""Media"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""slideShow"", + ""properties"": [ + { + ""alias"": ""Slides"", + ""value"": ""1,2,3,4,5,6,7,8"" + } + ] + } + ] + } + }, + { + ""alias"": ""Seo"", + ""value"": { + ""fieldsets"": [ + { + ""alias"": ""seo"", + ""properties"": [ + { + ""alias"": ""MetaTitle"", + ""value"": ""Test Meta Title"" + }, + { + ""alias"": ""MetaDescription"", + ""value"": ""Test Meta Description"" + } + ] + } + ] + } + }, + { + ""alias"": ""PageTitle"", + ""value"": ""Contact us Page"" + }, + { + ""alias"": ""BodyText"", + ""value"": ""Contact us Page Body"" + } + ] + } + ] + } + } + ] + } + ] +}"; + public const string _NULL_VALUES_JSON = @"{""fieldsets"":[{""alias"":""contactDetails"",""properties"":[{""alias"":""name"",""value"":""""},{""alias"":""address"",""value"":""""},{""alias"":""telephone"",""value"":""""},{""alias"":""mobile"",""value"":""""},{""alias"":""fax"",""value"":""""},{""alias"":""email"",""value"":""""},{""alias"":""webSite"",""value"":""""}]}]}"; } }