public void DeepCopyEntity_ToNewParent_CopiesEntity_IncludingRelations() { // Arrange var originalParent = HiveModelCreationHelper.MockTypedEntity(true); originalParent.RelationProxies.LazyLoadDelegate = x => new RelationProxyBucket(); var originalChild = HiveModelCreationHelper.MockTypedEntity(true); originalChild.RelationProxies.LazyLoadDelegate = x => new RelationProxyBucket(); var newContainer1 = HiveModelCreationHelper.MockTypedEntity(true); var newContainer2 = HiveModelCreationHelper.MockTypedEntity(true); originalParent.RelationProxies.EnlistChild( originalChild, FixedRelationTypes.DefaultRelationType, 0, new RelationMetaDatum("testkey", "testvalue")); originalChild.RelationProxies.EnlistParent( originalParent, FixedRelationTypes.DefaultRelationType, 0, new RelationMetaDatum("testkey", "testvalue")); // Guard against bad test data foreach (var attribute in originalParent.Attributes) { Assert.AreNotEqual(HiveId.Empty, attribute.Id); Assert.NotNull(attribute.AttributeDefinition); Assert.AreNotEqual(HiveId.Empty, attribute.AttributeDefinition.Id); } Thread.Sleep(250); // Ensure copy dates are newer //Act & Assert var copyLeft = EntityExtensions.CreateDeepCopyToNewParent(originalParent, newContainer1, FixedRelationTypes.DefaultRelationType, 0); DoAssertDeepCopiedEntityToNewParent(copyLeft, originalParent, newContainer1); DoAssertDeepCopiedEntityChildren(copyLeft, originalParent); var copyRight = EntityExtensions.CreateDeepCopyToNewParent(originalChild, newContainer2, FixedRelationTypes.DefaultRelationType, 0); DoAssertDeepCopiedEntityToNewParent(copyRight, originalChild, newContainer2); DoAssertDeepCopiedEntityChildren(copyRight, originalChild); }