diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs index 5fd48da994..9425446560 100644 --- a/src/Umbraco.Core/Models/Member.cs +++ b/src/Umbraco.Core/Models/Member.cs @@ -20,7 +20,7 @@ namespace Umbraco.Core.Models private object _providerUserKey; private Type _userTypeKey; - public Member(string name, string email, string username, string password, int parentId, IMemberType contentType) + internal Member(string name, string email, string username, string password, int parentId, IMemberType contentType) : base(name, parentId, contentType, new PropertyCollection()) { Mandate.ParameterNotNull(contentType, "contentType"); @@ -31,8 +31,8 @@ namespace Umbraco.Core.Models _password = password; } - public Member(string name, string email, string username, string password, IContentBase parent, IMemberType contentType) - : base(name, parent, contentType, new PropertyCollection()) + public Member(string name, string email, string username, string password, IMemberType contentType) + : this(name, email, username, password, -1, contentType) { Mandate.ParameterNotNull(contentType, "contentType"); @@ -42,6 +42,17 @@ namespace Umbraco.Core.Models _password = password; } + //public Member(string name, string email, string username, string password, IContentBase parent, IMemberType contentType) + // : base(name, parent, contentType, new PropertyCollection()) + //{ + // Mandate.ParameterNotNull(contentType, "contentType"); + + // _contentType = contentType; + // _email = email; + // _username = username; + // _password = password; + //} + private static readonly PropertyInfo DefaultContentTypeAliasSelector = ExpressionHelper.GetPropertyInfo(x => x.ContentTypeAlias); private static readonly PropertyInfo UsernameSelector = ExpressionHelper.GetPropertyInfo(x => x.Username); private static readonly PropertyInfo EmailSelector = ExpressionHelper.GetPropertyInfo(x => x.Email); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index 451110e0b1..044fd97845 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.That(repository, Is.Not.Null); } - [Test, NUnit.Framework.Ignore] + [Test] public void MemberRepository_Can_Get_Member_By_Id() { var provider = new PetaPocoUnitOfWorkProvider(); @@ -58,31 +58,37 @@ namespace Umbraco.Tests.Persistence.Repositories MemberTypeRepository memberTypeRepository; using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) { + var member = CreateTestMember(); - var member = repository.Get(1341); + member = repository.Get(member.Id); Assert.That(member, Is.Not.Null); + Assert.That(member.HasIdentity, Is.True); } } - [Test, NUnit.Framework.Ignore] - public void MemberRepository_Can_Get_Specific_Members() + [Test] + public void Can_Get_Members_By_Ids() { var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); MemberTypeRepository memberTypeRepository; using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) { + var type = CreateTestMemberType(); + var m1 = CreateTestMember(type, "Test 1", "test1@test.com", "pass1", "test1"); + var m2 = CreateTestMember(type, "Test 2", "test2@test.com", "pass2", "test2"); - var members = repository.GetAll(1341, 1383); + var members = repository.GetAll(m1.Id, m2.Id); Assert.That(members, Is.Not.Null); - Assert.That(members.Any(x => x == null), Is.False); Assert.That(members.Count(), Is.EqualTo(2)); + Assert.That(members.Any(x => x == null), Is.False); + Assert.That(members.Any(x => x.HasIdentity == false), Is.False); } } - [Test, NUnit.Framework.Ignore] + [Test] public void MemberRepository_Can_Get_All_Members() { var provider = new PetaPocoUnitOfWorkProvider(); @@ -90,16 +96,22 @@ namespace Umbraco.Tests.Persistence.Repositories MemberTypeRepository memberTypeRepository; using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) { + var type = CreateTestMemberType(); + for (var i = 0; i < 5; i++) + { + CreateTestMember(type, "Test " + i, "test" + i + "@test.com", "pass" + i, "test" + i); + } var members = repository.GetAll(); Assert.That(members, Is.Not.Null); Assert.That(members.Any(x => x == null), Is.False); - Assert.That(members.Count(), Is.EqualTo(6)); + Assert.That(members.Count(), Is.EqualTo(5)); + Assert.That(members.Any(x => x.HasIdentity == false), Is.False); } } - [Test, NUnit.Framework.Ignore] + [Test] public void MemberRepository_Can_Perform_GetByQuery_With_Key() { // Arrange @@ -108,14 +120,16 @@ namespace Umbraco.Tests.Persistence.Repositories MemberTypeRepository memberTypeRepository; using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) { + var key = Guid.NewGuid(); + var member = CreateTestMember(key: key); // Act - var query = Query.Builder.Where(x => x.Key == new Guid("A6B9CA6B-0615-42CA-B5F5-338417EC76BE")); + var query = Query.Builder.Where(x => x.Key == key); var result = repository.GetByQuery(query); // Assert Assert.That(result.Count(), Is.EqualTo(1)); - Assert.That(result.First().Id, Is.EqualTo(1341)); + Assert.That(result.First().Id, Is.EqualTo(member.Id)); } } @@ -161,9 +175,30 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void MemberRepository_Can_Persist_Member() + public void Can_Persist_Member() + { + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { + var member = CreateTestMember(); + + var sut = repository.Get(member.Id); + + Assert.That(sut, Is.Not.Null); + Assert.That(sut.HasIdentity, Is.True); + Assert.That(sut.Properties.Any(x => x.HasIdentity == false || x.Id == 0), Is.False); + Assert.That(sut.Name, Is.EqualTo("Johnny Hefty")); + Assert.That(sut.Email, Is.EqualTo("johnny@example.com")); + Assert.That(sut.Password, Is.EqualTo("123")); + Assert.That(sut.Username, Is.EqualTo("hefty")); + } + } + + [Test] + public void New_Member_Has_Built_In_Properties_By_Default() { - IMember sut; var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); MemberTypeRepository memberTypeRepository; @@ -173,17 +208,15 @@ namespace Umbraco.Tests.Persistence.Repositories memberTypeRepository.AddOrUpdate(memberType); unitOfWork.Commit(); - var member = MockedMember.CreateSimpleContent(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty", -1); + var member = MockedMember.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); repository.AddOrUpdate(member); unitOfWork.Commit(); - sut = repository.Get(member.Id); + var sut = repository.Get(member.Id); - Assert.That(sut, Is.Not.Null); Assert.That(sut.ContentType.PropertyGroups.Count(), Is.EqualTo(1)); - Assert.That(sut.ContentType.PropertyTypes.Count(), Is.EqualTo(12)); - - Assert.That(sut.Properties.Count(), Is.EqualTo(12)); + Assert.That(sut.ContentType.PropertyTypes.Count(), Is.EqualTo(3 + Constants.Conventions.Member.StandardPropertyTypeStubs.Count)); + Assert.That(sut.Properties.Count(), Is.EqualTo(3 + Constants.Conventions.Member.StandardPropertyTypeStubs.Count)); Assert.That(sut.Properties.Any(x => x.HasIdentity == false || x.Id == 0), Is.False); } } @@ -207,6 +240,42 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.That(sql.SQL, Is.Not.Empty); } + private IMember CreateTestMember(IMemberType memberType = null, string name = null, string email = null, string password = null, string username = null, Guid? key = null) + { + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { + if (memberType == null) + { + memberType = MockedContentTypes.CreateSimpleMemberType(); + memberTypeRepository.AddOrUpdate(memberType); + unitOfWork.Commit(); + } + + var member = MockedMember.CreateSimpleMember(memberType, name ?? "Johnny Hefty", email ?? "johnny@example.com", password ?? "123", username ?? "hefty", key); + repository.AddOrUpdate(member); + unitOfWork.Commit(); + + return member; + } + } + + private IMemberType CreateTestMemberType() + { + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { + var memberType = MockedContentTypes.CreateSimpleMemberType(); + memberTypeRepository.AddOrUpdate(memberType); + unitOfWork.Commit(); + return memberType; + } + } + private Sql GetBaseQuery(bool isCount) { if (isCount) diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs index d237b9aefe..44cc3152f4 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs @@ -60,7 +60,7 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.That(sut, Is.Not.Null); Assert.That(sut.PropertyGroups.Count(), Is.EqualTo(1)); - Assert.That(sut.PropertyTypes.Count(), Is.EqualTo(12)); + Assert.That(sut.PropertyTypes.Count(), Is.EqualTo(3 + Constants.Conventions.Member.StandardPropertyTypeStubs.Count)); Assert.That(sut.PropertyGroups.Any(x => x.HasIdentity == false || x.Id == 0), Is.False); Assert.That(sut.PropertyTypes.Any(x => x.HasIdentity == false || x.Id == 0), Is.False); diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs index 2e019b5ae5..50f829b326 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs @@ -1,13 +1,14 @@ -using Umbraco.Core.Models; +using System; +using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; namespace Umbraco.Tests.TestHelpers.Entities { public class MockedMember { - public static Member CreateSimpleContent(IMemberType contentType, string name, string email, string password, string username, int parentId) + public static Member CreateSimpleMember(IMemberType contentType, string name, string email, string password, string username, Guid? key = null) { - var member = new Member(name, email, username, password, parentId, contentType) + var member = new Member(name, email, username, password, contentType) { CreatorId = 0, Email = email, @@ -15,6 +16,11 @@ namespace Umbraco.Tests.TestHelpers.Entities Username = username }; + if (key.HasValue) + { + member.Key = key.Value; + } + member.SetValue("title", name + " member"); member.SetValue("bodyText", "This is a subpage"); member.SetValue("author", "John Doe");