diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 08494a3662..da5bc4ee43 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -457,11 +457,9 @@ namespace Umbraco.Core.Services var repository = RepositoryFactory.CreateMediaRepository(uow); var query = Query.Builder; - //if the id is System Root, then just get all - if (id != Constants.System.Root) - { - query.Where(x => x.ParentId == id); - } + // always check for a parent - else it will also get decendants + query.Where(x => x.ParentId == id); + IQuery filterQuery = null; if (filter.IsNullOrWhiteSpace() == false) { diff --git a/src/Umbraco.Tests/Services/MediaServiceTests.cs b/src/Umbraco.Tests/Services/MediaServiceTests.cs index 2f95c57b29..eec1f7ac6f 100644 --- a/src/Umbraco.Tests/Services/MediaServiceTests.cs +++ b/src/Umbraco.Tests/Services/MediaServiceTests.cs @@ -145,6 +145,70 @@ namespace Umbraco.Tests.Services Assert.That(resolvedMedia.GetValue(Constants.Conventions.Media.File).ToString().Contains(mediaPath)); } + [Test] + public void Can_Get_Paged_Children() + { + var mediaType = MockedContentTypes.CreateImageMediaType("Image2"); + ServiceContext.ContentTypeService.Save(mediaType); + for (int i = 0; i < 10; i++) + { + var c1 = MockedMedia.CreateMediaImage(mediaType, -1); + ServiceContext.MediaService.Save(c1); + } + + var service = ServiceContext.MediaService; + + long total; + var entities = service.GetPagedChildren(-1, 0, 6, out total).ToArray(); + Assert.That(entities.Length, Is.EqualTo(6)); + Assert.That(total, Is.EqualTo(10)); + entities = service.GetPagedChildren(-1, 1, 6, out total).ToArray(); + Assert.That(entities.Length, Is.EqualTo(4)); + Assert.That(total, Is.EqualTo(10)); + } + + [Test] + public void Can_Get_Paged_Children_Dont_Get_Descendants() + { + var mediaType = MockedContentTypes.CreateImageMediaType("Image2"); + ServiceContext.ContentTypeService.Save(mediaType); + // only add 9 as we also add a folder with children + for (int i = 0; i < 9; i++) + { + var m1 = MockedMedia.CreateMediaImage(mediaType, -1); + ServiceContext.MediaService.Save(m1); + } + + var mediaTypeForFolder = MockedContentTypes.CreateImageMediaType("Folder2"); + ServiceContext.ContentTypeService.Save(mediaTypeForFolder); + var mediaFolder = MockedMedia.CreateMediaFolder(mediaTypeForFolder, -1); + ServiceContext.MediaService.Save(mediaFolder); + for (int i = 0; i < 10; i++) + { + var m1 = MockedMedia.CreateMediaImage(mediaType, mediaFolder.Id); + ServiceContext.MediaService.Save(m1); + } + + var service = ServiceContext.MediaService; + + long total; + // children in root including the folder - not the descendants in the folder + var entities = service.GetPagedChildren(-1, 0, 6, out total).ToArray(); + Assert.That(entities.Length, Is.EqualTo(6)); + Assert.That(total, Is.EqualTo(10)); + entities = service.GetPagedChildren(-1, 1, 6, out total).ToArray(); + Assert.That(entities.Length, Is.EqualTo(4)); + Assert.That(total, Is.EqualTo(10)); + + // children in folder + entities = service.GetPagedChildren(mediaFolder.Id, 0, 6, out total).ToArray(); + Assert.That(entities.Length, Is.EqualTo(6)); + Assert.That(total, Is.EqualTo(10)); + entities = service.GetPagedChildren(mediaFolder.Id, 1, 6, out total).ToArray(); + Assert.That(entities.Length, Is.EqualTo(4)); + Assert.That(total, Is.EqualTo(10)); + } + private Tuple CreateTrashedTestMedia() { //Create and Save folder-Media -> 1050