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:
Shannon
2013-10-02 09:22:33 +10:00
10 changed files with 82 additions and 139 deletions

View File

@@ -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);

View File

@@ -18,5 +18,8 @@ namespace Umbraco.Core.Models.Rdbms
[Column("PropertyGroupSortOrder")]
public int SortOrder { get; set; }
[Column("contenttypeNodeId")]
public int ContentTypeNodeId { get; set; }
}
}

View File

@@ -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));

View File

@@ -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

View File

@@ -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)

View File

@@ -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();
}

View File

@@ -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; }
}
}

View File

@@ -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))
{

View File

@@ -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,

View File

@@ -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;