Further update to user service and controller tests to use test builders.

This commit is contained in:
Andy Butland
2020-10-06 12:02:29 +02:00
parent 7461a10c78
commit 11dc3459bc
6 changed files with 93 additions and 108 deletions

View File

@@ -26,7 +26,7 @@ namespace Umbraco.Tests.Common.Builders
private string _icon;
private string _name;
private IEnumerable<string> _permissions = Enumerable.Empty<string>();
private IEnumerable<string> _sectionCollection = Enumerable.Empty<string>();
private IEnumerable<string> _allowedSections = Enumerable.Empty<string>();
private string _suffix;
private int? _startContentId;
private int? _startMediaId;
@@ -55,7 +55,7 @@ namespace Umbraco.Tests.Common.Builders
public UserGroupBuilder<TParent> WithPermissions(string permissions)
{
_permissions = permissions.Split();
_permissions = permissions.ToCharArray().Select(x => x.ToString());
return this;
}
@@ -65,6 +65,12 @@ namespace Umbraco.Tests.Common.Builders
return this;
}
public UserGroupBuilder<TParent> WithAllowedSections(IList<string> allowedSections)
{
_allowedSections = allowedSections;
return this;
}
public UserGroupBuilder<TParent> WithStartContentId(int startContentId)
{
_startContentId = startContentId;
@@ -107,9 +113,9 @@ namespace Umbraco.Tests.Common.Builders
userGroup.StartContentId = startContentId;
userGroup.StartMediaId = startMediaId;
foreach (var item in _sectionCollection)
foreach (var section in _allowedSections)
{
userGroup.AddAllowedSection(item);
userGroup.AddAllowedSection(section);
}
return userGroup;

View File

@@ -1052,19 +1052,16 @@ namespace Umbraco.Tests.Integration.Services
private UserGroup CreateTestUserGroup(string alias = "testGroup", string name = "Test Group")
{
var userGroup = new UserGroup(ShortStringHelper)
{
Alias = alias,
Name = name,
Permissions = "ABCDEFGHIJ1234567".ToCharArray().Select(x => x.ToString())
};
userGroup.AddAllowedSection("content");
userGroup.AddAllowedSection("media");
var userGroup = new UserGroupBuilder()
.WithAlias(alias)
.WithName(name)
.WithPermissions("ABCDEFGHIJ1234567")
.WithAllowedSections(new[] { "content", "media" })
.Build();
_userService.Save(userGroup);
return userGroup;
return (UserGroup)userGroup;
}
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System.Linq;
using NUnit.Framework;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
@@ -41,7 +41,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders
Assert.AreEqual(testName, userGroup.Name);
Assert.AreEqual(testUserCount, userGroup.UserCount);
Assert.AreEqual(testIcon, userGroup.Icon);
Assert.AreEqual(testPermissions, string.Join(string.Empty, userGroup.Permissions));
Assert.AreEqual(testPermissions.Length, userGroup.Permissions.Count());
Assert.AreEqual(testStartContentId, userGroup.StartContentId);
Assert.AreEqual(testStartMediaId, userGroup.StartMediaId);
}

View File

