diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs
index 21c6fcef22..443b2839d9 100644
--- a/src/Umbraco.Core/Services/ContentService.cs
+++ b/src/Umbraco.Core/Services/ContentService.cs
@@ -1038,7 +1038,7 @@ namespace Umbraco.Core.Services
}
//Ensure that Path and Level is updated on children
- var children = GetChildren(content.Id);
+ var children = GetChildren(content.Id).ToArray();
if (children.Any())
{
foreach (var child in children)
diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs
index 7bc7524294..ea0d8464a2 100644
--- a/src/Umbraco.Core/Services/MediaService.cs
+++ b/src/Umbraco.Core/Services/MediaService.cs
@@ -480,6 +480,8 @@ namespace Umbraco.Core.Services
/// Id of the User moving the Media
public void Move(IMedia media, int parentId, int userId = 0)
{
+ if (media == null) throw new ArgumentNullException("media");
+
using (new WriteLock(Locker))
{
//This ensures that the correct method is called if this method is used to Move to recycle bin.
@@ -500,7 +502,7 @@ namespace Umbraco.Core.Services
Save(media, userId);
//Ensure that relevant properties are updated on children
- var children = GetChildren(media.Id);
+ var children = GetChildren(media.Id).ToArray();
if (children.Any())
{
var parentPath = media.Path;
@@ -516,14 +518,16 @@ namespace Umbraco.Core.Services
}
}
- ///
+ ///
/// Deletes an object by moving it to the Recycle Bin
///
/// The to delete
/// Id of the User deleting the Media
public void MoveToRecycleBin(IMedia media, int userId = 0)
{
- if (Trashing.IsRaisedEventCancelled(new MoveEventArgs(media, -21), this))
+ if (media == null) throw new ArgumentNullException("media");
+
+ if (Trashing.IsRaisedEventCancelled(new MoveEventArgs(media, -21), this))
return;
//Find Descendants, which will be moved to the recycle bin along with the parent/grandparent.
@@ -951,7 +955,7 @@ namespace Umbraco.Core.Services
list.Add(child);
- var grandkids = GetChildren(child.Id);
+ var grandkids = GetChildren(child.Id).ToArray();
if (grandkids.Any())
{
list.AddRange(UpdatePropertiesOnChildren(grandkids, child.Path, child.Level, child.Trashed));
diff --git a/src/Umbraco.Tests/Services/BaseServiceTest.cs b/src/Umbraco.Tests/Services/BaseServiceTest.cs
index 23487eb582..b711f7c3ac 100644
--- a/src/Umbraco.Tests/Services/BaseServiceTest.cs
+++ b/src/Umbraco.Tests/Services/BaseServiceTest.cs
@@ -51,30 +51,7 @@ 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);
+
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Services/MediaServiceTests.cs b/src/Umbraco.Tests/Services/MediaServiceTests.cs
index 658bff9de9..fa9e530f3a 100644
--- a/src/Umbraco.Tests/Services/MediaServiceTests.cs
+++ b/src/Umbraco.Tests/Services/MediaServiceTests.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
+using Umbraco.Core.Models;
+using Umbraco.Tests.TestHelpers.Entities;
namespace Umbraco.Tests.Services
{
@@ -25,14 +27,15 @@ namespace Umbraco.Tests.Services
public void Can_Move_Media()
{
// Arrange
+ var mediaItems = CreateTrashedTestMedia();
var mediaService = ServiceContext.MediaService;
- var media = mediaService.GetById(1052);
+ var media = mediaService.GetById(mediaItems.Item3.Id);
// Act
- mediaService.Move(media, 1051);
+ mediaService.Move(media, mediaItems.Item2.Id);
// Assert
- Assert.That(media.ParentId, Is.EqualTo(1051));
+ Assert.That(media.ParentId, Is.EqualTo(mediaItems.Item2.Id));
Assert.That(media.Trashed, Is.False);
}
@@ -40,8 +43,9 @@ namespace Umbraco.Tests.Services
public void Can_Move_Media_To_RecycleBin()
{
// Arrange
+ var mediaItems = CreateTrashedTestMedia();
var mediaService = ServiceContext.MediaService;
- var media = mediaService.GetById(1050);
+ var media = mediaService.GetById(mediaItems.Item1.Id);
// Act
mediaService.MoveToRecycleBin(media);
@@ -55,18 +59,49 @@ namespace Umbraco.Tests.Services
public void Can_Move_Media_From_RecycleBin()
{
// Arrange
+ var mediaItems = CreateTrashedTestMedia();
var mediaService = ServiceContext.MediaService;
- var media = mediaService.GetById(1053);
+ var media = mediaService.GetById(mediaItems.Item4.Id);
// Act - moving out of recycle bin
- mediaService.Move(media, 1050);
- var mediaChild = mediaService.GetById(1054);
+ mediaService.Move(media, mediaItems.Item1.Id);
+ var mediaChild = mediaService.GetById(mediaItems.Item5.Id);
// Assert
- Assert.That(media.ParentId, Is.EqualTo(1050));
+ Assert.That(media.ParentId, Is.EqualTo(mediaItems.Item1.Id));
Assert.That(media.Trashed, Is.False);
- Assert.That(mediaChild.ParentId, Is.EqualTo(1053));
+ Assert.That(mediaChild.ParentId, Is.EqualTo(mediaItems.Item4.Id));
Assert.That(mediaChild.Trashed, Is.False);
}
+
+ private Tuple CreateTrashedTestMedia()
+ {
+ //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);
+
+
+ return new Tuple(folder, folder2, image, folderTrashed, imageTrashed);
+ }
}
}