diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index 9de7614230..43cedec951 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -367,8 +367,8 @@ namespace Umbraco.Core.Models.Membership { lock (_additionalDataLock) { - return AdditionalData.TryGetValue(cacheKey, out var allContentStartNodes) - ? allContentStartNodes as T + return AdditionalData.TryGetValue(cacheKey, out var data) + ? data as T : null; } } diff --git a/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs b/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs index 793d31a5d3..641691e853 100644 --- a/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs +++ b/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs @@ -27,6 +27,7 @@ using Umbraco.Tests.Testing.Objects.Accessors; using Umbraco.Web.Security.Providers; using Umbraco.Tests.Strings; using Umbraco.Tests.Common; +using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.TestHelpers.ControllerTesting { @@ -113,18 +114,20 @@ namespace Umbraco.Tests.TestHelpers.ControllerTesting var role = backofficeIdentity.Roles[index]; groups.Add(new ReadOnlyUserGroup(index + 1, role, "icon-user", null, null, role, new string[0], new string[0])); } + var mockUser = MockedUser.GetUserMock(); + mockUser.Setup(x => x.IsApproved).Returns(true); + mockUser.Setup(x => x.IsLockedOut).Returns(false); + mockUser.Setup(x => x.AllowedSections).Returns(backofficeIdentity.AllowedApplications); + mockUser.Setup(x => x.Groups).Returns(groups); + mockUser.Setup(x => x.Email).Returns("admin@admin.com"); + mockUser.Setup(x => x.Id).Returns((int)backofficeIdentity.Id); + mockUser.Setup(x => x.Language).Returns("en"); + mockUser.Setup(x => x.Name).Returns(backofficeIdentity.RealName); + mockUser.Setup(x => x.StartContentIds).Returns(backofficeIdentity.StartContentNodes); + mockUser.Setup(x => x.StartMediaIds).Returns(backofficeIdentity.StartMediaNodes); + mockUser.Setup(x => x.Username).Returns(backofficeIdentity.Username); webSecurity.Setup(x => x.CurrentUser) - .Returns(Mock.Of(u => u.IsApproved == true - && u.IsLockedOut == false - && u.AllowedSections == backofficeIdentity.AllowedApplications - && u.Groups == groups - && u.Email == "admin@admin.com" - && u.Id == (int) backofficeIdentity.Id - && u.Language == "en" - && u.Name == backofficeIdentity.RealName - && u.StartContentIds == backofficeIdentity.StartContentNodes - && u.StartMediaIds == backofficeIdentity.StartMediaNodes - && u.Username == backofficeIdentity.Username)); + .Returns(mockUser.Object); //mock Validate webSecurity.Setup(x => x.ValidateCurrentUser()) diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs index f6c0c984de..531d87f76f 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs @@ -1,4 +1,5 @@ -using System; +using Moq; +using System; using System.Collections.Generic; using Umbraco.Core.Models.Membership; @@ -6,6 +7,20 @@ namespace Umbraco.Tests.TestHelpers.Entities { public class MockedUser { + /// + /// Returns a and ensures that the ToUserCache and FromUserCache methods are mapped correctly for + /// dealing with start node caches + /// + /// + internal static Mock GetUserMock() + { + var userCache = new Dictionary(); + var userMock = new Mock(); + userMock.Setup(x => x.FromUserCache(It.IsAny())).Returns((string key) => userCache.TryGetValue(key, out var val) ? val is int[] iVal ? iVal : null : null); + userMock.Setup(x => x.ToUserCache(It.IsAny(), It.IsAny())).Callback((string key, int[] val) => userCache[key] = val); + return userMock; + } + internal static User CreateUser(string suffix = "") { var user = new User(SettingsForTests.GenerateMockGlobalSettings()) diff --git a/src/Umbraco.Tests/Web/Controllers/ContentControllerUnitTests.cs b/src/Umbraco.Tests/Web/Controllers/ContentControllerUnitTests.cs index f55a4e593b..5697e2bc7f 100644 --- a/src/Umbraco.Tests/Web/Controllers/ContentControllerUnitTests.cs +++ b/src/Umbraco.Tests/Web/Controllers/ContentControllerUnitTests.cs @@ -7,18 +7,20 @@ using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Security; using Umbraco.Core.Services; +using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Web.Editors; namespace Umbraco.Tests.Web.Controllers { [TestFixture] public class ContentControllerUnitTests - { + { + [Test] public void Access_Allowed_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -44,7 +46,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Content_Found() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); var user = userMock.Object; var contentMock = new Mock(); @@ -72,7 +74,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.StartContentIds).Returns(new[] { 9876 }); var user = userMock.Object; @@ -103,7 +105,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_By_Permission() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); var user = userMock.Object; var contentMock = new Mock(); @@ -134,7 +136,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_Allowed_By_Permission() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -166,7 +168,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Root_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -188,7 +190,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -210,7 +212,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 }); var user = userMock.Object; @@ -234,7 +236,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Root_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 }); var user = userMock.Object; @@ -258,7 +260,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Root_By_Permission() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -288,7 +290,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Root_By_Permission() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); var user = userMock.Object; @@ -316,7 +318,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Recycle_Bin_By_Permission() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -346,7 +348,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Recycle_Bin_By_Permission() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); var user = userMock.Object; diff --git a/src/Umbraco.Tests/Web/Controllers/FilterAllowedOutgoingContentAttributeTests.cs b/src/Umbraco.Tests/Web/Controllers/FilterAllowedOutgoingContentAttributeTests.cs index 634d58b3fd..c72bd6be20 100644 --- a/src/Umbraco.Tests/Web/Controllers/FilterAllowedOutgoingContentAttributeTests.cs +++ b/src/Umbraco.Tests/Web/Controllers/FilterAllowedOutgoingContentAttributeTests.cs @@ -10,6 +10,7 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; +using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.WebApi.Filters; @@ -85,7 +86,7 @@ namespace Umbraco.Tests.Web.Controllers [Test] public void Filter_On_Start_Node() { - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.StartContentIds).Returns(new[] { 5 }); var user = userMock.Object; @@ -125,7 +126,7 @@ namespace Umbraco.Tests.Web.Controllers } var ids = list.Select(x => (int)x.Id).ToArray(); - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.StartContentIds).Returns(new int[0]); var user = userMock.Object; diff --git a/src/Umbraco.Tests/Web/Controllers/MediaControllerUnitTests.cs b/src/Umbraco.Tests/Web/Controllers/MediaControllerUnitTests.cs index f409d81a2d..736e0c3dfa 100644 --- a/src/Umbraco.Tests/Web/Controllers/MediaControllerUnitTests.cs +++ b/src/Umbraco.Tests/Web/Controllers/MediaControllerUnitTests.cs @@ -6,6 +6,7 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; +using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Web.Editors; namespace Umbraco.Tests.Web.Controllers @@ -17,7 +18,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_Allowed_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -41,7 +42,7 @@ namespace Umbraco.Tests.Web.Controllers public void Throws_Exception_When_No_Media_Found() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); var user = userMock.Object; var mediaMock = new Mock(); @@ -61,7 +62,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.StartMediaIds).Returns(new[] { 9876 }); var user = userMock.Object; @@ -87,7 +88,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Root_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -107,7 +108,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Root_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 }); var user = userMock.Object; @@ -129,7 +130,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); var user = userMock.Object; @@ -149,7 +150,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = new Mock(); + var userMock = MockedUser.GetUserMock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 }); var user = userMock.Object;