Fixing: U4-5157 Membership.GetUser() causes 13 SQL queries, including duplicates
This commit is contained in:
@@ -51,24 +51,20 @@ namespace Umbraco.Tests.Membership
|
||||
{
|
||||
var date = DateTime.Now;
|
||||
|
||||
var m = Mock.Of<MembershipUser>(
|
||||
user => user.UserName == "test username"
|
||||
&& user.Comment == "test comment"
|
||||
&& user.IsApproved == true
|
||||
&& user.IsLockedOut == false
|
||||
&& user.CreationDate == date
|
||||
&& user.Email == "test@email.com"
|
||||
&& user.LastActivityDate == date.AddMinutes(1)
|
||||
&& user.LastLockoutDate == date.AddMinutes(2)
|
||||
&& user.LastLoginDate == date.AddMinutes(3)
|
||||
&& user.LastPasswordChangedDate == date.AddMinutes(4)
|
||||
&& user.PasswordQuestion == "test question");
|
||||
var member = new Member("test name", "test@email.com", "test username", "test password",
|
||||
GetMemberType());
|
||||
member.Comments = "test comment";
|
||||
member.IsApproved = true;
|
||||
member.IsLockedOut = false;
|
||||
member.CreateDate = date;
|
||||
member.LastLoginDate = date.AddMinutes(1);
|
||||
member.LastLockoutDate = date.AddMinutes(2);
|
||||
//NOTE: Last activity date is always the same as last login date since we don't have a place to store that data
|
||||
//member.LastLoginDate = date.AddMinutes(3);
|
||||
member.LastPasswordChangeDate = date.AddMinutes(4);
|
||||
member.PasswordQuestion = "test question";
|
||||
|
||||
|
||||
var mpc = new MemberPublishedContent(
|
||||
new Member("test name", "test@email.com", "test username", "test password",
|
||||
Mock.Of<IMemberType>(type => type.Alias == "Member")),
|
||||
m);
|
||||
var mpc = new MemberPublishedContent(member);
|
||||
|
||||
var d = mpc.AsDynamic();
|
||||
|
||||
@@ -79,7 +75,7 @@ namespace Umbraco.Tests.Membership
|
||||
Assert.AreEqual(false, d.IsLockedOut);
|
||||
Assert.AreEqual(date.AddMinutes(1), d.LastActivityDate);
|
||||
Assert.AreEqual(date.AddMinutes(2), d.LastLockoutDate);
|
||||
Assert.AreEqual(date.AddMinutes(3), d.LastLoginDate);
|
||||
Assert.AreEqual(date.AddMinutes(1), d.LastLoginDate);
|
||||
Assert.AreEqual(date.AddMinutes(4), d.LastPasswordChangedDate);
|
||||
Assert.AreEqual("test name", d.Name);
|
||||
Assert.AreEqual("test question", d.PasswordQuestion);
|
||||
@@ -92,24 +88,20 @@ namespace Umbraco.Tests.Membership
|
||||
{
|
||||
var date = DateTime.Now;
|
||||
|
||||
var m = Mock.Of<MembershipUser>(
|
||||
user => user.UserName == "test username"
|
||||
&& user.Comment == "test comment"
|
||||
&& user.IsApproved == true
|
||||
&& user.IsLockedOut == false
|
||||
&& user.CreationDate == date
|
||||
&& user.Email == "test@email.com"
|
||||
&& user.LastActivityDate == date.AddMinutes(1)
|
||||
&& user.LastLockoutDate == date.AddMinutes(2)
|
||||
&& user.LastLoginDate == date.AddMinutes(3)
|
||||
&& user.LastPasswordChangedDate == date.AddMinutes(4)
|
||||
&& user.PasswordQuestion == "test question");
|
||||
var member = new Member("test name", "test@email.com", "test username", "test password",
|
||||
GetMemberType());
|
||||
member.Comments = "test comment";
|
||||
member.IsApproved = true;
|
||||
member.IsLockedOut = false;
|
||||
member.CreateDate = date;
|
||||
member.LastLoginDate = date.AddMinutes(1);
|
||||
member.LastLockoutDate = date.AddMinutes(2);
|
||||
//NOTE: Last activity date is always the same as last login date since we don't have a place to store that data
|
||||
//member.LastLoginDate = date.AddMinutes(3);
|
||||
member.LastPasswordChangeDate = date.AddMinutes(4);
|
||||
member.PasswordQuestion = "test question";
|
||||
|
||||
|
||||
var mpc = new MemberPublishedContent(
|
||||
new Member("test name", "test@email.com", "test username", "test password",
|
||||
Mock.Of<IMemberType>(type => type.Alias == "Member")) ,
|
||||
m);
|
||||
var mpc = new MemberPublishedContent(member);
|
||||
|
||||
var d = mpc.AsDynamic();
|
||||
|
||||
@@ -120,7 +112,7 @@ namespace Umbraco.Tests.Membership
|
||||
Assert.AreEqual(false, d.isLockedOut);
|
||||
Assert.AreEqual(date.AddMinutes(1), d.lastActivityDate);
|
||||
Assert.AreEqual(date.AddMinutes(2), d.lastLockoutDate);
|
||||
Assert.AreEqual(date.AddMinutes(3), d.lastLoginDate);
|
||||
Assert.AreEqual(date.AddMinutes(1), d.lastLoginDate);
|
||||
Assert.AreEqual(date.AddMinutes(4), d.lastPasswordChangedDate);
|
||||
Assert.AreEqual("test name", d.name);
|
||||
Assert.AreEqual("test question", d.passwordQuestion);
|
||||
@@ -133,25 +125,23 @@ namespace Umbraco.Tests.Membership
|
||||
{
|
||||
var date = DateTime.Now;
|
||||
|
||||
var m = Mock.Of<MembershipUser>(
|
||||
user => user.UserName == "test username"
|
||||
&& user.Comment == "test comment"
|
||||
&& user.IsApproved == true
|
||||
&& user.IsLockedOut == false
|
||||
&& user.CreationDate == date
|
||||
&& user.Email == "test@email.com"
|
||||
&& user.LastActivityDate == date.AddMinutes(1)
|
||||
&& user.LastLockoutDate == date.AddMinutes(2)
|
||||
&& user.LastLoginDate == date.AddMinutes(3)
|
||||
&& user.LastPasswordChangedDate == date.AddMinutes(4)
|
||||
&& user.PasswordQuestion == "test question");
|
||||
|
||||
var memberType = MockedContentTypes.CreateSimpleMemberType("Member", "Member");
|
||||
var member = MockedMember.CreateSimpleMember(memberType, "test name", "test@email.com", "test password", "test username");
|
||||
member.Comments = "test comment";
|
||||
member.IsApproved = true;
|
||||
member.IsLockedOut = false;
|
||||
member.CreateDate = date;
|
||||
member.LastLoginDate = date.AddMinutes(1);
|
||||
member.LastLockoutDate = date.AddMinutes(2);
|
||||
//NOTE: Last activity date is always the same as last login date since we don't have a place to store that data
|
||||
//member.LastLoginDate = date.AddMinutes(3);
|
||||
member.LastPasswordChangeDate = date.AddMinutes(4);
|
||||
member.PasswordQuestion = "test question";
|
||||
|
||||
member.Properties["title"].Value = "Test Value 1";
|
||||
member.Properties["bodyText"].Value = "Test Value 2";
|
||||
member.Properties["author"].Value = "Test Value 3";
|
||||
var mpc = new MemberPublishedContent(member, m);
|
||||
var mpc = new MemberPublishedContent(member);
|
||||
|
||||
var d = mpc.AsDynamic();
|
||||
|
||||
@@ -165,6 +155,21 @@ namespace Umbraco.Tests.Membership
|
||||
|
||||
}
|
||||
|
||||
private IMemberType GetMemberType()
|
||||
{
|
||||
var entity = new MemberType(-1)
|
||||
{
|
||||
Alias = "Member"
|
||||
};
|
||||
|
||||
entity.AddPropertyGroup(Umbraco.Core.Constants.Conventions.Member.StandardPropertiesGroupName);
|
||||
var standardPropertyTypes = Umbraco.Core.Constants.Conventions.Member.GetStandardPropertyTypeStubs();
|
||||
foreach (var standardPropertyType in standardPropertyTypes)
|
||||
{
|
||||
entity.AddPropertyType(standardPropertyType.Value, Umbraco.Core.Constants.Conventions.Member.StandardPropertiesGroupName);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Text;
|
||||
using System.Web.Security;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
using Umbraco.Core.Models.PublishedContent;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
using Umbraco.Core.Services;
|
||||
@@ -19,17 +20,16 @@ namespace Umbraco.Web.PublishedCache
|
||||
{
|
||||
|
||||
private readonly IMember _member;
|
||||
private readonly MembershipUser _membershipUser;
|
||||
private readonly IMembershipUser _membershipUser;
|
||||
private readonly IPublishedProperty[] _properties;
|
||||
private readonly PublishedContentType _publishedMemberType;
|
||||
|
||||
public MemberPublishedContent(IMember member, MembershipUser membershipUser)
|
||||
public MemberPublishedContent(IMember member)
|
||||
{
|
||||
if (member == null) throw new ArgumentNullException("member");
|
||||
if (membershipUser == null) throw new ArgumentNullException("membershipUser");
|
||||
if (member == null) throw new ArgumentNullException("member");
|
||||
|
||||
_member = member;
|
||||
_membershipUser = membershipUser;
|
||||
_membershipUser = member;
|
||||
_publishedMemberType = PublishedContentType.Get(PublishedItemType.Member, _member.ContentTypeAlias);
|
||||
if (_publishedMemberType == null)
|
||||
{
|
||||
@@ -49,7 +49,7 @@ namespace Umbraco.Web.PublishedCache
|
||||
}
|
||||
public string UserName
|
||||
{
|
||||
get { return _membershipUser.UserName; }
|
||||
get { return _membershipUser.Username; }
|
||||
}
|
||||
public string PasswordQuestion
|
||||
{
|
||||
@@ -57,7 +57,7 @@ namespace Umbraco.Web.PublishedCache
|
||||
}
|
||||
public string Comments
|
||||
{
|
||||
get { return _membershipUser.Comment; }
|
||||
get { return _membershipUser.Comments; }
|
||||
}
|
||||
public bool IsApproved
|
||||
{
|
||||
@@ -73,7 +73,7 @@ namespace Umbraco.Web.PublishedCache
|
||||
}
|
||||
public DateTime CreationDate
|
||||
{
|
||||
get { return _membershipUser.CreationDate; }
|
||||
get { return _membershipUser.CreateDate; }
|
||||
}
|
||||
public DateTime LastLoginDate
|
||||
{
|
||||
@@ -81,11 +81,11 @@ namespace Umbraco.Web.PublishedCache
|
||||
}
|
||||
public DateTime LastActivityDate
|
||||
{
|
||||
get { return _membershipUser.LastActivityDate; }
|
||||
get { return _membershipUser.LastLoginDate; }
|
||||
}
|
||||
public DateTime LastPasswordChangedDate
|
||||
{
|
||||
get { return _membershipUser.LastPasswordChangedDate; }
|
||||
get { return _membershipUser.LastPasswordChangeDate; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -225,7 +225,7 @@ namespace Umbraco.Web.Security
|
||||
}
|
||||
|
||||
var result = _applicationContext.Services.MemberService.GetByProviderKey(key);
|
||||
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
|
||||
return result == null ? null : new MemberPublishedContent(result);
|
||||
}
|
||||
|
||||
public IPublishedContent GetById(int memberId)
|
||||
@@ -237,7 +237,7 @@ namespace Umbraco.Web.Security
|
||||
}
|
||||
|
||||
var result = _applicationContext.Services.MemberService.GetById(memberId);
|
||||
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
|
||||
return result == null ? null : new MemberPublishedContent(result);
|
||||
}
|
||||
|
||||
public IPublishedContent GetByUsername(string username)
|
||||
@@ -249,7 +249,7 @@ namespace Umbraco.Web.Security
|
||||
}
|
||||
|
||||
var result = _applicationContext.Services.MemberService.GetByUsername(username);
|
||||
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
|
||||
return result == null ? null : new MemberPublishedContent(result);
|
||||
}
|
||||
|
||||
public IPublishedContent GetByEmail(string email)
|
||||
@@ -261,7 +261,7 @@ namespace Umbraco.Web.Security
|
||||
}
|
||||
|
||||
var result = _applicationContext.Services.MemberService.GetByEmail(email);
|
||||
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, false));
|
||||
return result == null ? null : new MemberPublishedContent(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -276,7 +276,7 @@ namespace Umbraco.Web.Security
|
||||
}
|
||||
var result = GetCurrentPersistedMember();
|
||||
var provider = MPE.GetMembersMembershipProvider();
|
||||
return result == null ? null : new MemberPublishedContent(result, provider.GetUser(result.Username, true));
|
||||
return result == null ? null : new MemberPublishedContent(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user