public void Can_Avoid_Circular_Dependencies_In_Composition() { var textPage = MockedContentTypes.CreateTextpageContentType(); var parent = MockedContentTypes.CreateSimpleContentType("parent", "Parent"); var meta = MockedContentTypes.CreateMetaContentType(); var mixin1 = MockedContentTypes.CreateSimpleContentType("mixin1", "Mixin1", new PropertyTypeCollection( new List <PropertyType> { new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "coauthor", Name = "Co-Author", Description = "Name of the Co-Author", HelpText = "", Mandatory = false, SortOrder = 4, DataTypeDefinitionId = -88 } })); var mixin2 = MockedContentTypes.CreateSimpleContentType("mixin2", "Mixin2", new PropertyTypeCollection( new List <PropertyType> { new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "author", Name = "Author", Description = "Name of the Author", HelpText = "", Mandatory = false, SortOrder = 4, DataTypeDefinitionId = -88 } })); // Act var addedMetaMixin2 = mixin2.AddContentType(meta); var addedMixin2 = mixin1.AddContentType(mixin2); var addedMeta = parent.AddContentType(meta); var addedMixin1 = parent.AddContentType(mixin1); var addedMixin1Textpage = textPage.AddContentType(mixin1); var addedTextpageParent = parent.AddContentType(textPage); var aliases = textPage.CompositionAliases(); var propertyTypes = textPage.CompositionPropertyTypes; var propertyGroups = textPage.CompositionPropertyGroups; // Assert Assert.That(mixin2.ContentTypeCompositionExists("meta"), Is.True); Assert.That(mixin1.ContentTypeCompositionExists("meta"), Is.True); Assert.That(parent.ContentTypeCompositionExists("meta"), Is.True); Assert.That(textPage.ContentTypeCompositionExists("meta"), Is.True); Assert.That(aliases.Count(), Is.EqualTo(3)); Assert.That(propertyTypes.Count(), Is.EqualTo(8)); Assert.That(propertyGroups.Count(), Is.EqualTo(2)); Assert.That(addedMeta, Is.True); Assert.That(addedMetaMixin2, Is.True); Assert.That(addedMixin2, Is.True); Assert.That(addedMixin1, Is.False); Assert.That(addedMixin1Textpage, Is.True); Assert.That(addedTextpageParent, Is.False); }
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)); } //need to ensure the event handlers are wired var asDirty = (ICanBeDirty)clone; Assert.IsFalse(asDirty.IsPropertyDirty("Properties")); clone.Properties.Add(new Property(1, Guid.NewGuid(), new PropertyType("test", DataTypeDatabaseType.Ntext, "blah"), "blah")); Assert.IsTrue(asDirty.IsPropertyDirty("Properties")); }