diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index 9aa22a6e69..cd8c151f25 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -111,12 +111,44 @@ namespace Umbraco.Tests.Persistence.Repositories // Assert Assert.That(contentType.HasIdentity, Is.True); Assert.That(contentType.PropertyGroups.All(x => x.HasIdentity), Is.True); + Assert.That(contentType.PropertyTypes.All(x => x.HasIdentity), Is.True); Assert.That(contentType.Path.Contains(","), Is.True); Assert.That(contentType.SortOrder, Is.GreaterThan(0)); } } + [Test] + public void Can_Perform_Add_On_ContentTypeRepository_After_Model_Mapping() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(Logger); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var contentType = (IContentType)MockedContentTypes.CreateSimpleContentType(); + var display = Mapper.Map(contentType); + //simulate what would happen in the controller, we'd never map to a 'existing' content type, + // we'd map to an new content type when updating. + var mapped = Mapper.Map(display); + + repository.AddOrUpdate(mapped); + unitOfWork.Commit(); + + //re-get + contentType = repository.Get(mapped.Id); + + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(contentType.PropertyGroups.All(x => x.HasIdentity), Is.True); + Assert.That(contentType.PropertyTypes.All(x => x.HasIdentity), Is.True); + Assert.That(contentType.Path.Contains(","), Is.True); + Assert.That(contentType.SortOrder, Is.GreaterThan(0)); + } + + } + [Test] public void Can_Perform_Update_On_ContentTypeRepository() { @@ -196,12 +228,15 @@ namespace Umbraco.Tests.Persistence.Repositories var dirty = mapped.IsDirty(); + //re-get + contentType = repository.Get(NodeDto.NodeIdSeed + 1); + // Assert - Assert.That(mapped.HasIdentity, Is.True); + Assert.That(contentType.HasIdentity, Is.True); Assert.That(dirty, Is.False); - Assert.That(mapped.Thumbnail, Is.EqualTo("Doc2.png")); - Assert.That(mapped.PropertyTypes.Any(x => x.Alias == "subtitle"), Is.True); - foreach (var propertyType in mapped.PropertyTypes) + Assert.That(contentType.Thumbnail, Is.EqualTo("Doc2.png")); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "subtitle"), Is.True); + foreach (var propertyType in contentType.PropertyTypes) { Assert.IsTrue(propertyType.HasIdentity); Assert.Greater(propertyType.Id, 0); diff --git a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs index f1bef30ae7..c6c00d26cf 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs @@ -145,6 +145,7 @@ namespace Umbraco.Web.Models.Mapping if (dataType == null) throw new NullReferenceException("No data type found with id " + propertyTypeDisplay.DataTypeId); return new PropertyType(dataType, propertyTypeDisplay.Alias); }) + .ForMember(dest => dest.Id, expression => expression.Condition(source => source.Id > 0)) .ForMember(dto => dto.CreateDate, expression => expression.Ignore()) .ForMember(dto => dto.UpdateDate, expression => expression.Ignore()) .ForMember(type => type.PropertyGroupId, expression => expression.MapFrom(display => new Lazy(() => display.GroupId, LazyThreadSafetyMode.None)))