diff --git a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj
index cf121c5..df29425 100644
--- a/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj
+++ b/app/Umbraco/Archetype.Tests/Archetype.Tests.csproj
@@ -49,7 +49,9 @@
+
+
diff --git a/app/Umbraco/Archetype.Tests/Data/sample-1.json b/app/Umbraco/Archetype.Tests/Data/sample-1.json
new file mode 100644
index 0000000..d33db6b
--- /dev/null
+++ b/app/Umbraco/Archetype.Tests/Data/sample-1.json
@@ -0,0 +1 @@
+{"fieldsets":[{"alias":"archUi","properties":[{"alias":"blurb","value":"A blurb here"},{"alias":"boxHeadline","value":"Box 1 Title"},{"alias":"link","value":"3175"},{"alias":"show","value":"1"}],"remove":false,"collapse":true,"isValid":true},{"alias":"archUi","properties":[{"alias":"boxHeadline","value":"Another Box"},{"alias":"blurb","value":"Some content"},{"alias":"link","value":"3175"},{"alias":"show","value":"0"}],"remove":false,"collapse":true,"isValid":true}]}
\ No newline at end of file
diff --git a/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs b/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs
new file mode 100644
index 0000000..3b1c401
--- /dev/null
+++ b/app/Umbraco/Archetype.Tests/Models/FieldsetTests.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Archetype.Umbraco.PropertyConverters;
+using NUnit.Framework;
+
+namespace Archetype.Tests.Models
+{
+
+ [TestFixture]
+ public class FieldsetTests
+ {
+
+ private string _sampleJson;
+
+ [SetUp]
+ public void SetUp()
+ {
+ _sampleJson = File.ReadAllText("..\\..\\Data\\sample-1.json");
+ }
+
+ [Test]
+ public void Can_Get_Fieldset_Property_By_Alias()
+ {
+ var converter = new ArchetypeValueConverter();
+ var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false);
+
+ var fieldset = result.Fieldsets.First();
+ var propertyValue = fieldset.GetValue("boxHeadline");
+
+ Assert.That(propertyValue == "Box 1 Title");
+ }
+
+ [Test]
+ public void Can_Convert_Property_Value_Types()
+ {
+ var converter = new ArchetypeValueConverter();
+ var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false);
+
+ var fieldset = result.Fieldsets.First();
+
+ Assert.That(fieldset.GetValue("link") == 3175);
+ Assert.That(fieldset.GetValue("show") == true);
+ Assert.That(fieldset.GetValue("blurb") == "A blurb here");
+ }
+
+ [Test]
+ public void Returns_String_When_No_Type_Specified()
+ {
+ var converter = new ArchetypeValueConverter();
+ var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false);
+
+ var fieldset = result.Fieldsets.First();
+
+ var property = fieldset.GetValue("link");
+ Assert.That(property is string);
+ Assert.That(property == "3175");
+ }
+
+ }
+}
diff --git a/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs b/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs
new file mode 100644
index 0000000..710be06
--- /dev/null
+++ b/app/Umbraco/Archetype.Tests/PropertyValueConverter/PropertyValueConverterTests.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Archetype.Umbraco.PropertyConverters;
+using Moq;
+using NUnit.Framework;
+using Umbraco.Core.Models.PublishedContent;
+
+namespace Archetype.Tests.PropertyValueConverter
+{
+ [TestFixture]
+ public class PropertyValueConverterTests
+ {
+
+ private string _sampleJson;
+
+ [SetUp]
+ public void SetUp()
+ {
+ _sampleJson = File.ReadAllText("..\\..\\Data\\sample-1.json");
+ }
+
+ [Test]
+ public void Returns_Null_When_Data_Is_Null()
+ {
+ var converter = new ArchetypeValueConverter();
+ var result = converter.ConvertDataToSource(null, null, false);
+
+ Assert.IsNull(result);
+ }
+
+ [Test]
+ public void Returns_Empty_String_When_Data_Is_Empty_String()
+ {
+ var data = "";
+ var converter = new ArchetypeValueConverter();
+ var result = converter.ConvertDataToSource(null, data, false);
+
+ Assert.AreEqual("", result);
+ }
+
+ [Test]
+ public void Returns_Original_String_When_Data_Is_Invalid_Json()
+ {
+ var data = "{ invalid";
+ var converter = new ArchetypeValueConverter();
+ var result = converter.ConvertDataToSource(null, data, false);
+
+ Assert.AreEqual(data, result);
+ }
+
+ [Test]
+ public void Can_Serialize_From_Json_Model()
+ {
+ var converter = new ArchetypeValueConverter();
+ var result = (Archetype.Umbraco.Models.Archetype)converter.ConvertDataToSource(null, _sampleJson, false);
+
+ Assert.That(result != null);
+ Assert.That(result.Fieldsets.Count() == 2);
+ }
+ }
+}