Merge branch '6.2.0' of https://github.com/sniffdk/Umbraco-CMS into sniffdk-6.2.0
Conflicts: src/Umbraco.Tests/Umbraco.Tests.csproj
This commit is contained in:
@@ -492,17 +492,22 @@ namespace Umbraco.Core.Services
|
||||
if (Moving.IsRaisedEventCancelled(new MoveEventArgs<IMedia>(media, parentId), this))
|
||||
return;
|
||||
|
||||
media.ParentId = parentId;
|
||||
media.ParentId = parentId;
|
||||
if (media.Trashed)
|
||||
{
|
||||
media.ChangeTrashedState(false, parentId);
|
||||
}
|
||||
Save(media, userId);
|
||||
|
||||
//Ensure that Path and Level is updated on children
|
||||
//Ensure that relevant properties are updated on children
|
||||
var children = GetChildren(media.Id);
|
||||
if (children.Any())
|
||||
{
|
||||
var parentPath = media.Path;
|
||||
var parentLevel = media.Level;
|
||||
var updatedDescendents = UpdatePathAndLevelOnChildren(children, parentPath, parentLevel);
|
||||
Save(updatedDescendents, userId);
|
||||
var parentTrashed = media.Trashed;
|
||||
var updatedDescendants = UpdatePropertiesOnChildren(children, parentPath, parentLevel, parentTrashed);
|
||||
Save(updatedDescendants, userId);
|
||||
}
|
||||
|
||||
Moved.RaiseEvent(new MoveEventArgs<IMedia>(media, false, parentId), this);
|
||||
@@ -925,25 +930,31 @@ namespace Umbraco.Core.Services
|
||||
|
||||
/// <summary>
|
||||
/// Updates the Path and Level on a collection of <see cref="IMedia"/> objects
|
||||
/// based on the Parent's Path and Level.
|
||||
/// based on the Parent's Path and Level. Also change the trashed state if relevant.
|
||||
/// </summary>
|
||||
/// <param name="children">Collection of <see cref="IMedia"/> objects to update</param>
|
||||
/// <param name="parentPath">Path of the Parent media</param>
|
||||
/// <param name="parentLevel">Level of the Parent media</param>
|
||||
/// <param name="parentTrashed">Indicates whether the Parent is trashed or not</param>
|
||||
/// <returns>Collection of updated <see cref="IMedia"/> objects</returns>
|
||||
private IEnumerable<IMedia> UpdatePathAndLevelOnChildren(IEnumerable<IMedia> children, string parentPath, int parentLevel)
|
||||
private IEnumerable<IMedia> UpdatePropertiesOnChildren(IEnumerable<IMedia> children, string parentPath, int parentLevel, bool parentTrashed)
|
||||
{
|
||||
var list = new List<IMedia>();
|
||||
foreach (var child in children)
|
||||
{
|
||||
child.Path = string.Concat(parentPath, ",", child.Id);
|
||||
child.Level = parentLevel + 1;
|
||||
if (parentTrashed != child.Trashed)
|
||||
{
|
||||
child.ChangeTrashedState(parentTrashed, child.ParentId);
|
||||
}
|
||||
|
||||
list.Add(child);
|
||||
|
||||
var grandkids = GetChildren(child.Id);
|
||||
if (grandkids.Any())
|
||||
{
|
||||
list.AddRange(UpdatePathAndLevelOnChildren(grandkids, child.Path, child.Level));
|
||||
list.AddRange(UpdatePropertiesOnChildren(grandkids, child.Path, child.Level, child.Trashed));
|
||||
}
|
||||
}
|
||||
return list;
|
||||
|
||||
@@ -51,6 +51,30 @@ namespace Umbraco.Tests.Services
|
||||
Content trashed = MockedContent.CreateSimpleContent(contentType, "Text Page Deleted", -20);
|
||||
trashed.Trashed = true;
|
||||
ServiceContext.ContentService.Save(trashed, 0);
|
||||
|
||||
//Create and Save folder-Media -> 1050
|
||||
var folderMediaType = ServiceContext.ContentTypeService.GetMediaType(1031);
|
||||
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
|
||||
ServiceContext.MediaService.Save(folder);
|
||||
|
||||
//Create and Save folder-Media -> 1051
|
||||
var folder2 = MockedMedia.CreateMediaFolder(folderMediaType, -1);
|
||||
ServiceContext.MediaService.Save(folder2);
|
||||
|
||||
//Create and Save image-Media -> 1052
|
||||
var imageMediaType = ServiceContext.ContentTypeService.GetMediaType(1032);
|
||||
var image = (Media)MockedMedia.CreateMediaImage(imageMediaType, 1050);
|
||||
ServiceContext.MediaService.Save(image);
|
||||
|
||||
//Create and Save folder-Media that is trashed -> 1053
|
||||
var folderTrashed = (Media)MockedMedia.CreateMediaFolder(folderMediaType, -21);
|
||||
folderTrashed.Trashed = true;
|
||||
ServiceContext.MediaService.Save(folderTrashed);
|
||||
|
||||
//Create and Save image-Media child of folderTrashed -> 1054
|
||||
var imageTrashed = (Media)MockedMedia.CreateMediaImage(imageMediaType, folderTrashed.Id);
|
||||
imageTrashed.Trashed = true;
|
||||
ServiceContext.MediaService.Save(imageTrashed);
|
||||
}
|
||||
}
|
||||
}
|
||||
72
src/Umbraco.Tests/Services/MediaServiceTests.cs
Normal file
72
src/Umbraco.Tests/Services/MediaServiceTests.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Umbraco.Tests.Services
|
||||
{
|
||||
[TestFixture, RequiresSTA]
|
||||
public class MediaServiceTests : BaseServiceTest
|
||||
{
|
||||
[SetUp]
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public override void TearDown()
|
||||
{
|
||||
base.TearDown();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Move_Media()
|
||||
{
|
||||
// Arrange
|
||||
var mediaService = ServiceContext.MediaService;
|
||||
var media = mediaService.GetById(1052);
|
||||
|
||||
// Act
|
||||
mediaService.Move(media, 1051);
|
||||
|
||||
// Assert
|
||||
Assert.That(media.ParentId, Is.EqualTo(1051));
|
||||
Assert.That(media.Trashed, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Move_Media_To_RecycleBin()
|
||||
{
|
||||
// Arrange
|
||||
var mediaService = ServiceContext.MediaService;
|
||||
var media = mediaService.GetById(1050);
|
||||
|
||||
// Act
|
||||
mediaService.MoveToRecycleBin(media);
|
||||
|
||||
// Assert
|
||||
Assert.That(media.ParentId, Is.EqualTo(-21));
|
||||
Assert.That(media.Trashed, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Move_Media_From_RecycleBin()
|
||||
{
|
||||
// Arrange
|
||||
var mediaService = ServiceContext.MediaService;
|
||||
var media = mediaService.GetById(1053);
|
||||
|
||||
// Act - moving out of recycle bin
|
||||
mediaService.Move(media, 1050);
|
||||
var mediaChild = mediaService.GetById(1054);
|
||||
|
||||
// Assert
|
||||
Assert.That(media.ParentId, Is.EqualTo(1050));
|
||||
Assert.That(media.Trashed, Is.False);
|
||||
Assert.That(mediaChild.ParentId, Is.EqualTo(1053));
|
||||
Assert.That(mediaChild.Trashed, Is.False);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -216,6 +216,7 @@
|
||||
<Compile Include="PublishedContent\StronglyTypedModels\UmbracoTemplatePage`T.cs" />
|
||||
<Compile Include="Services\LocalizationServiceTests.cs" />
|
||||
<Compile Include="Services\MemberServiceTests.cs" />
|
||||
<Compile Include="Services\MediaServiceTests.cs" />
|
||||
<Compile Include="Services\MemberTypeServiceTests.cs" />
|
||||
<Compile Include="Services\PackagingServiceTests.cs" />
|
||||
<Compile Include="Services\PerformanceTests.cs" />
|
||||
|
||||
Reference in New Issue
Block a user