Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Security/MediaPermissionsTests.cs
Paul Johnson 00133e880d Move test projects from src/ to tests/ (#11357)
* Update gitignore

* Move csproj

* Update project references

* Update solutions

* Update build scripts

* Tests used to share editorconfig with projects in src

* Fix broken tests.

* Stop copying around .editorconfig

merged root one with linting

* csharp_style_expression_bodied -> suggestion

* Move StyleCop rulesets to matching directories and update shared build properties

* Remove legacy build files, update NuGet.cofig and solution files

* Restore myget source

* Clean up .gitignore

* Update .gitignore

* Move new test classes to tests after merge

* Gitignore + nuget config

* Move new test

Co-authored-by: Ronald Barendse <ronald@barend.se>
2021-10-18 08:14:04 +01:00

174 lines
7.4 KiB
C#

// Copyright (c) Umbraco.
// See LICENSE for more details.
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.Entities;
using Umbraco.Cms.Core.Models.Membership;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Builders.Extensions;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Security
{
[TestFixture]
public class MediaPermissionsTests
{
[Test]
public void Access_Allowed_By_Path()
{
// Arrange
IUser user = CreateUser(id: 9);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
IMedia media = mediaMock.Object;
var mediaServiceMock = new Mock<IMediaService>();
mediaServiceMock.Setup(x => x.GetById(1234)).Returns(media);
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, 1234, out _);
// Assert
Assert.AreEqual(MediaPermissions.MediaAccess.Granted, result);
}
[Test]
public void Returns_Not_Found_When_No_Media_Found()
{
// Arrange
IUser user = CreateUser(id: 9);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
IMedia media = mediaMock.Object;
var mediaServiceMock = new Mock<IMediaService>();
mediaServiceMock.Setup(x => x.GetById(0)).Returns(media);
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act/assert
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, 1234, out _);
Assert.AreEqual(MediaPermissions.MediaAccess.NotFound, result);
}
[Test]
public void No_Access_By_Path()
{
// Arrange
IUser user = CreateUser(id: 9, startMediaId: 9876);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
IMedia media = mediaMock.Object;
var mediaServiceMock = new Mock<IMediaService>();
mediaServiceMock.Setup(x => x.GetById(1234)).Returns(media);
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
.Returns(new[] { Mock.Of<TreeEntityPath>(entity => entity.Id == 9876 && entity.Path == "-1,9876") });
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, 1234, out _);
// Assert
Assert.AreEqual(MediaPermissions.MediaAccess.Denied, result);
}
[Test]
public void Access_To_Root_By_Path()
{
// Arrange
IUser user = CreateUser();
var mediaServiceMock = new Mock<IMediaService>();
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, -1, out _);
// Assert
Assert.AreEqual(MediaPermissions.MediaAccess.Granted, result);
}
[Test]
public void No_Access_To_Root_By_Path()
{
// Arrange
IUser user = CreateUser(startMediaId: 1234);
var mediaServiceMock = new Mock<IMediaService>();
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
.Returns(new[] { Mock.Of<TreeEntityPath>(entity => entity.Id == 1234 && entity.Path == "-1,1234") });
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, -1, out _);
// Assert
Assert.AreEqual(MediaPermissions.MediaAccess.Denied, result);
}
[Test]
public void Access_To_Recycle_Bin_By_Path()
{
// Arrange
IUser user = CreateUser();
var mediaServiceMock = new Mock<IMediaService>();
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, -21, out _);
// Assert
Assert.AreEqual(MediaPermissions.MediaAccess.Granted, result);
}
[Test]
public void No_Access_To_Recycle_Bin_By_Path()
{
// Arrange
IUser user = CreateUser(startMediaId: 1234);
var mediaServiceMock = new Mock<IMediaService>();
IMediaService mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
.Returns(new[] { Mock.Of<TreeEntityPath>(entity => entity.Id == 1234 && entity.Path == "-1,1234") });
IEntityService entityService = entityServiceMock.Object;
var mediaPermissions = new MediaPermissions(mediaService, entityService, AppCaches.Disabled);
// Act
MediaPermissions.MediaAccess result = mediaPermissions.CheckPermissions(user, -21, out _);
// Assert
Assert.AreEqual(MediaPermissions.MediaAccess.Denied, result);
}
private IUser CreateUser(int id = 0, int? startMediaId = null) =>
new UserBuilder()
.WithId(id)
.WithStartMediaIds(startMediaId.HasValue ? new[] { startMediaId.Value } : new int[0])
.AddUserGroup()
.WithId(1)
.WithName("admin")
.WithAlias("admin")
.Done()
.Build();
}
}