Adds tests for verifying remember dirty properties on content

This commit is contained in:
Shannon
2018-10-25 16:09:58 +11:00
parent 42f0d2b356
commit de313a5d19
2 changed files with 107 additions and 0 deletions

View File

@@ -467,6 +467,9 @@ namespace Umbraco.Core.Models
{
base.ResetDirtyProperties(rememberDirty);
Template.ResetDirtyProperties(rememberDirty);
ContentType.ResetDirtyProperties(rememberDirty);
// take care of the published state
_publishedState = _published ? PublishedState.Published : PublishedState.Unpublished;

View File

@@ -271,8 +271,13 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextpageContentType();
contentType.Id = 99;
contentType.Variations = ContentVariation.Culture;
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.SetCultureName("Hello", "en-US");
content.SetCultureName("World", "es-ES");
content.PublishCulture("en-US");
// should not try to clone something that's not Published or Unpublished
// (and in fact it will not work)
// but we cannot directly set the state to Published - hence this trick
@@ -301,6 +306,8 @@ namespace Umbraco.Tests.Models
content.UpdateDate = DateTime.Now;
content.WriterId = 23;
// Act
var clone = (Content)content.DeepClone();
@@ -349,6 +356,22 @@ namespace Umbraco.Tests.Models
Assert.AreEqual(clone.Properties[index], content.Properties[index]);
}
Assert.AreNotSame(clone.PublishCultureInfos, content.PublishCultureInfos);
Assert.AreEqual(clone.PublishCultureInfos.Count, content.PublishCultureInfos.Count);
foreach (var key in content.PublishCultureInfos.Keys)
{
Assert.AreNotSame(clone.PublishCultureInfos[key], content.PublishCultureInfos[key]);
Assert.AreEqual(clone.PublishCultureInfos[key], content.PublishCultureInfos[key]);
}
Assert.AreNotSame(clone.CultureInfos, content.CultureInfos);
Assert.AreEqual(clone.CultureInfos.Count, content.CultureInfos.Count);
foreach (var key in content.CultureInfos.Keys)
{
Assert.AreNotSame(clone.CultureInfos[key], content.CultureInfos[key]);
Assert.AreEqual(clone.CultureInfos[key], content.CultureInfos[key]);
}
//This double verifies by reflection
var allProps = clone.GetType().GetProperties();
foreach (var propertyInfo in allProps)
@@ -369,6 +392,87 @@ namespace Umbraco.Tests.Models
Assert.IsTrue(asDirty.IsPropertyDirty("Properties"));
}
[Test]
public void Remember_Dirty_Properties()
{
// Arrange
var contentType = MockedContentTypes.CreateTextpageContentType();
contentType.Id = 99;
contentType.Variations = ContentVariation.Culture;
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.SetCultureName("Hello", "en-US");
content.SetCultureName("World", "es-ES");
content.PublishCulture("en-US");
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.Level = 3;
content.Path = "-1,4,10";
content.ReleaseDate = DateTime.Now;
content.SortOrder = 5;
content.Template = new Template((string)"Test Template", (string)"testTemplate")
{
Id = 88
};
content.Trashed = true;
content.UpdateDate = DateTime.Now;
content.WriterId = 23;
content.Template.UpdateDate = DateTime.Now; //update a child object
content.ContentType.UpdateDate = DateTime.Now; //update a child object
// Act
content.ResetDirtyProperties();
// Assert
Assert.IsTrue(content.WasDirty());
Assert.IsTrue(content.WasPropertyDirty("Id"));
Assert.IsTrue(content.WasPropertyDirty("CreateDate"));
Assert.IsTrue(content.WasPropertyDirty("CreatorId"));
Assert.IsTrue(content.WasPropertyDirty("ExpireDate"));
Assert.IsTrue(content.WasPropertyDirty("Key"));
Assert.IsTrue(content.WasPropertyDirty("Level"));
Assert.IsTrue(content.WasPropertyDirty("Path"));
Assert.IsTrue(content.WasPropertyDirty("ReleaseDate"));
Assert.IsTrue(content.WasPropertyDirty("SortOrder"));
Assert.IsTrue(content.WasPropertyDirty("Template"));
Assert.IsTrue(content.WasPropertyDirty("Trashed"));
Assert.IsTrue(content.WasPropertyDirty("UpdateDate"));
Assert.IsTrue(content.WasPropertyDirty("WriterId"));
foreach (var prop in content.Properties)
{
Assert.IsTrue(prop.WasDirty());
Assert.IsTrue(prop.WasPropertyDirty("Id"));
}
Assert.IsTrue(content.WasPropertyDirty("CultureInfos"));
foreach(var culture in content.CultureInfos)
{
Assert.IsTrue(culture.Value.WasDirty());
Assert.IsTrue(culture.Value.WasPropertyDirty("Name"));
Assert.IsTrue(culture.Value.WasPropertyDirty("Date"));
}
Assert.IsTrue(content.WasPropertyDirty("PublishCultureInfos"));
foreach (var culture in content.PublishCultureInfos)
{
Assert.IsTrue(culture.Value.WasDirty());
Assert.IsTrue(culture.Value.WasPropertyDirty("Name"));
Assert.IsTrue(culture.Value.WasPropertyDirty("Date"));
}
//verify child objects were reset too
Assert.IsTrue(content.Template.WasPropertyDirty("UpdateDate"));
Assert.IsTrue(content.ContentType.WasPropertyDirty("UpdateDate"));
}
[Test]
public void Can_Serialize_Without_Error()
{