Files
Umbraco-CMS/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/EntityServiceTests.cs
Emma L Garland ac575662ac Resolved more warnings, and marked more warning types as errors (#16991)
* Fix warnings SA1111, SA1028, SA1500, IDE1270  in Umbraco.Web.Website, and updated rules.

* Remove warnings: IDE0270: Null check can be simplified

* More SqlServer project warnings resolved

* CS0105 namespace appeared already

* Suppress warning until implementation:

#pragma warning disable CS0162 // Unreachable code detected
#pragma warning disable CS0618 // Type or member is obsolete

CS0162 remove unreachable code
SA1028 remove trailing whitespace
SA1106 no empty statements
CS1570 malformed XML
CS1572 corrected xml parameter
CS1573 param tag added
IDE0007 var not explicit
IDE0008 explicit not var
IDE0057 simplify substring
IDE0074 compound assignment
CA1825 array.empty

Down to 3479 warnings

* - SA1116, SA117 params on same line
- IDE0057 substring simplified

Specific warnings for Umbraco.Tests.Benchmarks

* Fixed IDE0074 compound assignment and added specific warnings for Umbraco.Tests.Common

* Specific warnings for Umbraco.Tests.Integration and Umbraco.Tests.Common

Fixed:

- SA1111, SA1116, SA117 params and line formatting (not all as there are many)
- SA1122 string.Empty
- IDE0057 simplify substring
- IDE0044,IDE0044 make field readonly
- IDE1006 naming rule violation (add _)
- SA1111 closing parenthesis on line of last parameter
- SA1649 filename match type name
- SA1312,SA1306 lowercase variable and field names

* Fixed various warnings where they are more straight-forward, including:

- SA1649 file name match type name
- SA111 parenthesis on line of last parameter
- IDE0028 simplify collection initializer
- SA1306 lower-case letter field
- IDE044 readonly field
- SA1122 string.Empty
- SA1116 params same line
- IDE1006 upper casing
- IDE0041 simplify null check

Updated the following projects to only list their remaining specific warning codes:

- Umbraco.Tests.UnitTests

Typo in `Umbraco.Web.Website` project

* Reverted test change

* Now 1556 warnings.

Fixed various warnings where they are more straight-forward, including:

- SA1111/SA1116/SA1119 parenthesis
- SA1117 params
- SA1312 lowercase variable
- SA1121 built-in type
- SA1500/SA1513/SA1503 formatting braces
- SA1400 declare access modifier
- SA1122 string.Empty
- SA1310 no underscore
- IDE0049 name simplified
- IDE0057 simplify substring
- IDE0074 compound assignment
- IDE0032 use auto-property
- IDE0037 simplify member name
- IDE0008 explicit type not var
- IDE0016/IDE0270/IDE0041 simplify null checks
- IDE0048/SA1407 clarity in arithmetic
- IDE1006 correct param names
- IDE0042 deconstruct variable
- IDE0044 readonly
- IDE0018 inline variable declarations
- IDE0074/IDE0054 compound assignment
- IDE1006 naming
- CS1573 param XML
- CS0168 unused variable

Comment formatting in project files for consistency.

Updated all projects to only list remaining specific warning codes as warnings instead of errors (errors is now default).

* Type not var, and more warning exceptions

* Tweaked merge issue, readded comment about rollback

* Readded comment re rollback.

* Readded comments

* Comment tweak

* Comment tweak
2024-09-24 12:56:28 +01:00

948 lines
33 KiB
C#

// Copyright (c) Umbraco.
// See LICENSE for more details.
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.Entities;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Persistence;
using Umbraco.Cms.Tests.Common.Attributes;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Testing;
using Umbraco.Cms.Tests.Integration.Testing;
using Umbraco.Extensions;
namespace Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Services;
/// <summary>
/// Tests covering the EntityService
/// </summary>
[TestFixture]
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)]
public class EntityServiceTests : UmbracoIntegrationTest
{
[SetUp]
public async Task SetupTestData()
{
if (_langFr == null && _langEs == null)
{
_langFr = new Language("fr-FR", "French (France)");
_langEs = new Language("es-ES", "Spanish (Spain)");
await LanguageService.CreateAsync(_langFr, Constants.Security.SuperUserKey);
await LanguageService.CreateAsync(_langEs, Constants.Security.SuperUserKey);
}
CreateTestData();
}
private Language? _langFr;
private Language? _langEs;
private ILanguageService LanguageService => GetRequiredService<ILanguageService>();
private IContentTypeService ContentTypeService => GetRequiredService<IContentTypeService>();
private IContentService ContentService => GetRequiredService<IContentService>();
private IEntityService EntityService => GetRequiredService<IEntityService>();
private ISqlContext SqlContext => GetRequiredService<ISqlContext>();
private IMediaTypeService MediaTypeService => GetRequiredService<IMediaTypeService>();
private IMediaService MediaService => GetRequiredService<IMediaService>();
private IFileService FileService => GetRequiredService<IFileService>();
[Test]
public void EntityService_Can_Get_Paged_Descendants_Ordering_Path()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
var rootId = root.Id;
var ids = new List<int>();
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
ContentService.Save(c1);
ids.Add(c1.Id);
root = c1; // make a hierarchy
}
var entities = EntityService.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 0, 6, out var total)
.ToArray();
Assert.That(entities.Length, Is.EqualTo(6));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[0], entities[0].Id);
entities = EntityService.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 1, 6, out total).ToArray();
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[6], entities[0].Id);
// Test ordering direction
entities = EntityService.GetPagedDescendants(
rootId,
UmbracoObjectTypes.Document,
0,
6,
out total,
ordering: Ordering.By("Path", Direction.Descending)).ToArray();
Assert.That(entities.Length, Is.EqualTo(6));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[^1], entities[0].Id);
entities = EntityService.GetPagedDescendants(
rootId,
UmbracoObjectTypes.Document,
1,
6,
out total,
ordering: Ordering.By("Path", Direction.Descending)).ToArray();
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[ids.Count - 1 - 6], entities[0].Id);
}
[Test]
public void EntityService_Can_Get_Paged_Content_Children()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
var ids = new List<int>();
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
ContentService.Save(c1);
ids.Add(c1.Id);
}
var entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out var total)
.ToArray();
Assert.That(entities.Length, Is.EqualTo(6));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[0], entities[0].Id);
entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 1, 6, out total).ToArray();
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[6], entities[0].Id);
// Test ordering direction
entities = EntityService.GetPagedChildren(
root.Id,
UmbracoObjectTypes.Document,
0,
6,
out total,
ordering: Ordering.By("SortOrder", Direction.Descending)).ToArray();
Assert.That(entities.Length, Is.EqualTo(6));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[^1], entities[0].Id);
entities = EntityService.GetPagedChildren(
root.Id,
UmbracoObjectTypes.Document,
1,
6,
out total,
ordering: Ordering.By("SortOrder", Direction.Descending)).ToArray();
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(total, Is.EqualTo(10));
Assert.AreEqual(ids[ids.Count - 1 - 6], entities[0].Id);
}
[Test]
public void EntityService_Can_Get_Paged_Content_Descendants()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
var count = 0;
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
ContentService.Save(c1);
count++;
for (var j = 0; j < 5; j++)
{
var c2 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1);
ContentService.Save(c2);
count++;
}
}
var entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 31, out var total)
.ToArray();
Assert.That(entities.Length, Is.EqualTo(31));
Assert.That(total, Is.EqualTo(60));
entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 1, 31, out total).ToArray();
Assert.That(entities.Length, Is.EqualTo(29));
Assert.That(total, Is.EqualTo(60));
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Content_Descendants_Including_Recycled()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
var toDelete = new List<IContent>();
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
ContentService.Save(c1);
if (i % 2 == 0)
{
toDelete.Add(c1);
}
for (var j = 0; j < 5; j++)
{
var c2 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1);
ContentService.Save(c2);
}
}
foreach (var content in toDelete)
{
ContentService.MoveToRecycleBin(content);
}
// search at root to see if it returns recycled
var entities = EntityService.GetPagedDescendants(-1, UmbracoObjectTypes.Document, 0, 1000, out var total)
.Select(x => x.Id)
.ToArray();
foreach (var c in toDelete)
{
Assert.True(entities.Contains(c.Id));
}
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Content_Descendants_Without_Recycled()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
var toDelete = new List<IContent>();
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
ContentService.Save(c1);
if (i % 2 == 0)
{
toDelete.Add(c1);
}
for (var j = 0; j < 5; j++)
{
var c2 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1);
ContentService.Save(c2);
}
}
foreach (var content in toDelete)
{
ContentService.MoveToRecycleBin(content);
}
// search at root to see if it returns recycled
var entities = EntityService
.GetPagedDescendants(UmbracoObjectTypes.Document, 0, 1000, out var total, includeTrashed: false)
.Select(x => x.Id)
.ToArray();
foreach (var c in toDelete)
{
Assert.IsFalse(entities.Contains(c.Id));
}
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Trashed_Content_Children()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
var toDelete = new List<IContent>();
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
ContentService.Save(c1);
if (i % 2 == 0)
{
toDelete.Add(c1);
}
for (var j = 0; j < 5; j++)
{
var c2 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1);
ContentService.Save(c2);
}
}
foreach (var content in toDelete)
{
ContentService.MoveToRecycleBin(content);
}
// get paged entities at recycle bin root
var entities = EntityService
.GetPagedTrashedChildren(Constants.System.RecycleBinContent, UmbracoObjectTypes.Document, 0, 1000, out var total)
.Select(x => x.Id)
.ToArray();
Assert.True(total > 0);
foreach (var c in toDelete)
{
Assert.IsTrue(entities.Contains(c.Id));
}
}
[Test]
public void EntityService_Can_Get_Paged_Content_Descendants_With_Search()
{
var contentType = ContentTypeService.Get("umbTextpage");
var root = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(root);
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, "ssss" + Guid.NewGuid(), root);
ContentService.Save(c1);
for (var j = 0; j < 5; j++)
{
var c2 = ContentBuilder.CreateSimpleContent(contentType, "tttt" + Guid.NewGuid(), c1);
ContentService.Save(c2);
}
}
var entities = EntityService.GetPagedDescendants(
root.Id,
UmbracoObjectTypes.Document,
0,
10,
out var total,
SqlContext.Query<IUmbracoEntity>().Where(x => x.Name.Contains("ssss"))).ToArray();
Assert.That(entities.Length, Is.EqualTo(10));
Assert.That(total, Is.EqualTo(10));
entities = EntityService.GetPagedDescendants(
root.Id,
UmbracoObjectTypes.Document,
0,
50,
out total,
SqlContext.Query<IUmbracoEntity>().Where(x => x.Name.Contains("tttt"))).ToArray();
Assert.That(entities.Length, Is.EqualTo(50));
Assert.That(total, Is.EqualTo(50));
}
[Test]
public void EntityService_Can_Get_Paged_Media_Children()
{
var folderType = MediaTypeService.Get(1031);
var imageMediaType = MediaTypeService.Get(1032);
var root = MediaBuilder.CreateMediaFolder(folderType, -1);
MediaService.Save(root);
for (var i = 0; i < 10; i++)
{
var c1 = MediaBuilder.CreateMediaImage(imageMediaType, root.Id);
MediaService.Save(c1);
}
var entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 0, 6, out var total).ToArray();
Assert.That(entities.Length, Is.EqualTo(6));
Assert.That(total, Is.EqualTo(10));
entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 1, 6, out total).ToArray();
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(total, Is.EqualTo(10));
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Media_Descendants()
{
var folderType = MediaTypeService.Get(1031);
var imageMediaType = MediaTypeService.Get(1032);
var root = MediaBuilder.CreateMediaFolder(folderType, -1);
MediaService.Save(root);
var count = 0;
for (var i = 0; i < 10; i++)
{
var c1 = MediaBuilder.CreateMediaImage(imageMediaType, root.Id);
MediaService.Save(c1);
count++;
for (var j = 0; j < 5; j++)
{
var c2 = MediaBuilder.CreateMediaImage(imageMediaType, c1.Id);
MediaService.Save(c2);
count++;
}
}
var entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 31, out var total)
.ToArray();
Assert.That(entities.Length, Is.EqualTo(31));
Assert.That(total, Is.EqualTo(60));
entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 1, 31, out total).ToArray();
Assert.That(entities.Length, Is.EqualTo(29));
Assert.That(total, Is.EqualTo(60));
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Media_Descendants_Including_Recycled()
{
var folderType = MediaTypeService.Get(1031);
var imageMediaType = MediaTypeService.Get(1032);
var root = MediaBuilder.CreateMediaFolder(folderType, -1);
MediaService.Save(root);
var toDelete = new List<IMedia>();
for (var i = 0; i < 10; i++)
{
var c1 = MediaBuilder.CreateMediaImage(imageMediaType, root.Id);
MediaService.Save(c1);
if (i % 2 == 0)
{
toDelete.Add(c1);
}
for (var j = 0; j < 5; j++)
{
var c2 = MediaBuilder.CreateMediaImage(imageMediaType, c1.Id);
MediaService.Save(c2);
}
}
foreach (var content in toDelete)
{
MediaService.MoveToRecycleBin(content);
}
// search at root to see if it returns recycled
var entities = EntityService.GetPagedDescendants(-1, UmbracoObjectTypes.Media, 0, 1000, out var total)
.Select(x => x.Id)
.ToArray();
foreach (var media in toDelete)
{
Assert.IsTrue(entities.Contains(media.Id));
}
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Media_Descendants_Without_Recycled()
{
var folderType = MediaTypeService.Get(1031);
var imageMediaType = MediaTypeService.Get(1032);
var root = MediaBuilder.CreateMediaFolder(folderType, -1);
MediaService.Save(root);
var toDelete = new List<IMedia>();
for (var i = 0; i < 10; i++)
{
var c1 = MediaBuilder.CreateMediaImage(imageMediaType, root.Id);
MediaService.Save(c1);
if (i % 2 == 0)
{
toDelete.Add(c1);
}
for (var j = 0; j < 5; j++)
{
var c2 = MediaBuilder.CreateMediaImage(imageMediaType, c1.Id);
MediaService.Save(c2);
}
}
foreach (var content in toDelete)
{
MediaService.MoveToRecycleBin(content);
}
// search at root to see if it returns recycled
var entities = EntityService
.GetPagedDescendants(UmbracoObjectTypes.Media, 0, 1000, out var total, includeTrashed: false)
.Select(x => x.Id)
.ToArray();
foreach (var media in toDelete)
{
Assert.IsFalse(entities.Contains(media.Id));
}
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Trashed_Media_Children()
{
var folderType = MediaTypeService.Get(1031);
var imageMediaType = MediaTypeService.Get(1032);
var root = MediaBuilder.CreateMediaFolder(folderType, -1);
MediaService.Save(root);
var toDelete = new List<IMedia>();
for (var i = 0; i < 10; i++)
{
var c1 = MediaBuilder.CreateMediaImage(imageMediaType, root.Id);
MediaService.Save(c1);
if (i % 2 == 0)
{
toDelete.Add(c1);
}
for (var j = 0; j < 5; j++)
{
var c2 = MediaBuilder.CreateMediaImage(imageMediaType, c1.Id);
MediaService.Save(c2);
}
}
foreach (var content in toDelete)
{
MediaService.MoveToRecycleBin(content);
}
// get paged entities at recycle bin root
var entities = EntityService
.GetPagedTrashedChildren(Constants.System.RecycleBinMedia, UmbracoObjectTypes.Media, 0, 1000, out var total)
.Select(x => x.Id)
.ToArray();
Assert.True(total > 0);
foreach (var media in toDelete)
{
Assert.IsTrue(entities.Contains(media.Id));
}
}
[Test]
[LongRunning]
public void EntityService_Can_Get_Paged_Media_Descendants_With_Search()
{
var folderType = MediaTypeService.Get(1031);
var imageMediaType = MediaTypeService.Get(1032);
var root = MediaBuilder.CreateMediaFolder(folderType, -1);
MediaService.Save(root);
for (var i = 0; i < 10; i++)
{
var c1 = MediaBuilder.CreateMediaImage(imageMediaType, root.Id);
c1.Name = "ssss" + Guid.NewGuid();
MediaService.Save(c1);
for (var j = 0; j < 5; j++)
{
var c2 = MediaBuilder.CreateMediaImage(imageMediaType, c1.Id);
c2.Name = "tttt" + Guid.NewGuid();
MediaService.Save(c2);
}
}
var entities = EntityService.GetPagedDescendants(
root.Id,
UmbracoObjectTypes.Media,
0,
10,
out var total,
SqlContext.Query<IUmbracoEntity>().Where(x => x.Name.Contains("ssss"))).ToArray();
Assert.That(entities.Length, Is.EqualTo(10));
Assert.That(total, Is.EqualTo(10));
entities = EntityService.GetPagedDescendants(
root.Id,
UmbracoObjectTypes.Media,
0,
50,
out total,
SqlContext.Query<IUmbracoEntity>().Where(x => x.Name.Contains("tttt"))).ToArray();
Assert.That(entities.Length, Is.EqualTo(50));
Assert.That(total, Is.EqualTo(50));
}
[Test]
public void EntityService_Can_Find_All_Content_By_UmbracoObjectTypes()
{
var entities = EntityService.GetAll(UmbracoObjectTypes.Document).ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(entities.Any(x => x.Trashed), Is.True);
}
[Test]
public void EntityService_Can_Find_All_Content_By_UmbracoObjectType_Id()
{
var objectTypeId = Constants.ObjectTypes.Document;
var entities = EntityService.GetAll(objectTypeId).ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(entities.Any(x => x.Trashed), Is.True);
}
[Test]
public void EntityService_Can_Find_All_Content_By_Type()
{
var entities = EntityService.GetAll<IContent>().ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Length, Is.EqualTo(4));
Assert.That(entities.Any(x => x.Trashed), Is.True);
}
[Test]
public void EntityService_Can_Get_Child_Content_By_ParentId_And_UmbracoObjectType()
{
var entities = EntityService.GetChildren(-1, UmbracoObjectTypes.Document).ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Length, Is.EqualTo(1));
Assert.That(entities.Any(x => x.Trashed), Is.False);
}
[Test]
public void EntityService_Can_Get_Content_By_UmbracoObjectType_With_Variant_Names()
{
var alias = "test" + Guid.NewGuid();
var template = TemplateBuilder.CreateTextPageTemplate(alias);
FileService.SaveTemplate(template);
var contentType = ContentTypeBuilder.CreateSimpleContentType("test2", "Test2", defaultTemplateId: template.Id);
contentType.Variations = ContentVariation.Culture;
ContentTypeService.Save(contentType);
var c1 = ContentBuilder.CreateSimpleContent(contentType, "Test");
c1.SetCultureName("Test - FR", _langFr.IsoCode);
c1.SetCultureName("Test - ES", _langEs.IsoCode);
ContentService.Save(c1);
var result = EntityService.Get(c1.Id, UmbracoObjectTypes.Document);
Assert.AreEqual("Test - FR", result.Name); // got name from default culture
Assert.IsNotNull(result as IDocumentEntitySlim);
var doc = (IDocumentEntitySlim)result;
var cultureNames = doc.CultureNames;
Assert.AreEqual("Test - FR", cultureNames[_langFr.IsoCode]);
Assert.AreEqual("Test - ES", cultureNames[_langEs.IsoCode]);
}
[Test]
public void EntityService_Can_Get_Child_Content_By_ParentId_And_UmbracoObjectType_With_Variant_Names()
{
var template = TemplateBuilder.CreateTextPageTemplate();
FileService.SaveTemplate(template);
var contentType = ContentTypeBuilder.CreateSimpleContentType("test1", "Test1", defaultTemplateId: template.Id);
contentType.Variations = ContentVariation.Culture;
ContentTypeService.Save(contentType);
var root = ContentBuilder.CreateSimpleContent(contentType);
root.SetCultureName("Root", _langFr.IsoCode); // else cannot save
ContentService.Save(root);
for (var i = 0; i < 10; i++)
{
var c1 = ContentBuilder.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root);
if (i % 2 == 0)
{
c1.SetCultureName("Test " + i + " - FR", _langFr.IsoCode);
c1.SetCultureName("Test " + i + " - ES", _langEs.IsoCode);
}
else
{
c1.SetCultureName("Test", _langFr.IsoCode); // else cannot save
}
ContentService.Save(c1);
}
var entities = EntityService.GetChildren(root.Id, UmbracoObjectTypes.Document).ToArray();
Assert.AreEqual(10, entities.Length);
for (var i = 0; i < entities.Length; i++)
{
if (i % 2 == 0)
{
var doc = (IDocumentEntitySlim)entities[i];
var keys = doc.CultureNames.Keys.ToList();
var vals = doc.CultureNames.Values.ToList();
Assert.AreEqual(_langFr.IsoCode.ToLowerInvariant(), keys[0].ToLowerInvariant());
Assert.AreEqual("Test " + i + " - FR", vals[0]);
Assert.AreEqual(_langEs.IsoCode.ToLowerInvariant(), keys[1].ToLowerInvariant());
Assert.AreEqual("Test " + i + " - ES", vals[1]);
}
}
}
[Test]
public void EntityService_Can_Get_Children_By_ParentId()
{
var entities = EntityService.GetChildren(_folderId);
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Count(), Is.EqualTo(3));
Assert.That(entities.Any(x => x.Trashed), Is.False);
}
[Test]
public void EntityService_Can_Get_Descendants_By_ParentId()
{
var entities = EntityService.GetDescendants(_folderId);
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Count(), Is.EqualTo(4));
Assert.That(entities.Any(x => x.Trashed), Is.False);
}
[Test]
public void EntityService_Throws_When_Getting_All_With_Invalid_Type()
{
var objectTypeId = Constants.ObjectTypes.ContentItem;
Assert.Throws<NotSupportedException>(() => EntityService.GetAll<IContentBase>());
Assert.Throws<NotSupportedException>(() => EntityService.GetAll(objectTypeId));
}
[Test]
public void EntityService_Can_Find_All_ContentTypes_By_UmbracoObjectTypes()
{
var entities = EntityService.GetAll(UmbracoObjectTypes.DocumentType).ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Count(), Is.EqualTo(1));
}
[Test]
public void EntityService_Can_Find_All_ContentTypes_By_UmbracoObjectType_Id()
{
var objectTypeId = Constants.ObjectTypes.DocumentType;
var entities = EntityService.GetAll(objectTypeId).ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Count(), Is.EqualTo(1));
}
[Test]
public void EntityService_Can_Find_All_ContentTypes_By_Type()
{
var entities = EntityService.GetAll<IContentType>().ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Count(), Is.EqualTo(1));
}
[Test]
public void EntityService_Can_Find_All_Media_By_UmbracoObjectTypes()
{
var entities = EntityService.GetAll(UmbracoObjectTypes.Media).ToArray();
Assert.That(entities.Any(), Is.True);
Assert.That(entities.Length, Is.EqualTo(5));
foreach (var entity in entities)
{
Assert.IsTrue(entity.GetType().Implements<IMediaEntitySlim>());
Console.WriteLine(((IMediaEntitySlim)entity).MediaPath);
Assert.IsNotEmpty(((IMediaEntitySlim)entity).MediaPath);
}
}
[Test]
public void EntityService_Can_Get_ObjectType()
{
var mediaObjectType = EntityService.GetObjectType(1031);
Assert.NotNull(mediaObjectType);
Assert.AreEqual(mediaObjectType, UmbracoObjectTypes.MediaType);
}
[Test]
public void EntityService_Can_Get_Key_For_Id_With_Unknown_Type()
{
var result = EntityService.GetKey(_contentType.Id, UmbracoObjectTypes.Unknown);
Assert.IsTrue(result.Success);
Assert.AreEqual(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), result.Result);
}
[Test]
public void EntityService_Can_Get_Key_For_Id()
{
var result = EntityService.GetKey(_contentType.Id, UmbracoObjectTypes.DocumentType);
Assert.IsTrue(result.Success);
Assert.AreEqual(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), result.Result);
}
[Test]
public void EntityService_Cannot_Get_Key_For_Id_With_Incorrect_Object_Type()
{
var result1 = EntityService.GetKey(_contentType.Id, UmbracoObjectTypes.DocumentType);
var result2 = EntityService.GetKey(_contentType.Id, UmbracoObjectTypes.MediaType);
Assert.IsTrue(result1.Success);
Assert.IsFalse(result2.Success);
}
[Test]
public void EntityService_Can_Get_Id_For_Key_With_Unknown_Type()
{
var result =
EntityService.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.Unknown);
Assert.IsTrue(result.Success);
Assert.AreEqual(_contentType.Id, result.Result);
}
[Test]
public void EntityService_Can_Get_Id_For_Key()
{
var result = EntityService.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"),
UmbracoObjectTypes.DocumentType);
Assert.IsTrue(result.Success);
Assert.AreEqual(_contentType.Id, result.Result);
}
[Test]
public void EntityService_Cannot_Get_Id_For_Key_With_Incorrect_Object_Type()
{
var result1 = EntityService.GetId(
Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"),
UmbracoObjectTypes.DocumentType);
var result2 = EntityService.GetId(
Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"),
UmbracoObjectTypes.MediaType);
Assert.IsTrue(result1.Success);
Assert.IsFalse(result2.Success);
}
[Test]
public void ReserveId()
{
var guid = Guid.NewGuid();
// can reserve
var reservedId = EntityService.ReserveId(guid);
Assert.IsTrue(reservedId > 0);
// can get it back
var id = EntityService.GetId(guid, UmbracoObjectTypes.DocumentType);
Assert.IsTrue(id.Success);
Assert.AreEqual(reservedId, id.Result);
// anything goes
id = EntityService.GetId(guid, UmbracoObjectTypes.Media);
Assert.IsTrue(id.Success);
Assert.AreEqual(reservedId, id.Result);
// a random guid won't work
Assert.IsFalse(EntityService.GetId(Guid.NewGuid(), UmbracoObjectTypes.DocumentType).Success);
}
private static bool _isSetup;
private int _folderId;
private ContentType _contentType;
private Content _textpage;
private Content _subpage;
private Content _subpage2;
private Content _trashed;
private IMediaType _folderMediaType;
private Media _folder;
private IMediaType _imageMediaType;
private Media _image;
private Media _subfolder;
private Media _subfolder2;
public void CreateTestData()
{
if (_isSetup == false)
{
_isSetup = true;
var template = TemplateBuilder.CreateTextPageTemplate("defaultTemplate");
FileService.SaveTemplate(template); // else, FK violation on contentType!
// Create and Save ContentType "umbTextpage" -> _contentType.Id
_contentType =
ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id);
_contentType.Key = new Guid("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522");
ContentTypeService.Save(_contentType);
// Create and Save Content "Homepage" based on "umbTextpage" -> 1053
_textpage = ContentBuilder.CreateSimpleContent(_contentType);
_textpage.Key = new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0");
ContentService.Save(_textpage, -1);
// Create and Save Content "Text Page 1" based on "umbTextpage" -> 1054
_subpage = ContentBuilder.CreateSimpleContent(_contentType, "Text Page 1", _textpage.Id);
var contentSchedule = ContentScheduleCollection.CreateWithEntry(DateTime.Now.AddMinutes(-5), null);
ContentService.Save(_subpage, -1, contentSchedule);
// Create and Save Content "Text Page 2" based on "umbTextpage" -> 1055
_subpage2 = ContentBuilder.CreateSimpleContent(_contentType, "Text Page 2", _textpage.Id);
ContentService.Save(_subpage2, -1);
// Create and Save Content "Text Page Deleted" based on "umbTextpage" -> 1056
_trashed = ContentBuilder.CreateSimpleContent(_contentType, "Text Page Deleted", -20);
_trashed.Trashed = true;
ContentService.Save(_trashed, -1);
// Create and Save folder-Media -> 1057
_folderMediaType = MediaTypeService.Get(1031);
_folder = MediaBuilder.CreateMediaFolder(_folderMediaType, -1);
MediaService.Save(_folder, -1);
_folderId = _folder.Id;
// Create and Save image-Media -> 1058
_imageMediaType = MediaTypeService.Get(1032);
_image = MediaBuilder.CreateMediaImage(_imageMediaType, _folder.Id);
MediaService.Save(_image, -1);
// Create and Save file-Media -> 1059
var fileMediaType = MediaTypeService.Get(1033);
var file = MediaBuilder.CreateMediaFile(fileMediaType, _folder.Id);
MediaService.Save(file, -1);
// Create and save sub folder -> 1060
_subfolder = MediaBuilder.CreateMediaFolder(_folderMediaType, _folder.Id);
MediaService.Save(_subfolder, -1);
// Create and save sub folder -> 1061
_subfolder2 = MediaBuilder.CreateMediaFolder(_folderMediaType, _subfolder.Id);
MediaService.Save(_subfolder2, -1);
}
}
}