Merge branch 'u4-8632b' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-8632b

# Conflicts:
#	src/Umbraco.Core/Models/Rdbms/UserGroup2NodePermissionDto.cs
#	src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs
#	src/Umbraco.Core/Persistence/Repositories/PermissionRepository.cs
#	src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
#	src/Umbraco.Core/Persistence/Repositories/UserTypeRepository.cs
#	src/Umbraco.Core/Persistence/RepositoryFactory.cs
#	src/Umbraco.Core/Services/ContentService.cs
#	src/Umbraco.Core/Services/SectionService.cs
#	src/Umbraco.Core/Services/UserService.cs
#	src/Umbraco.Core/Umbraco.Core.csproj
#	src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs
#	src/Umbraco.Tests/Persistence/Repositories/NotificationsRepositoryTest.cs
#	src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs
#	src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs
#	src/Umbraco.Tests/Services/ContentServiceTests.cs
#	src/Umbraco.Tests/Umbraco.Tests.csproj
#	src/Umbraco.Web.UI/config/trees.config
#	src/Umbraco.Web.UI/umbraco/users/PermissionEditor.aspx
#	src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs
#	src/Umbraco.Web/Umbraco.Web.csproj
#	src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
This commit is contained in:
Shannon
2017-05-04 18:29:43 +10:00
139 changed files with 4504 additions and 3816 deletions

View File

