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:
Shannon
2013-12-19 12:11:33 +11:00
4 changed files with 115 additions and 7 deletions

View File

@@ -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;

View File

@@ -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);
}
}
}

View 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);
}
}
}

View File

@@ -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" />