Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/ManifestContentAppTests.cs
Bjarke Berg 0f1c2f7022 Ensure no management api for v12 (#14197)
* Remove management api

* Remove actual files
2023-05-04 13:32:41 +02:00

88 lines
3.8 KiB
C#

// Copyright (c) Umbraco.
// See LICENSE for more details.
using System.Linq;
using Moq;
using Newtonsoft.Json;
using NUnit.Framework;
using Umbraco.Cms.Core.Manifest;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.Membership;
using Umbraco.Cms.Tests.UnitTests.TestHelpers;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Manifest;
[TestFixture]
public class ManifestContentAppTests
{
[Test]
public void Test()
{
var contentType = Mock.Of<IContentType>();
Mock.Get(contentType).Setup(x => x.Alias).Returns("type1");
var content = Mock.Of<IContent>();
Mock.Get(content).Setup(x => x.ContentType).Returns(new SimpleContentType(contentType));
var group1 = Mock.Of<IReadOnlyUserGroup>();
Mock.Get(group1).Setup(x => x.Alias).Returns("group1");
var group2 = Mock.Of<IReadOnlyUserGroup>();
Mock.Get(group2).Setup(x => x.Alias).Returns("group2");
// no rule = ok
AssertDefinition(content, true, Array.Empty<string>(), new[] { group1, group2 });
// wildcards = ok
AssertDefinition(content, true, new[] { "+content/*" }, new[] { group1, group2 });
AssertDefinition(content, false, new[] { "+media/*" }, new[] { group1, group2 });
// explicitly enabling / disabling
AssertDefinition(content, true, new[] { "+content/type1" }, new[] { group1, group2 });
AssertDefinition(content, false, new[] { "-content/type1" }, new[] { group1, group2 });
// when there are type rules, failing to approve the type = no app
AssertDefinition(content, false, new[] { "+content/type2" }, new[] { group1, group2 });
AssertDefinition(content, false, new[] { "+media/type1" }, new[] { group1, group2 });
// can have multiple rule, first one that matches = end
AssertDefinition(content, false, new[] { "-content/type1", "+content/*" }, new[] { group1, group2 });
AssertDefinition(content, true, new[] { "-content/type2", "+content/*" }, new[] { group1, group2 });
AssertDefinition(content, true, new[] { "+content/*", "-content/type1" }, new[] { group1, group2 });
// when there are role rules, failing to approve a role = no app
AssertDefinition(content, false, new[] { "+role/group33" }, new[] { group1, group2 });
// wildcards = ok
AssertDefinition(content, true, new[] { "+role/*" }, new[] { group1, group2 });
// explicitly enabling / disabling
AssertDefinition(content, true, new[] { "+role/group1" }, new[] { group1, group2 });
AssertDefinition(content, false, new[] { "-role/group1" }, new[] { group1, group2 });
// can have multiple rule, first one that matches = end
AssertDefinition(content, true, new[] { "+role/group1", "-role/group2" }, new[] { group1, group2 });
// mixed type and role rules, both are evaluated and need to match
AssertDefinition(content, true, new[] { "+role/group1", "+content/type1" }, new[] { group1, group2 });
AssertDefinition(content, false, new[] { "+role/group1", "+content/type2" }, new[] { group1, group2 });
AssertDefinition(content, false, new[] { "+role/group33", "+content/type1" }, new[] { group1, group2 });
}
private void AssertDefinition(object source, bool expected, string[] show, IReadOnlyUserGroup[] groups)
{
var definition = JsonConvert.DeserializeObject<ManifestContentAppDefinition>("{" +
(show.Length == 0
? string.Empty
: " \"show\": [" + string.Join(",", show.Select(x => "\"" + x + "\"")) + "] ") + "}");
var factory = new ManifestContentAppFactory(definition, TestHelper.IOHelper);
var app = factory.GetContentAppFor(source, groups);
if (expected)
{
Assert.IsNotNull(app);
}
else
{
Assert.IsNull(app);
}
}
}