@@ -1,13 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.UnitOfWork;
@@ -39,6 +35,10 @@ namespace Umbraco.Tests.Persistence.Repositories
return repository;
}
private UserGroupRepository CreateUserGroupRepository(IDatabaseUnitOfWork unitOfWork)
{
return new UserGroupRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of<ILogger>(), SqlSyntax);
}
[Test]
public void Can_Perform_Add_On_UserRepository()
@@ -46,11 +46,9 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var user = MockedUser.CreateUser(CreateAndCommitUserType());
var user = MockedUser.CreateUser();
// Act
repository.AddOrUpdate(user);
@@ -67,12 +65,10 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1");
var use2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2");
var user1 = MockedUser.CreateUser("1");
var use2 = MockedUser.CreateUser("2");
// Act
repository.AddOrUpdate(user1);
@@ -92,10 +88,9 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var user = MockedUser.CreateUser(CreateAndCommitUserType());
var user = MockedUser.CreateUser();
repository.AddOrUpdate(user);
unitOfWork.Commit();
@@ -114,19 +109,15 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
using (var userGroupRepository = CreateUserGroupRepository(unitOfWork))
{
var user = MockedUser.CreateUser(CreateAndCommitUserType());
repository.AddOrUpdate(user);
unitOfWork.Commit();
var user = CreateAndCommitUserWithGroup(repository, userGroupRepository, unitOfWork);
// Act
var resolved = (User)repository.Get((int)user.Id);
resolved.Name = "New Name";
//the db column is not used, default permissions are taken from the user type's permissions, this is a getter only
//resolved.DefaultPermissions = "ZYX";
resolved.Language = "fr";
resolved.IsApproved = false;
resolved.RawPasswordValue = "new";
@@ -135,7 +126,6 @@ namespace Umbraco.Tests.Persistence.Repositories
resolved.StartMediaId = 11;
resolved.Email = "new@new.com";
resolved.Username = "newName";
resolved.RemoveAllowedSection("content");
repository.AddOrUpdate(resolved);
unitOfWork.Commit();
@@ -144,7 +134,6 @@ namespace Umbraco.Tests.Persistence.Repositories
// Assert
Assert.That(updatedItem.Id, Is.EqualTo(resolved.Id));
Assert.That(updatedItem.Name, Is.EqualTo(resolved.Name));
//Assert.That(updatedItem.DefaultPermissions, Is.EqualTo(resolved.DefaultPermissions));
Assert.That(updatedItem.Language, Is.EqualTo(resolved.Language));
Assert.That(updatedItem.IsApproved, Is.EqualTo(resolved.IsApproved));
Assert.That(updatedItem.RawPasswordValue, Is.EqualTo(resolved.RawPasswordValue));
@@ -153,7 +142,8 @@ namespace Umbraco.Tests.Persistence.Repositories
Assert.That(updatedItem.StartMediaId, Is.EqualTo(resolved.StartMediaId));
Assert.That(updatedItem.Email, Is.EqualTo(resolved.Email));
Assert.That(updatedItem.Username, Is.EqualTo(resolved.Username));
Assert.That(updatedItem.AllowedSections.Count(), Is.EqualTo(1));
Assert.That(updatedItem.AllowedSections.Count(), Is.EqualTo(2));
Assert.IsTrue(updatedItem.AllowedSections.Contains("content"));
Assert.IsTrue(updatedItem.AllowedSections.Contains("media"));
}
}
@@ -164,19 +154,17 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var user = MockedUser.CreateUser(CreateAndCommitUserType());
var user = MockedUser.CreateUser();
// Act
repository.AddOrUpdate(user);
unitOfWork.Commit();
var id = user.Id;
using (var utRepo = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, SqlSyntax))
using (var repository2 = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, SqlSyntax, utRepo))
using (var repository2 = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, SqlSyntax))
{
repository2.Delete(user);
unitOfWork.Commit();
@@ -195,8 +183,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// // Arrange
// var provider = new PetaPocoUnitOfWorkProvider(Logger);
// var unitOfWork = provider.GetUnitOfWork();
// UserTypeRepository userTypeRepository;
//using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
//using (var repository = CreateRepository(unitOfWork))
//{
// var user = MockedUser.CreateUser(CreateAndCommitUserType());
@@ -225,15 +212,13 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
using (var userGroupRepository = CreateUserGroupRepository(unitOfWork))
{
var user = MockedUser.CreateUser(CreateAndCommitUserType());
repository.AddOrUpdate(user);
unitOfWork.Commit();
var user = CreateAndCommitUserWithGroup(repository, userGroupRepository, unitOfWork);
// Act
var updatedItem = repository.Get((int) user.Id);
var updatedItem = repository.Get((int)user.Id);
// Assert
AssertPropertyValues(updatedItem, user);
@@ -246,8 +231,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
CreateAndCommitMultipleUsers(repository, unitOfWork);
@@ -266,8 +250,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var users = CreateAndCommitMultipleUsers(repository, unitOfWork);
@@ -287,8 +270,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
CreateAndCommitMultipleUsers(repository, unitOfWork);
@@ -308,8 +290,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var users = CreateAndCommitMultipleUsers(repository, unitOfWork);
@@ -327,8 +308,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
using (var repository = CreateRepository(unitOfWork))
{
var users = CreateAndCommitMultipleUsers(repository, unitOfWork);
@@ -341,170 +321,10 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
[Test]
public void Can_Remove_Section_For_User()
{
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
{
var users = CreateAndCommitMultipleUsers(repository, unitOfWork);
// Act
//add and remove a few times, this tests the internal collection
users[0].RemoveAllowedSection("content");
users[0].RemoveAllowedSection("content");
users[0].AddAllowedSection("content");
users[0].RemoveAllowedSection("content");
users[1].RemoveAllowedSection("media");
users[1].RemoveAllowedSection("media");
repository.AddOrUpdate(users[0]);
repository.AddOrUpdate(users[1]);
unitOfWork.Commit();
// Assert
var result = repository.GetAll((int) users[0].Id, (int) users[1].Id).ToArray();
Assert.AreEqual(1, result[0].AllowedSections.Count());
Assert.AreEqual("media", result[0].AllowedSections.First());
Assert.AreEqual(1, result[1].AllowedSections.Count());
Assert.AreEqual("content", result[1].AllowedSections.First());
}
}
[Test]
public void Can_Add_Section_For_User()
{
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
{
var users = CreateAndCommitMultipleUsers(repository, unitOfWork);
// Act
//add and remove a few times, this tests the internal collection
users[0].AddAllowedSection("settings");
users[0].AddAllowedSection("settings");
users[0].RemoveAllowedSection("settings");
users[0].AddAllowedSection("settings");
users[1].AddAllowedSection("developer");
//add the same even though it's already there
users[2].AddAllowedSection("content");
repository.AddOrUpdate(users[0]);
repository.AddOrUpdate(users[1]);
unitOfWork.Commit();
// Assert
var result = repository.GetAll((int) users[0].Id, (int) users[1].Id, (int) users[2].Id).ToArray();
Assert.AreEqual(3, result[0].AllowedSections.Count());
Assert.IsTrue(result[0].AllowedSections.Contains("content"));
Assert.IsTrue(result[0].AllowedSections.Contains("media"));
Assert.IsTrue(result[0].AllowedSections.Contains("settings"));
Assert.AreEqual(3, result[1].AllowedSections.Count());
Assert.IsTrue(result[1].AllowedSections.Contains("content"));
Assert.IsTrue(result[1].AllowedSections.Contains("media"));
Assert.IsTrue(result[1].AllowedSections.Contains("developer"));
Assert.AreEqual(2, result[2].AllowedSections.Count());
Assert.IsTrue(result[1].AllowedSections.Contains("content"));
Assert.IsTrue(result[1].AllowedSections.Contains("media"));
}
}
[Test]
public void Can_Update_Section_For_User()
{
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
{
var users = CreateAndCommitMultipleUsers(repository, unitOfWork);
// Act
users[0].RemoveAllowedSection("content");
users[0].AddAllowedSection("settings");
repository.AddOrUpdate(users[0]);
unitOfWork.Commit();
// Assert
var result = repository.Get((int) users[0].Id);
Assert.AreEqual(2, result.AllowedSections.Count());
Assert.IsTrue(result.AllowedSections.Contains("settings"));
Assert.IsTrue(result.AllowedSections.Contains("media"));
}
}
[Test]
public void Get_Users_Assigned_To_Section()
{
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
UserTypeRepository userTypeRepository;
using (var repository = CreateRepository(unitOfWork, out userTypeRepository))
{
var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1", "test", "media");
var user2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2", "media", "settings");
var user3 = MockedUser.CreateUser(CreateAndCommitUserType(), "3", "test", "settings");
repository.AddOrUpdate(user1);
repository.AddOrUpdate(user2);
repository.AddOrUpdate(user3);
unitOfWork.Commit();
// Act
var users = repository.GetUsersAssignedToSection("test");
// Assert
Assert.AreEqual(2, users.Count());
var names = users.Select(x => x.Username).ToArray();
Assert.IsTrue(names.Contains("TestUser1"));
Assert.IsTrue(names.Contains("TestUser3"));
}
}
[Test]
public void Default_User_Permissions_Based_On_User_Type()
{
// Arrange
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
using (var utRepo = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, SqlSyntax))
using (var repository = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, SqlSyntax, utRepo))
{
// Act
var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1", "test", "media");
repository.AddOrUpdate(user1);
unitOfWork.Commit();
// Assert
Assert.AreEqual(3, user1.DefaultPermissions.Count());
Assert.AreEqual("A", user1.DefaultPermissions.ElementAt(0));
Assert.AreEqual("B", user1.DefaultPermissions.ElementAt(1));
Assert.AreEqual("C", user1.DefaultPermissions.ElementAt(2));
}
}
private void AssertPropertyValues(IUser updatedItem, IUser originalUser)
{
Assert.That(updatedItem.Id, Is.EqualTo(originalUser.Id));
Assert.That(updatedItem.Name, Is.EqualTo(originalUser.Name));
Assert.That(updatedItem.DefaultPermissions, Is.EqualTo(originalUser.DefaultPermissions));
Assert.That(updatedItem.Language, Is.EqualTo(originalUser.Language));
Assert.That(updatedItem.IsApproved, Is.EqualTo(originalUser.IsApproved));
Assert.That(updatedItem.RawPasswordValue, Is.EqualTo(originalUser.RawPasswordValue));
@@ -518,29 +338,31 @@ namespace Umbraco.Tests.Persistence.Repositories
Assert.IsTrue(updatedItem.AllowedSections.Contains("content"));
}
private static User CreateAndCommitUserWithGroup(IUserRepository repository, IUserGroupRepository userGroupRepository, IDatabaseUnitOfWork unitOfWork)
{
var group = MockedUserGroup.CreateUserGroup();
userGroupRepository.AddOrUpdate(@group);
unitOfWork.Commit();
var user = MockedUser.CreateUser();
repository.AddOrUpdate(user);
unitOfWork.Commit();
userGroupRepository.AddUsersToGroup(@group.Id, new[] { user.Id });
unitOfWork.Commit();
return user;
}
private IUser[] CreateAndCommitMultipleUsers(IUserRepository repository, IUnitOfWork unitOfWork)
{
var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1");
var user2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2");
var user3 = MockedUser.CreateUser(CreateAndCommitUserType(), "3");
var user1 = MockedUser.CreateUser("1");
var user2 = MockedUser.CreateUser("2");
var user3 = MockedUser.CreateUser("3");
repository.AddOrUpdate(user1);
repository.AddOrUpdate(user2);
repository.AddOrUpdate(user3);
unitOfWork.Commit();
return new IUser[] { user1, user2, user3 };
}
private IUserType CreateAndCommitUserType()
{
var provider = new PetaPocoUnitOfWorkProvider(Logger);
var unitOfWork = provider.GetUnitOfWork();
using (var repository = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, SqlSyntax))
{
var userType = MockedUserType.CreateUserType();
repository.AddOrUpdate(userType);
unitOfWork.Commit();
return userType;
}
}
}
}