More work on deep cloning, have test passing for IContent
This commit is contained in:
@@ -420,9 +420,9 @@ namespace Umbraco.Tests.Models.Collections
|
||||
return _hash.Value;
|
||||
}*/
|
||||
|
||||
public T DeepClone<T>() where T : IDeepCloneable
|
||||
public object DeepClone()
|
||||
{
|
||||
return (T)this.MemberwiseClone();
|
||||
return this.MemberwiseClone();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using System.Web;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.EntityBase;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Tests.TestHelpers.Entities;
|
||||
|
||||
@@ -111,7 +112,7 @@ namespace Umbraco.Tests.Models
|
||||
|
||||
|
||||
[Test]
|
||||
public void Can_Clone_Content()
|
||||
public void Can_Clone_Content_With_Reset_Identity()
|
||||
{
|
||||
// Arrange
|
||||
var contentType = MockedContentTypes.CreateTextpageContentType();
|
||||
@@ -120,7 +121,7 @@ namespace Umbraco.Tests.Models
|
||||
content.Key = new Guid("29181B97-CB8F-403F-86DE-5FEB497F4800");
|
||||
|
||||
// Act
|
||||
var clone = content.DeepClone<IContent>();
|
||||
var clone = content.Clone();
|
||||
|
||||
// Assert
|
||||
Assert.AreNotSame(clone, content);
|
||||
@@ -131,6 +132,99 @@ namespace Umbraco.Tests.Models
|
||||
Assert.AreNotSame(content.Properties, clone.Properties);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Deep_Clone()
|
||||
{
|
||||
// Arrange
|
||||
var contentType = MockedContentTypes.CreateTextpageContentType();
|
||||
contentType.Id = 99;
|
||||
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
|
||||
var i = 200;
|
||||
foreach (var property in content.Properties)
|
||||
{
|
||||
property.Id = ++i;
|
||||
}
|
||||
content.Id = 10;
|
||||
content.CreateDate = DateTime.Now;
|
||||
content.CreatorId = 22;
|
||||
content.ExpireDate = DateTime.Now;
|
||||
content.Key = Guid.NewGuid();
|
||||
content.Language = "en";
|
||||
content.Level = 3;
|
||||
content.Path = "-1,4,10";
|
||||
content.ReleaseDate = DateTime.Now;
|
||||
content.ChangePublishedState(PublishedState.Published);
|
||||
content.SortOrder = 5;
|
||||
content.Template = new Template("-1,2,3,4", "Test Template", "testTemplate")
|
||||
{
|
||||
Id = 88
|
||||
};
|
||||
content.Trashed = false;
|
||||
content.UpdateDate = DateTime.Now;
|
||||
content.Version = Guid.NewGuid();
|
||||
content.WriterId = 23;
|
||||
|
||||
((IUmbracoEntity)content).AdditionalData.Add("test1", 123);
|
||||
((IUmbracoEntity)content).AdditionalData.Add("test2", "hello");
|
||||
|
||||
// Act
|
||||
var clone = (Content)content.DeepClone();
|
||||
|
||||
// Assert
|
||||
Assert.AreNotSame(clone, content);
|
||||
Assert.AreEqual(clone, content);
|
||||
Assert.AreEqual(clone.Id, content.Id);
|
||||
Assert.AreEqual(clone.Version, content.Version);
|
||||
Assert.AreEqual(((IUmbracoEntity)clone).AdditionalData, ((IUmbracoEntity)content).AdditionalData);
|
||||
Assert.AreNotSame(clone.ContentType, content.ContentType);
|
||||
Assert.AreEqual(clone.ContentType, content.ContentType);
|
||||
Assert.AreEqual(clone.ContentType.PropertyGroups.Count, content.ContentType.PropertyGroups.Count);
|
||||
for (var index = 0; index < content.ContentType.PropertyGroups.Count; index++)
|
||||
{
|
||||
Assert.AreNotSame(clone.ContentType.PropertyGroups[index], content.ContentType.PropertyGroups[index]);
|
||||
Assert.AreEqual(clone.ContentType.PropertyGroups[index], content.ContentType.PropertyGroups[index]);
|
||||
}
|
||||
Assert.AreEqual(clone.ContentType.PropertyTypes.Count(), content.ContentType.PropertyTypes.Count());
|
||||
for (var index = 0; index < content.ContentType.PropertyTypes.Count(); index++)
|
||||
{
|
||||
Assert.AreNotSame(clone.ContentType.PropertyTypes.ElementAt(index), content.ContentType.PropertyTypes.ElementAt(index));
|
||||
Assert.AreEqual(clone.ContentType.PropertyTypes.ElementAt(index), content.ContentType.PropertyTypes.ElementAt(index));
|
||||
}
|
||||
Assert.AreEqual(clone.ContentTypeId, content.ContentTypeId);
|
||||
Assert.AreEqual(clone.CreateDate, content.CreateDate);
|
||||
Assert.AreEqual(clone.CreatorId, content.CreatorId);
|
||||
Assert.AreEqual(clone.ExpireDate, content.ExpireDate);
|
||||
Assert.AreEqual(clone.Key, content.Key);
|
||||
Assert.AreEqual(clone.Language, content.Language);
|
||||
Assert.AreEqual(clone.Level, content.Level);
|
||||
Assert.AreEqual(clone.Path, content.Path);
|
||||
Assert.AreEqual(clone.ReleaseDate, content.ReleaseDate);
|
||||
Assert.AreEqual(clone.Published, content.Published);
|
||||
Assert.AreEqual(clone.PublishedState, content.PublishedState);
|
||||
Assert.AreEqual(clone.SortOrder, content.SortOrder);
|
||||
Assert.AreEqual(clone.PublishedState, content.PublishedState);
|
||||
Assert.AreNotSame(clone.Template, content.Template);
|
||||
Assert.AreEqual(clone.Template, content.Template);
|
||||
Assert.AreEqual(clone.Trashed, content.Trashed);
|
||||
Assert.AreEqual(clone.UpdateDate, content.UpdateDate);
|
||||
Assert.AreEqual(clone.Version, content.Version);
|
||||
Assert.AreEqual(clone.WriterId, content.WriterId);
|
||||
Assert.AreNotSame(clone.Properties, content.Properties);
|
||||
Assert.AreEqual(clone.Properties.Count(), content.Properties.Count());
|
||||
for (var index = 0; index < content.Properties.Count; index++)
|
||||
{
|
||||
Assert.AreNotSame(clone.Properties[index], content.Properties[index]);
|
||||
Assert.AreEqual(clone.Properties[index], content.Properties[index]);
|
||||
}
|
||||
|
||||
//This double verifies by reflection
|
||||
var allProps = clone.GetType().GetProperties();
|
||||
foreach (var propertyInfo in allProps)
|
||||
{
|
||||
Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(content, null));
|
||||
}
|
||||
}
|
||||
|
||||
/*[Test]
|
||||
public void Cannot_Change_Property_With_Invalid_Value()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user