From dcac5d47099f51939f0c4bfdae252c6cd2d4ae7a Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 15 Apr 2014 20:31:32 +1000 Subject: [PATCH] More code and tests written for deep cloning. --- src/Umbraco.Core/Models/Membership/User.cs | 25 ++++++ .../Models/UmbracoEntityTests.cs | 83 +++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index 558b3156de..073423ff4e 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -438,6 +438,13 @@ namespace Umbraco.Core.Models.Membership } } + public override object DeepClone() + { + var clone = (User)base.DeepClone(); + clone.UserType = (UserType)UserType.DeepClone(); + return clone; + } + /// /// Internal class used to wrap the user in a profile /// @@ -461,6 +468,24 @@ namespace Umbraco.Core.Models.Membership get { return _user.Name; } set { _user.Name = value; } } + + protected bool Equals(UserProfile other) + { + return _user.Equals(other._user); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((UserProfile) obj); + } + + public override int GetHashCode() + { + return _user.GetHashCode(); + } } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Models/UmbracoEntityTests.cs b/src/Umbraco.Tests/Models/UmbracoEntityTests.cs index 789dee709c..13a590ad3a 100644 --- a/src/Umbraco.Tests/Models/UmbracoEntityTests.cs +++ b/src/Umbraco.Tests/Models/UmbracoEntityTests.cs @@ -1,9 +1,92 @@ using System; using NUnit.Framework; using Umbraco.Core.Models; +using Umbraco.Core.Models.Membership; namespace Umbraco.Tests.Models { + [TestFixture] + public class UserTypeTests + { + [Test] + public void Can_Deep_Clone() + { + var item = new UserType() + { + Id = 3, + Key = Guid.NewGuid(), + UpdateDate = DateTime.Now, + CreateDate = DateTime.Now, + Name = "Test", + Alias = "test", + Permissions = new[] {"a", "b", "c"} + }; + + var clone = (User)item.DeepClone(); + + Assert.AreNotSame(clone, item); + Assert.AreEqual(clone, item); + + //Verify normal properties with reflection + var allProps = clone.GetType().GetProperties(); + foreach (var propertyInfo in allProps) + { + Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(item, null)); + } + } + } + + [TestFixture] + public class UserTests + { + [Test] + public void Can_Deep_Clone() + { + var item = new User(new UserType(){Id = 3}) + { + Id = 3, + Key = Guid.NewGuid(), + UpdateDate = DateTime.Now, + CreateDate = DateTime.Now, + Name = "Test", + Comments = "comments", + DefaultPermissions = new[]{"a","b","c"}, + DefaultToLiveEditing = false, + Email = "test@test.com", + Language = "en", + FailedPasswordAttempts = 3, + IsApproved = true, + IsLockedOut = true, + LastLockoutDate = DateTime.Now, + LastLoginDate = DateTime.Now, + LastPasswordChangeDate = DateTime.Now, + Password = "test pass", + PasswordAnswer = "answer", + PasswordQuestion = "question", + //ProviderUserKey = "user key", + SessionTimeout = 5, + StartContentId = 3, + StartMediaId = 8, + Username = "username" + }; + + var clone = (User)item.DeepClone(); + + Assert.AreNotSame(clone, item); + Assert.AreEqual(clone, item); + + Assert.AreNotSame(clone.UserType, item.UserType); + Assert.AreEqual(clone.UserType, item.UserType); + + //Verify normal properties with reflection + var allProps = clone.GetType().GetProperties(); + foreach (var propertyInfo in allProps) + { + Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(item, null)); + } + } + } + [TestFixture] public class UmbracoEntityTests {