Updates member repository and tests to ensure that an existing password will not be replaced if the password specified is null or empty.
This commit is contained in:
@@ -20,6 +20,17 @@ namespace Umbraco.Core.Models
|
||||
private object _providerUserKey;
|
||||
private Type _userTypeKey;
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for creating a Member object
|
||||
/// </summary>
|
||||
/// <param name="name">Name of the content</param>
|
||||
/// <param name="contentType">ContentType for the current Content object</param>
|
||||
public Member(string name, IMemberType contentType)
|
||||
: base(name, -1, contentType, new PropertyCollection())
|
||||
{
|
||||
_contentType = contentType;
|
||||
}
|
||||
|
||||
public Member(string name, string email, string username, string password, int parentId, IMemberType contentType)
|
||||
: base(name, parentId, contentType, new PropertyCollection())
|
||||
{
|
||||
|
||||
@@ -265,8 +265,10 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
//Updates Modified date
|
||||
((Member)entity).UpdatingEntity();
|
||||
|
||||
var dirtyEntity = (ICanBeDirty) entity;
|
||||
|
||||
//Look up parent to get and set the correct Path and update SortOrder if ParentId has changed
|
||||
if (((ICanBeDirty)entity).IsPropertyDirty("ParentId"))
|
||||
if (dirtyEntity.IsPropertyDirty("ParentId"))
|
||||
{
|
||||
var parent = Database.First<NodeDto>("WHERE id = @ParentId", new { ParentId = ((IUmbracoEntity)entity).ParentId });
|
||||
((IUmbracoEntity)entity).Path = string.Concat(parent.Path, ",", entity.Id);
|
||||
@@ -302,8 +304,27 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
//Updates the current version - cmsContentVersion
|
||||
//Assumes a Version guid exists and Version date (modified date) has been set/updated
|
||||
Database.Update(dto.ContentVersionDto);
|
||||
//Updates the cmsMember entry
|
||||
Database.Update(dto);
|
||||
|
||||
//Updates the cmsMember entry if it has changed
|
||||
var changedCols = new List<string>();
|
||||
if (dirtyEntity.IsPropertyDirty("Email"))
|
||||
{
|
||||
changedCols.Add("Email");
|
||||
}
|
||||
if (dirtyEntity.IsPropertyDirty("Username"))
|
||||
{
|
||||
changedCols.Add("LoginName");
|
||||
}
|
||||
// DO NOT update the password if it is null or empty
|
||||
if (dirtyEntity.IsPropertyDirty("Password") && entity.Password.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
changedCols.Add("Password");
|
||||
}
|
||||
//only update the changed cols
|
||||
if (changedCols.Count > 0)
|
||||
{
|
||||
Database.Update(dto, changedCols);
|
||||
}
|
||||
|
||||
//TODO ContentType for the Member entity
|
||||
|
||||
@@ -337,7 +358,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
|
||||
UpdatePropertyTags(entity, _tagRepository);
|
||||
|
||||
((ICanBeDirty)entity).ResetDirtyProperties();
|
||||
dirtyEntity.ResetDirtyProperties();
|
||||
}
|
||||
|
||||
protected override void PersistDeletedItem(IMember entity)
|
||||
|
||||
@@ -189,6 +189,63 @@ namespace Umbraco.Tests.Persistence.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MemberRepository_Does_Not_Replace_Password_When_Null()
|
||||
{
|
||||
IMember sut;
|
||||
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();
|
||||
|
||||
var member = MockedMember.CreateSimpleContent(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty", -1);
|
||||
repository.AddOrUpdate(member);
|
||||
unitOfWork.Commit();
|
||||
|
||||
sut = repository.Get(member.Id);
|
||||
//when the password is null it will not overwrite what is already there.
|
||||
sut.Password = null;
|
||||
repository.AddOrUpdate(sut);
|
||||
unitOfWork.Commit();
|
||||
sut = repository.Get(member.Id);
|
||||
|
||||
Assert.That(sut.Password, Is.EqualTo("123"));
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MemberRepository_Can_Update_Email_And_Login_When_Changed()
|
||||
{
|
||||
IMember sut;
|
||||
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();
|
||||
|
||||
var member = MockedMember.CreateSimpleContent(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty", -1);
|
||||
repository.AddOrUpdate(member);
|
||||
unitOfWork.Commit();
|
||||
|
||||
sut = repository.Get(member.Id);
|
||||
sut.Username = "This is new";
|
||||
sut.Email = "thisisnew@hello.com";
|
||||
repository.AddOrUpdate(sut);
|
||||
unitOfWork.Commit();
|
||||
sut = repository.Get(member.Id);
|
||||
|
||||
Assert.That(sut.Email, Is.EqualTo("thisisnew@hello.com"));
|
||||
Assert.That(sut.Username, Is.EqualTo("This is new"));
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Create_Correct_Subquery()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user