From 23b7e94ce32aa5f42b7d3251162de2abfd2bab97 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 12:36:38 +1000 Subject: [PATCH] Fixes pretty big issue with MediaType's not implementing the same IsDirty property check rules as ContentType when they should have shared the same rules. After removing caching on the unit tests, this bug became known. --- src/Umbraco.Core/Models/ContentType.cs | 62 +------------------ src/Umbraco.Core/Models/ContentTypeBase.cs | 60 ++++++++++++++++++ .../Repositories/ContentTypeRepositoryTest.cs | 15 +++-- .../Repositories/MediaTypeRepositoryTest.cs | 4 +- .../Repositories/ScriptRepositoryTest.cs | 4 +- .../Repositories/StylesheetRepositoryTest.cs | 5 +- 6 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/Umbraco.Core/Models/ContentType.cs b/src/Umbraco.Core/Models/ContentType.cs index df2a7bc1ef..46bf9bdc18 100644 --- a/src/Umbraco.Core/Models/ContentType.cs +++ b/src/Umbraco.Core/Models/ContentType.cs @@ -120,67 +120,7 @@ namespace Umbraco.Core.Models return result; } - - /// - /// Indicates whether a specific property on the current entity is dirty. - /// - /// Name of the property to check - /// True if Property is dirty, otherwise False - public override bool IsPropertyDirty(string propertyName) - { - bool existsInEntity = base.IsPropertyDirty(propertyName); - - bool anyDirtyGroups = PropertyGroups.Any(x => x.IsPropertyDirty(propertyName)); - bool anyDirtyTypes = PropertyTypes.Any(x => x.IsPropertyDirty(propertyName)); - - return existsInEntity || anyDirtyGroups || anyDirtyTypes; - } - - /// - /// Indicates whether the current entity is dirty. - /// - /// True if entity is dirty, otherwise False - public override bool IsDirty() - { - bool dirtyEntity = base.IsDirty(); - - bool dirtyGroups = PropertyGroups.Any(x => x.IsDirty()); - bool dirtyTypes = PropertyTypes.Any(x => x.IsDirty()); - - return dirtyEntity || dirtyGroups || dirtyTypes; - } - - /// - /// Resets dirty properties by clearing the dictionary used to track changes. - /// - /// - /// Please note that resetting the dirty properties could potentially - /// obstruct the saving of a new or updated entity. - /// - public override void ResetDirtyProperties() - { - base.ResetDirtyProperties(); - - //loop through each property group to reset the property types - var propertiesReset = new List(); - - foreach (var propertyGroup in PropertyGroups) - { - propertyGroup.ResetDirtyProperties(); - foreach (var propertyType in propertyGroup.PropertyTypes) - { - propertyType.ResetDirtyProperties(); - propertiesReset.Add(propertyType.Id); - } - } - //then loop through our property type collection since some might not exist on a property group - //but don't re-reset ones we've already done. - foreach (var propertyType in PropertyTypes.Where(x => propertiesReset.Contains(x.Id) == false)) - { - propertyType.ResetDirtyProperties(); - } - } - + /// /// Creates a clone of the current entity /// diff --git a/src/Umbraco.Core/Models/ContentTypeBase.cs b/src/Umbraco.Core/Models/ContentTypeBase.cs index dc5d9c7898..e8d2effbc1 100644 --- a/src/Umbraco.Core/Models/ContentTypeBase.cs +++ b/src/Umbraco.Core/Models/ContentTypeBase.cs @@ -503,5 +503,65 @@ namespace Umbraco.Core.Models { get { return _propertyTypes; } } + + /// + /// Indicates whether a specific property on the current entity is dirty. + /// + /// Name of the property to check + /// True if Property is dirty, otherwise False + public override bool IsPropertyDirty(string propertyName) + { + bool existsInEntity = base.IsPropertyDirty(propertyName); + + bool anyDirtyGroups = PropertyGroups.Any(x => x.IsPropertyDirty(propertyName)); + bool anyDirtyTypes = PropertyTypes.Any(x => x.IsPropertyDirty(propertyName)); + + return existsInEntity || anyDirtyGroups || anyDirtyTypes; + } + + /// + /// Indicates whether the current entity is dirty. + /// + /// True if entity is dirty, otherwise False + public override bool IsDirty() + { + bool dirtyEntity = base.IsDirty(); + + bool dirtyGroups = PropertyGroups.Any(x => x.IsDirty()); + bool dirtyTypes = PropertyTypes.Any(x => x.IsDirty()); + + return dirtyEntity || dirtyGroups || dirtyTypes; + } + + /// + /// Resets dirty properties by clearing the dictionary used to track changes. + /// + /// + /// Please note that resetting the dirty properties could potentially + /// obstruct the saving of a new or updated entity. + /// + public override void ResetDirtyProperties() + { + base.ResetDirtyProperties(); + + //loop through each property group to reset the property types + var propertiesReset = new List(); + + foreach (var propertyGroup in PropertyGroups) + { + propertyGroup.ResetDirtyProperties(); + foreach (var propertyType in propertyGroup.PropertyTypes) + { + propertyType.ResetDirtyProperties(); + propertiesReset.Add(propertyType.Id); + } + } + //then loop through our property type collection since some might not exist on a property group + //but don't re-reset ones we've already done. + foreach (var propertyType in PropertyTypes.Where(x => propertiesReset.Contains(x.Id) == false)) + { + propertyType.ResetDirtyProperties(); + } + } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index a099b3c5a2..e5c782c00d 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -212,18 +212,17 @@ namespace Umbraco.Tests.Persistence.Repositories { var contentType = repository.Get(1046); - // Act - var contentType2 = repository.Get(1046); - contentType2.PropertyGroups["Meta"].PropertyTypes.Remove("metaDescription"); - repository.AddOrUpdate(contentType2); + // Act + contentType.PropertyGroups["Meta"].PropertyTypes.Remove("metaDescription"); + repository.AddOrUpdate(contentType); unitOfWork.Commit(); - var contentType3 = repository.Get(1046); + var result = repository.Get(1046); // Assert - Assert.That(contentType3.PropertyTypes.Any(x => x.Alias == "metaDescription"), Is.False); - Assert.That(contentType.PropertyGroups.Count, Is.EqualTo(contentType3.PropertyGroups.Count)); - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(contentType3.PropertyTypes.Count())); + Assert.That(result.PropertyTypes.Any(x => x.Alias == "metaDescription"), Is.False); + Assert.That(contentType.PropertyGroups.Count, Is.EqualTo(result.PropertyGroups.Count)); + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(result.PropertyTypes.Count())); } } diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index 7c794d6f58..acb96da490 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -206,8 +206,8 @@ namespace Umbraco.Tests.Persistence.Repositories // Assert Assert.That(mediaTypeV3.PropertyTypes.Any(x => x.Alias == "title"), Is.False); - Assert.That(mediaType.PropertyGroups.Count, Is.EqualTo(mediaTypeV3.PropertyGroups.Count)); - Assert.That(mediaType.PropertyTypes.Count(), Is.EqualTo(mediaTypeV3.PropertyTypes.Count())); + Assert.That(mediaTypeV2.PropertyGroups.Count, Is.EqualTo(mediaTypeV3.PropertyGroups.Count)); + Assert.That(mediaTypeV2.PropertyTypes.Count(), Is.EqualTo(mediaTypeV3.PropertyTypes.Count())); } } diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index 25d16963d2..1f8cd7d582 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -24,14 +24,14 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Instantiate_Repository_From_Resolver() + public void Can_Instantiate_Repository() { // Arrange var provider = new FileUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + var repository = new ScriptRepository(unitOfWork, _fileSystem); // Assert Assert.That(repository, Is.Not.Null); diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index d518bddd0e..0b37761329 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -24,14 +24,15 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Instantiate_Repository_From_Resolver() + public void Can_Instantiate_Repository() { // Arrange var provider = new FileUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + var repository = new StylesheetRepository(unitOfWork, _fileSystem); + // Assert Assert.That(repository, Is.Not.Null);