diff --git a/src/Umbraco.Core/Models/MemberGroup.cs b/src/Umbraco.Core/Models/MemberGroup.cs
index caaeb1d860..5d77c92385 100644
--- a/src/Umbraco.Core/Models/MemberGroup.cs
+++ b/src/Umbraco.Core/Models/MemberGroup.cs
@@ -44,5 +44,17 @@ namespace Umbraco.Core.Models
}, _creatorId, CreatorIdSelector);
}
}
+
+ ///
+ /// Method to call when Entity is being saved
+ ///
+ /// Created date is set and a Unique key is assigned
+ internal override void AddingEntity()
+ {
+ base.AddingEntity();
+
+ if (Key == Guid.Empty)
+ Key = Guid.NewGuid();
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs
index 1057da3958..2b9ec950f5 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs
@@ -164,7 +164,7 @@ namespace Umbraco.Core.Persistence.Repositories
.InnerJoin()
.On(dto => dto.NodeId, dto => dto.NodeId)
.Where(x => x.NodeObjectType == memberObjectType)
- .Where(x => x.LoginName.Equals(username));
+ .Where(x => x.LoginName == username);
var memberIdUsername = Database.Fetch(memberSql).FirstOrDefault();
if (memberIdUsername.HasValue == false)
{
@@ -233,6 +233,8 @@ namespace Umbraco.Core.Persistence.Repositories
{
PersistNewItem(new MemberGroup { Name = m });
}
+ //now go get all the dto's for roles with these role names
+ var rolesForNames = Database.Fetch(existingSql).ToArray();
//get the groups that are currently assigned to any of these members
@@ -262,7 +264,7 @@ namespace Umbraco.Core.Persistence.Repositories
var nonAssignedRoles = roleNames.Except(assignedRoles);
foreach (var toAssign in nonAssignedRoles)
{
- var groupId = found.First(x => x.RoleName == toAssign).MemberGroupId;
+ var groupId = rolesForNames.First(x => x.Text == toAssign).NodeId;
Database.Insert(new Member2MemberGroupDto { Member = mId, MemberGroup = groupId });
}
}
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
index c60cf97cb5..348b342ad4 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
@@ -23,19 +23,22 @@ namespace Umbraco.Core.Persistence.Repositories
internal class MemberRepository : VersionableRepositoryBase, IMemberRepository
{
private readonly IMemberTypeRepository _memberTypeRepository;
+ private readonly IMemberGroupRepository _memberGroupRepository;
- public MemberRepository(IDatabaseUnitOfWork work, IMemberTypeRepository memberTypeRepository)
+ public MemberRepository(IDatabaseUnitOfWork work, IMemberTypeRepository memberTypeRepository, IMemberGroupRepository memberGroupRepository)
: base(work)
{
if (memberTypeRepository == null) throw new ArgumentNullException("memberTypeRepository");
_memberTypeRepository = memberTypeRepository;
+ _memberGroupRepository = memberGroupRepository;
}
- public MemberRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache, IMemberTypeRepository memberTypeRepository)
+ public MemberRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache, IMemberTypeRepository memberTypeRepository, IMemberGroupRepository memberGroupRepository)
: base(work, cache)
{
if (memberTypeRepository == null) throw new ArgumentNullException("memberTypeRepository");
_memberTypeRepository = memberTypeRepository;
+ _memberGroupRepository = memberGroupRepository;
}
#region Overrides of RepositoryBase
@@ -434,9 +437,13 @@ namespace Umbraco.Core.Persistence.Repositories
///
public IEnumerable GetByMemberGroup(string groupName)
{
- var subquery = GetSubquery().Where(x => x.Text.Equals(groupName));
+ var grpQry = new Query().Where(group => group.Name.Equals(groupName));
+ var memberGroup = _memberGroupRepository.GetByQuery(grpQry).FirstOrDefault();
+ if (memberGroup == null) return Enumerable.Empty();
+ var subQuery = new Sql().Select("Member").From().Where(dto => dto.MemberGroup == memberGroup.Id);
+
var sql = GetBaseQuery(false)
- .Append(new Sql("WHERE umbracoNode.id IN (" + subquery.SQL + ")", subquery.Arguments))
+ .Append(new Sql("WHERE umbracoNode.id IN (" + subQuery.SQL + ")", subQuery.Arguments))
.OrderByDescending(x => x.VersionDate)
.OrderBy(x => x.SortOrder);
diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs
index 0460f8e6fd..935c199749 100644
--- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs
+++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs
@@ -152,7 +152,11 @@ namespace Umbraco.Core.Persistence
internal virtual IMemberRepository CreateMemberRepository(IDatabaseUnitOfWork uow)
{
- return new MemberRepository(uow, _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current, CreateMemberTypeRepository(uow));
+ return new MemberRepository(
+ uow,
+ _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current,
+ CreateMemberTypeRepository(uow),
+ CreateMemberGroupRepository(uow));
}
internal virtual IMemberTypeRepository CreateMemberTypeRepository(IDatabaseUnitOfWork uow)
diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
index b2253c8dd0..584091f1eb 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
@@ -29,10 +29,11 @@ namespace Umbraco.Tests.Persistence.Repositories
base.TearDown();
}
- private MemberRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MemberTypeRepository memberTypeRepository)
+ private MemberRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MemberTypeRepository memberTypeRepository, out MemberGroupRepository memberGroupRepository)
{
memberTypeRepository = new MemberTypeRepository(unitOfWork, NullCacheProvider.Current);
- var repository = new MemberRepository(unitOfWork, NullCacheProvider.Current, memberTypeRepository);
+ memberGroupRepository = new MemberGroupRepository(unitOfWork, NullCacheProvider.Current);
+ var repository = new MemberRepository(unitOfWork, NullCacheProvider.Current, memberTypeRepository, memberGroupRepository);
return repository;
}
@@ -56,7 +57,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var member = CreateTestMember();
@@ -73,7 +75,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var type = CreateTestMemberType();
var m1 = CreateTestMember(type, "Test 1", "test1@test.com", "pass1", "test1");
@@ -94,7 +97,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var type = CreateTestMemberType();
for (var i = 0; i < 5; i++)
@@ -118,7 +122,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var key = Guid.NewGuid();
var member = CreateTestMember(key: key);
@@ -140,7 +145,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
// Act
@@ -161,7 +167,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
// Act
@@ -180,7 +187,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var member = CreateTestMember();
@@ -202,7 +210,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var memberType = MockedContentTypes.CreateSimpleMemberType();
memberTypeRepository.AddOrUpdate(memberType);
@@ -228,7 +237,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var memberType = MockedContentTypes.CreateSimpleMemberType();
memberTypeRepository.AddOrUpdate(memberType);
@@ -256,7 +266,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var memberType = MockedContentTypes.CreateSimpleMemberType();
memberTypeRepository.AddOrUpdate(memberType);
@@ -302,7 +313,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
if (memberType == null)
{
@@ -324,7 +336,8 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
- using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ MemberGroupRepository memberGroupRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository, out memberGroupRepository))
{
var memberType = MockedContentTypes.CreateSimpleMemberType();
memberTypeRepository.AddOrUpdate(memberType);
diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs
index 31548bc286..7bda2ea76c 100644
--- a/src/Umbraco.Tests/Services/MemberServiceTests.cs
+++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs
@@ -39,37 +39,108 @@ namespace Umbraco.Tests.Services
[Test]
public void Can_Create_Duplicate_Role()
{
+ ServiceContext.MemberService.AddRole("MyTestRole");
+ ServiceContext.MemberService.AddRole("MyTestRole");
+ var found = ServiceContext.MemberService.GetAllRoles();
+
+ Assert.AreEqual(1, found.Count());
+ Assert.AreEqual("MyTestRole", found.Single());
}
[Test]
public void Can_Get_All_Roles()
{
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ ServiceContext.MemberService.AddRole("MyTestRole2");
+ ServiceContext.MemberService.AddRole("MyTestRole3");
+ var found = ServiceContext.MemberService.GetAllRoles();
+
+ Assert.AreEqual(3, found.Count());
}
[Test]
public void Can_Get_All_Roles_By_Member_Id()
{
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test");
+ ServiceContext.MemberService.Save(member);
+
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ ServiceContext.MemberService.AddRole("MyTestRole2");
+ ServiceContext.MemberService.AddRole("MyTestRole3");
+ ServiceContext.MemberService.AssignRoles(new[] { member.Id }, new[] { "MyTestRole1", "MyTestRole2" });
+
+ var memberRoles = ServiceContext.MemberService.GetAllRoles(member.Id);
+
+ Assert.AreEqual(2, memberRoles.Count());
}
[Test]
public void Can_Get_All_Roles_By_Member_Username()
{
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test");
+ ServiceContext.MemberService.Save(member);
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ ServiceContext.MemberService.AddRole("MyTestRole2");
+ ServiceContext.MemberService.AddRole("MyTestRole3");
+ ServiceContext.MemberService.AssignRoles(new[] { member.Id }, new[] { "MyTestRole1", "MyTestRole2" });
+
+ var memberRoles = ServiceContext.MemberService.GetAllRoles("test");
+
+ Assert.AreEqual(2, memberRoles.Count());
}
[Test]
public void Can_Delete_Role()
{
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ ServiceContext.MemberService.DeleteRole("MyTestRole1", false);
+
+ var memberRoles = ServiceContext.MemberService.GetAllRoles();
+
+ Assert.AreEqual(0, memberRoles.Count());
}
[Test]
public void Throws_When_Deleting_Assigned_Role()
{
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test");
+ ServiceContext.MemberService.Save(member);
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ ServiceContext.MemberService.AssignRoles(new[] { member.Id }, new[] { "MyTestRole1", "MyTestRole2" });
+
+ Assert.Throws(() => ServiceContext.MemberService.DeleteRole("MyTestRole1", true));
+ }
+
+ [Test]
+ public void Can_Get_Members_In_Role()
+ {
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ var roleId = DatabaseContext.Database.ExecuteScalar("SELECT id from umbracoNode where [text] = 'MyTestRole1'");
+
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ var member1 = MockedMember.CreateSimpleMember(memberType, "test1", "test1@test.com", "pass", "test1");
+ ServiceContext.MemberService.Save(member1);
+ var member2 = MockedMember.CreateSimpleMember(memberType, "test2", "test2@test.com", "pass", "test2");
+ ServiceContext.MemberService.Save(member2);
+
+ DatabaseContext.Database.Insert(new Member2MemberGroupDto {MemberGroup = roleId, Member = member1.Id});
+ DatabaseContext.Database.Insert(new Member2MemberGroupDto { MemberGroup = roleId, Member = member2.Id });
+
+ var membersInRole = ServiceContext.MemberService.GetMembersInRole("MyTestRole1");
+ Assert.AreEqual(2, membersInRole.Count());
}
[Test]
@@ -81,13 +152,57 @@ namespace Umbraco.Tests.Services
[Test]
public void Associate_Members_To_Roles_With_Member_Id()
{
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ var member1 = MockedMember.CreateSimpleMember(memberType, "test1", "test1@test.com", "pass", "test1");
+ ServiceContext.MemberService.Save(member1);
+ var member2 = MockedMember.CreateSimpleMember(memberType, "test2", "test2@test.com", "pass", "test2");
+ ServiceContext.MemberService.Save(member2);
+
+ ServiceContext.MemberService.AssignRoles(new[] { member1.Id, member2.Id }, new[] { "MyTestRole1" });
+
+ var membersInRole = ServiceContext.MemberService.GetMembersInRole("MyTestRole1");
+
+ Assert.AreEqual(2, membersInRole.Count());
}
[Test]
public void Associate_Members_To_Roles_With_Member_Username()
{
+ ServiceContext.MemberService.AddRole("MyTestRole1");
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ var member1 = MockedMember.CreateSimpleMember(memberType, "test1", "test1@test.com", "pass", "test1");
+ ServiceContext.MemberService.Save(member1);
+ var member2 = MockedMember.CreateSimpleMember(memberType, "test2", "test2@test.com", "pass", "test2");
+ ServiceContext.MemberService.Save(member2);
+
+ ServiceContext.MemberService.AssignRoles(new[] { member1.Username, member2.Username }, new[] { "MyTestRole1" });
+
+ var membersInRole = ServiceContext.MemberService.GetMembersInRole("MyTestRole1");
+
+ Assert.AreEqual(2, membersInRole.Count());
+ }
+
+ [Test]
+ public void Associate_Members_To_Roles_With_New_Role()
+ {
+ IMemberType memberType = MockedContentTypes.CreateSimpleMemberType();
+ ServiceContext.MemberTypeService.Save(memberType);
+ var member1 = MockedMember.CreateSimpleMember(memberType, "test1", "test1@test.com", "pass", "test1");
+ ServiceContext.MemberService.Save(member1);
+ var member2 = MockedMember.CreateSimpleMember(memberType, "test2", "test2@test.com", "pass", "test2");
+ ServiceContext.MemberService.Save(member2);
+
+ //implicitly create the role
+ ServiceContext.MemberService.AssignRoles(new[] { member1.Username, member2.Username }, new[] { "MyTestRole1" });
+
+ var membersInRole = ServiceContext.MemberService.GetMembersInRole("MyTestRole1");
+
+ Assert.AreEqual(2, membersInRole.Count());
}
[Test]