Merge remote-tracking branch 'origin/6.2.0' into 7.0.0
Conflicts: src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
This commit is contained in:
@@ -20,19 +20,26 @@ namespace Umbraco.Core.Models
|
||||
private object _providerUserKey;
|
||||
private Type _userTypeKey;
|
||||
|
||||
public Member(string name, int parentId, IMemberType contentType, PropertyCollection properties) : base(name, parentId, contentType, properties)
|
||||
public Member(string name, string email, string username, string password, int parentId, IMemberType contentType)
|
||||
: base(name, parentId, contentType, new PropertyCollection())
|
||||
{
|
||||
Mandate.ParameterNotNull(contentType, "contentType");
|
||||
|
||||
_contentType = contentType;
|
||||
_email = email;
|
||||
_username = username;
|
||||
_password = password;
|
||||
}
|
||||
|
||||
public Member(string name, IContentBase parent, IMemberType contentType, PropertyCollection properties)
|
||||
: base(name, parent, contentType, properties)
|
||||
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<Member, string>(x => x.ContentTypeAlias);
|
||||
|
||||
@@ -18,5 +18,8 @@ namespace Umbraco.Core.Models.Rdbms
|
||||
|
||||
[Column("PropertyGroupSortOrder")]
|
||||
public int SortOrder { get; set; }
|
||||
|
||||
[Column("contenttypeNodeId")]
|
||||
public int ContentTypeNodeId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -18,17 +18,13 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
public IMember BuildEntity(MemberReadOnlyDto dto)
|
||||
{
|
||||
var properties = CreateProperties(_memberTypes[dto.ContentTypeAlias], dto.Properties, dto.CreateDate);
|
||||
var propertyCollection = new PropertyCollection(properties);
|
||||
|
||||
var member = new Member(dto.Text, dto.ParentId, _memberTypes[dto.ContentTypeAlias], propertyCollection)
|
||||
var member = new Member(dto.Text, dto.Email, dto.LoginName, dto.Password, dto.ParentId, _memberTypes[dto.ContentTypeAlias])
|
||||
{
|
||||
Id = dto.NodeId,
|
||||
CreateDate = dto.CreateDate,
|
||||
UpdateDate = dto.UpdateDate,
|
||||
Name = dto.Text,
|
||||
Email = dto.Email,
|
||||
Username = dto.LoginName,
|
||||
Password = dto.Password,
|
||||
ProviderUserKey = dto.UniqueId,
|
||||
Trashed = dto.Trashed,
|
||||
Key = dto.UniqueId.Value,
|
||||
@@ -37,7 +33,8 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
Path = dto.Path,
|
||||
SortOrder = dto.SortOrder,
|
||||
Version = dto.VersionId,
|
||||
ContentTypeAlias = dto.ContentTypeAlias
|
||||
ContentTypeAlias = dto.ContentTypeAlias,
|
||||
Properties = new PropertyCollection(properties)
|
||||
};
|
||||
|
||||
member.SetProviderUserKeyType(typeof(Guid));
|
||||
|
||||
@@ -61,9 +61,7 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
var group = new PropertyGroup();
|
||||
|
||||
//Only assign an Id if the PropertyGroup belongs to this ContentType
|
||||
if (groupDto.Id.HasValue
|
||||
/*SD: I've commented this out since it's never correct, why would the group id be the same as the type??
|
||||
* && groupDto.Id == memberType.Id*/)
|
||||
if (groupDto.ContentTypeNodeId == memberType.Id)
|
||||
{
|
||||
group.Id = groupDto.Id.Value;
|
||||
|
||||
@@ -81,7 +79,8 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
group.PropertyTypes = new PropertyTypeCollection();
|
||||
|
||||
//Because we are likely to have a group with no PropertyTypes we need to ensure that these are excluded
|
||||
var typeDtos = dto.PropertyTypes.Where(x => x.Id.HasValue && x.Id > 0 && x.PropertyTypeGroupId.HasValue && x.PropertyTypeGroupId.Value == groupDto.Id.Value);
|
||||
var localGroupDto = groupDto;
|
||||
var typeDtos = dto.PropertyTypes.Where(x => x.Id.HasValue && x.Id > 0 && x.PropertyTypeGroupId.HasValue && x.PropertyTypeGroupId.Value == localGroupDto.Id.Value);
|
||||
foreach (var typeDto in typeDtos)
|
||||
{
|
||||
//Internal dictionary for adding "MemberCanEdit" and "VisibleOnProfile" properties to each PropertyType
|
||||
|
||||
@@ -103,8 +103,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
"cmsPropertyType.validationRegExp", "cmsPropertyType.dataTypeId", "cmsPropertyType.sortOrder AS PropertyTypeSortOrder",
|
||||
"cmsPropertyType.propertyTypeGroupId AS PropertyTypesGroupId", "cmsMemberType.memberCanEdit", "cmsMemberType.viewOnProfile",
|
||||
"cmsDataType.propertyEditorAlias", "cmsDataType.dbType", "cmsPropertyTypeGroup.id AS PropertyTypeGroupId",
|
||||
"cmsPropertyTypeGroup.text AS PropertyGroupName", "cmsPropertyTypeGroup.parentGroupId",
|
||||
"cmsPropertyTypeGroup.sortorder AS PropertyGroupSortOrder")
|
||||
"cmsPropertyTypeGroup.text AS PropertyGroupName", "cmsPropertyTypeGroup.parentGroupId",
|
||||
"cmsPropertyTypeGroup.sortorder AS PropertyGroupSortOrder", "cmsPropertyTypeGroup.contenttypeNodeId")
|
||||
.From<NodeDto>()
|
||||
.InnerJoin<ContentTypeDto>().On<ContentTypeDto, NodeDto>(left => left.NodeId, right => right.NodeId)
|
||||
.LeftJoin<PropertyTypeDto>().On<PropertyTypeDto, NodeDto>(left => left.ContentTypeId, right => right.NodeId)
|
||||
|
||||
@@ -200,13 +200,13 @@ namespace Umbraco.Core.Services
|
||||
/// <summary>
|
||||
/// Creates a new Member
|
||||
/// </summary>
|
||||
/// <param name="username"></param>
|
||||
/// <param name="email"></param>
|
||||
/// <param name="username"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <param name="memberTypeAlias"></param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public IMember CreateMember(string username, string email, string password, string memberTypeAlias, int userId = 0)
|
||||
public IMember CreateMember(string email, string username, string password, string memberTypeAlias, int userId = 0)
|
||||
{
|
||||
var uow = _uowProvider.GetUnitOfWork();
|
||||
IMemberType memberType;
|
||||
@@ -220,14 +220,10 @@ namespace Umbraco.Core.Services
|
||||
if (memberType == null)
|
||||
throw new Exception(string.Format("No MemberType matching the passed in Alias: '{0}' was found", memberTypeAlias));
|
||||
|
||||
var member = new Member(email, -1, memberType, new PropertyCollection());
|
||||
var member = new Member(email, email, username, password, -1, memberType);
|
||||
|
||||
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
|
||||
{
|
||||
member.Username = username;
|
||||
member.Email = email;
|
||||
member.Password = password;
|
||||
|
||||
repository.AddOrUpdate(member);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
@@ -4,32 +4,23 @@ using NUnit.Framework;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Rdbms;
|
||||
using Umbraco.Core.ObjectResolution;
|
||||
using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.Persistence.Caching;
|
||||
using Umbraco.Core.Persistence.Mappers;
|
||||
using Umbraco.Core.Persistence.Querying;
|
||||
using Umbraco.Core.Persistence.Repositories;
|
||||
using Umbraco.Core.Persistence.SqlSyntax;
|
||||
using Umbraco.Core.Persistence.UnitOfWork;
|
||||
using Umbraco.Core.Publishing;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Tests.TestHelpers.Entities;
|
||||
|
||||
namespace Umbraco.Tests.Persistence.Repositories
|
||||
{
|
||||
[TestFixture, NUnit.Framework.Ignore]
|
||||
public class MemberRepositoryTest : MemberRepositoryBaseTest
|
||||
[TestFixture]
|
||||
public class MemberRepositoryTest : BaseDatabaseFactoryTest
|
||||
{
|
||||
#region Overrides of MemberRepositoryBaseTest
|
||||
|
||||
[SetUp]
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider;
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
@@ -38,18 +29,6 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
base.TearDown();
|
||||
}
|
||||
|
||||
public override string ConnectionString
|
||||
{
|
||||
get { return @"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco"; }
|
||||
}
|
||||
|
||||
public override string ProviderName
|
||||
{
|
||||
get { return "System.Data.SqlClient"; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private MemberRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MemberTypeRepository memberTypeRepository)
|
||||
{
|
||||
memberTypeRepository = new MemberTypeRepository(unitOfWork, NullCacheProvider.Current);
|
||||
@@ -71,10 +50,11 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
Assert.That(repository, Is.Not.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberRepository_Can_Get_Member_By_Id()
|
||||
{
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -85,10 +65,11 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberRepository_Can_Get_Specific_Members()
|
||||
{
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -101,10 +82,11 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberRepository_Can_Get_All_Members()
|
||||
{
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -117,11 +99,12 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberRepository_Can_Perform_GetByQuery_With_Key()
|
||||
{
|
||||
// Arrange
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -136,11 +119,12 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberRepository_Can_Perform_GetByQuery_With_Property_Value()
|
||||
{
|
||||
// Arrange
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -156,11 +140,12 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberRepository_Can_Perform_GetByQuery_With_Property_Alias_And_Value()
|
||||
{
|
||||
// Arrange
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -179,7 +164,8 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
public void MemberRepository_Can_Persist_Member()
|
||||
{
|
||||
IMember sut;
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
MemberTypeRepository memberTypeRepository;
|
||||
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
|
||||
{
|
||||
@@ -196,7 +182,9 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
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.Properties.Any(x => x.HasIdentity == false || x.Id == 0), Is.False);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,62 +266,4 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
get { return new Guid(Constants.ObjectTypes.Member); }
|
||||
}
|
||||
}
|
||||
|
||||
[TestFixture]
|
||||
public abstract class MemberRepositoryBaseTest
|
||||
{
|
||||
[SetUp]
|
||||
public virtual void Initialize()
|
||||
{
|
||||
TestHelper.SetupLog4NetForTests();
|
||||
TestHelper.InitializeContentDirectories();
|
||||
|
||||
string path = TestHelper.CurrentAssemblyDirectory;
|
||||
AppDomain.CurrentDomain.SetData("DataDirectory", path);
|
||||
|
||||
RepositoryResolver.Current = new RepositoryResolver(
|
||||
new RepositoryFactory());
|
||||
|
||||
MappingResolver.Current = new MappingResolver(
|
||||
() => PluginManager.Current.ResolveAssignedMapperTypes());
|
||||
//disable cache
|
||||
var cacheHelper = CacheHelper.CreateDisabledCacheHelper();
|
||||
|
||||
|
||||
var dbFactory = new DefaultDatabaseFactory(ConnectionString, ProviderName);
|
||||
UnitOfWorkProvider = new PetaPocoUnitOfWorkProvider(dbFactory);
|
||||
|
||||
ApplicationContext.Current = new ApplicationContext(
|
||||
//assign the db context
|
||||
new DatabaseContext(dbFactory),
|
||||
//assign the service context
|
||||
new ServiceContext(UnitOfWorkProvider, new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper),
|
||||
//disable cache
|
||||
cacheHelper)
|
||||
{
|
||||
IsReady = true
|
||||
};
|
||||
|
||||
Resolution.Freeze();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public virtual void TearDown()
|
||||
{
|
||||
SqlSyntaxContext.SqlSyntaxProvider = null;
|
||||
AppDomain.CurrentDomain.SetData("DataDirectory", null);
|
||||
|
||||
//reset the app context
|
||||
ApplicationContext.Current = null;
|
||||
|
||||
RepositoryResolver.Reset();
|
||||
MappingResolver.Reset();
|
||||
}
|
||||
|
||||
public abstract string ConnectionString { get; }
|
||||
|
||||
public abstract string ProviderName { get; }
|
||||
|
||||
public PetaPocoUnitOfWorkProvider UnitOfWorkProvider { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,22 @@
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.Persistence.Caching;
|
||||
using Umbraco.Core.Persistence.Repositories;
|
||||
using Umbraco.Core.Persistence.SqlSyntax;
|
||||
using Umbraco.Core.Persistence.UnitOfWork;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Tests.TestHelpers.Entities;
|
||||
|
||||
namespace Umbraco.Tests.Persistence.Repositories
|
||||
{
|
||||
[TestFixture, NUnit.Framework.Ignore]
|
||||
public class MemberTypeRepositoryTest : MemberRepositoryBaseTest
|
||||
[TestFixture]
|
||||
public class MemberTypeRepositoryTest : BaseDatabaseFactoryTest
|
||||
{
|
||||
#region Overrides of MemberRepositoryBaseTest
|
||||
|
||||
[SetUp]
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider;
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
@@ -27,18 +25,6 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
base.TearDown();
|
||||
}
|
||||
|
||||
public override string ConnectionString
|
||||
{
|
||||
get { return @"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco"; }
|
||||
}
|
||||
|
||||
public override string ProviderName
|
||||
{
|
||||
get { return "System.Data.SqlClient"; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private MemberTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork)
|
||||
{
|
||||
return new MemberTypeRepository(unitOfWork, NullCacheProvider.Current);
|
||||
@@ -59,9 +45,33 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MemberRepository_Can_Persist_Member()
|
||||
{
|
||||
IMemberType sut;
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
using (var repository = CreateRepository(unitOfWork))
|
||||
{
|
||||
var memberType = MockedContentTypes.CreateSimpleMemberType();
|
||||
repository.AddOrUpdate(memberType);
|
||||
unitOfWork.Commit();
|
||||
|
||||
sut = repository.Get(memberType.Id);
|
||||
|
||||
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.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);
|
||||
}
|
||||
}
|
||||
|
||||
[Test, NUnit.Framework.Ignore]
|
||||
public void MemberTypeRepository_Can_Get_MemberType_By_Id()
|
||||
{
|
||||
var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
|
||||
var provider = new PetaPocoUnitOfWorkProvider();
|
||||
var unitOfWork = provider.GetUnitOfWork();
|
||||
using (var repository = CreateRepository(unitOfWork))
|
||||
{
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
|
||||
namespace Umbraco.Tests.TestHelpers.Entities
|
||||
{
|
||||
@@ -6,7 +7,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
|
||||
{
|
||||
public static Member CreateSimpleContent(IMemberType contentType, string name, string email, string password, string username, int parentId)
|
||||
{
|
||||
var member = new Member(name, parentId, contentType, new PropertyCollection())
|
||||
var member = new Member(name, email, username, password, parentId, contentType)
|
||||
{
|
||||
CreatorId = 0,
|
||||
Email = email,
|
||||
|
||||
@@ -323,8 +323,8 @@ namespace Umbraco.Web.Security.Providers
|
||||
"Cannot create member as a member with the same email address exists: " + email);
|
||||
return null;
|
||||
}
|
||||
|
||||
var member = MemberService.CreateMember(username, email, password, DefaultMemberTypeAlias);
|
||||
|
||||
var member = MemberService.CreateMember(email, username, password, DefaultMemberTypeAlias);
|
||||
|
||||
member.IsApproved = isApproved;
|
||||
member.PasswordQuestion = passwordQuestion;
|
||||
|
||||
Reference in New Issue
Block a user