@@ -1,27 +1,23 @@
using System.Collections.Generic;
using Moq;
using Moq;
using NUnit.Framework;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
namespace Umbraco.Tests.Web.Controllers
{
[TestFixture]
public class ContentControllerUnitTests
{
[Test]
public void Access_Allowed_By_Path()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -44,9 +40,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Content_Found()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -72,10 +66,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 9876 });
var user = userMock.Object;
var user = CreateUser(id: 9, startContentId: 9876);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -103,9 +94,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -134,10 +123,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_Allowed_By_Permission()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -166,10 +152,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Root_By_Path()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser();
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -188,10 +171,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Recycle_Bin_By_Path()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser();
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -210,10 +190,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Recycle_Bin_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startContentId: 1234);
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -234,10 +211,8 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Root_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startContentId: 1234);
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -258,10 +233,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Root_By_Permission()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser();
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -276,7 +248,6 @@ namespace Umbraco.Tests.Web.Controllers
var entityServiceMock = new Mock<IEntityService>();
var entityService = entityServiceMock.Object;
//act
var result = ContentPermissionsHelper.CheckPermissions(-1, user, userService, contentService, entityService, out var foundContent, new[] { 'A' });
@@ -288,9 +259,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Root_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
var user = userMock.Object;
var user = CreateUser(withUserGroup: false);
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -316,10 +285,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Recycle_Bin_By_Permission()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser();
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -346,9 +312,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Recycle_Bin_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
var user = userMock.Object;
var user = CreateUser(withUserGroup: false);
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -369,6 +333,24 @@ namespace Umbraco.Tests.Web.Controllers
//assert
Assert.AreEqual(ContentPermissionsHelper.ContentAccess.Denied, result);
}
private IUser CreateUser(int id = 0, int startContentId = -1, bool withUserGroup = true)
{
var builder = new UserBuilder()
.WithId(id)
.WithStartContentIds(startContentId == -1 ? new int[0] : new[] { startContentId });
if (withUserGroup)
{
builder = builder
.AddUserGroup()
.WithId(1)
.WithName("admin")
.WithAlias("admin")
.Done();
}
return builder.Build();
}
}
//NOTE: The below self hosted stuff does work so need to get some tests written. Some are not possible atm because

View File

@@ -5,7 +5,8 @@ using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Web.BackOffice.Controllers;
using Umbraco.Web.Common.Exceptions;
@@ -18,10 +19,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_Allowed_By_Path()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser(id: 9);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
var media = mediaMock.Object;
@@ -42,9 +40,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Throws_Exception_When_No_Media_Found()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
var user = userMock.Object;
var user = CreateUser(id: 9);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
var media = mediaMock.Object;
@@ -62,10 +58,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartMediaIds).Returns(new[] { 9876 });
var user = userMock.Object;
var user = CreateUser(id: 9, startMediaId: 9876);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
var media = mediaMock.Object;
@@ -88,10 +81,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Root_By_Path()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser();
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -108,10 +98,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Root_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startMediaId: 1234);
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -130,10 +117,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Recycle_Bin_By_Path()
{
//arrange
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<string>()) });
var user = userMock.Object;
var user = CreateUser();
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -150,10 +134,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Recycle_Bin_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startMediaId: 1234);
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -167,5 +148,18 @@ namespace Umbraco.Tests.Web.Controllers
//assert
Assert.IsFalse(result);
}
private IUser CreateUser(int id = 0, int startMediaId = -1)
{
return new UserBuilder()
.WithId(id)
.WithStartMediaIds(new[] { startMediaId })
.AddUserGroup()
.WithId(1)
.WithName("admin")
.WithAlias("admin")
.Done()
.Build();
}
}
}

View File

@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using Microsoft.AspNetCore.Mvc;
using Moq;
using NUnit.Framework;
@@ -10,11 +9,11 @@ using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Web.Actions;
using Umbraco.Web.BackOffice.Filters;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Security;
namespace Umbraco.Tests.Web.Controllers
{
@@ -78,10 +77,7 @@ namespace Umbraco.Tests.Web.Controllers
[Test]
public void Filter_On_Start_Node()
{
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 5 });
var user = userMock.Object;
var user = CreateUser(id: 9, startContentId: 5);
var userServiceMock = new Mock<IUserService>();
var userService = userServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -124,10 +120,7 @@ namespace Umbraco.Tests.Web.Controllers
}
var ids = list.Select(x => (int)x.Id).ToArray();
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartContentIds).Returns(new int[0]);
var user = userMock.Object;
var user = CreateUser(id: 9, startContentId: 0);
var userServiceMock = new Mock<IUserService>();
//we're only assigning 3 nodes browse permissions so that is what we expect as a result
@@ -155,6 +148,19 @@ namespace Umbraco.Tests.Web.Controllers
Assert.AreEqual(3, list.ElementAt(2).Id);
}
private IUser CreateUser(int id = 0, int startContentId = -1)
{
return new UserBuilder()
.WithId(id)
.WithStartContentIds(new[] { startContentId })
.AddUserGroup()
.WithId(1)
.WithName("admin")
.WithAlias("admin")
.Done()
.Build();
}
private class MyTestClass
{
public IEnumerable<ContentItemBasic> MyList { get; set; }