using System.Collections.Generic; using System.Web.Http; using Moq; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; using Umbraco.Web.Editors; namespace Umbraco.Tests.Web.Controllers { [TestFixture] public class MediaControllerUnitTests { [Test] public void Access_Allowed_By_Path() { //arrange var userMock = new Mock(); 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; var mediaMock = new Mock(); mediaMock.Setup(m => m.Path).Returns("-1,1234,5678"); var media = mediaMock.Object; var mediaServiceMock = new Mock(); mediaServiceMock.Setup(x => x.GetById(1234)).Returns(media); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); var entityService = entityServiceMock.Object; //act var result = MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, 1234); //assert Assert.IsTrue(result); } [Test] public void Throws_Exception_When_No_Media_Found() { //arrange var userMock = new Mock(); userMock.Setup(u => u.Id).Returns(9); var user = userMock.Object; var mediaMock = new Mock(); mediaMock.Setup(m => m.Path).Returns("-1,1234,5678"); var media = mediaMock.Object; var mediaServiceMock = new Mock(); mediaServiceMock.Setup(x => x.GetById(0)).Returns(media); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); var entityService = entityServiceMock.Object; //act/assert Assert.Throws(() => MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, 1234)); } [Test] public void No_Access_By_Path() { //arrange var userMock = new Mock(); userMock.Setup(u => u.Id).Returns(9); userMock.Setup(u => u.StartMediaIds).Returns(new[] { 9876 }); var user = userMock.Object; var mediaMock = new Mock(); mediaMock.Setup(m => m.Path).Returns("-1,1234,5678"); var media = mediaMock.Object; var mediaServiceMock = new Mock(); mediaServiceMock.Setup(x => x.GetById(1234)).Returns(media); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny(), It.IsAny())) .Returns(new[] { Mock.Of(entity => entity.Id == 9876 && entity.Path == "-1,9876") }); var entityService = entityServiceMock.Object; //act var result = MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, 1234); //assert Assert.IsFalse(result); } [Test] public void Access_To_Root_By_Path() { //arrange var userMock = new Mock(); 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; var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); var entityService = entityServiceMock.Object; //act var result = MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, -1); //assert Assert.IsTrue(result); } [Test] public void No_Access_To_Root_By_Path() { //arrange var userMock = new Mock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 }); var user = userMock.Object; var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny(), It.IsAny())) .Returns(new[] { Mock.Of(entity => entity.Id == 1234 && entity.Path == "-1,1234") }); var entityService = entityServiceMock.Object; //act var result = MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, -1); //assert Assert.IsFalse(result); } [Test] public void Access_To_Recycle_Bin_By_Path() { //arrange var userMock = new Mock(); 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; var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); var entityService = entityServiceMock.Object; //act var result = MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, -21); //assert Assert.IsTrue(result); } [Test] public void No_Access_To_Recycle_Bin_By_Path() { //arrange var userMock = new Mock(); userMock.Setup(u => u.Id).Returns(0); userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 }); var user = userMock.Object; var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny(), It.IsAny())) .Returns(new[] { Mock.Of(entity => entity.Id == 1234 && entity.Path == "-1,1234") }); var entityService = entityServiceMock.Object; //act var result = MediaController.CheckPermissions(new Dictionary(), user, mediaService, entityService, -21); //assert Assert.IsFalse(result); } } }