using System.Linq.Expressions; using System.Net; using NUnit.Framework; using Umbraco.Cms.Api.Management.Controllers.Document.Tree; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Tests.Common.Builders; namespace Umbraco.Cms.Tests.Integration.ManagementApi.Document.Tree; public class ChildrenDocumentTreeControllerTests : ManagementApiUserGroupTestBase { private IContentEditingService ContentEditingService => GetRequiredService(); private ITemplateService TemplateService => GetRequiredService(); private IContentTypeService ContentTypeService => GetRequiredService(); private Guid _parentKey; [SetUp] public async Task Setup() { // Template var template = TemplateBuilder.CreateTextPageTemplate(Guid.NewGuid().ToString()); await TemplateService.CreateAsync(template, Constants.Security.SuperUserKey); // Content Type var contentType = ContentTypeBuilder.CreateTextPageContentType(defaultTemplateId: template.Id, name: Guid.NewGuid().ToString(), alias: Guid.NewGuid().ToString()); contentType.AllowedAsRoot = true; contentType.AllowedContentTypes = [new ContentTypeSort(contentType.Key, 0, contentType.Alias)]; await ContentTypeService.CreateAsync(contentType, Constants.Security.SuperUserKey); // Parent Content var parentCreateModel = new ContentCreateModel { ContentTypeKey = contentType.Key, TemplateKey = template.Key, ParentKey = Constants.System.RootKey, Variants = new List { new() { Name = Guid.NewGuid().ToString() } }, }; var responseParent = await ContentEditingService.CreateAsync(parentCreateModel, Constants.Security.SuperUserKey); _parentKey = responseParent.Result.Content.Key; // Child Content var childCreateModel = new ContentCreateModel { ContentTypeKey = contentType.Key, TemplateKey = template.Key, ParentKey = _parentKey, Variants = new List { new() { Name = Guid.NewGuid().ToString() } }, }; await ContentEditingService.CreateAsync(childCreateModel, Constants.Security.SuperUserKey); } protected override Expression> MethodSelector => x => x.Children(CancellationToken.None, _parentKey, 0, 100, null); protected override UserGroupAssertionModel AdminUserGroupAssertionModel => new() { ExpectedStatusCode = HttpStatusCode.OK }; protected override UserGroupAssertionModel EditorUserGroupAssertionModel => new() { ExpectedStatusCode = HttpStatusCode.OK }; protected override UserGroupAssertionModel SensitiveDataUserGroupAssertionModel => new() { ExpectedStatusCode = HttpStatusCode.Forbidden }; protected override UserGroupAssertionModel TranslatorUserGroupAssertionModel => new() { ExpectedStatusCode = HttpStatusCode.Forbidden }; protected override UserGroupAssertionModel WriterUserGroupAssertionModel => new() { ExpectedStatusCode = HttpStatusCode.OK }; protected override UserGroupAssertionModel UnauthorizedUserGroupAssertionModel => new() { ExpectedStatusCode = HttpStatusCode.Unauthorized }; }