Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/MultiNodeTreePickerTests.cs
Kenn Jacobsen cc082e191c Clean up datatype configurations for V14 (#15718)
* Clean up datatype configurations for V14

* Fix merge

* Remove ParameterEditorCollection + revert accidental changes to core project file
2024-02-15 12:36:23 +01:00

214 lines
7.0 KiB
C#

using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.Editors;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.Serialization;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Strings;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors;
[TestFixture]
public class MultiNodeTreePickerTests
{
[Test]
public void Can_Handle_Invalid_Values_From_Editor()
{
// annoyingly we can't use decimals etc. in attributes, so we can't turn these into test cases :(
var invalidValues = new List<object?>
{
123m,
123,
-123,
123.45d,
"123.45",
"1.234,56",
"1.2.3.4",
"something",
true,
new object(),
Guid.NewGuid(),
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid())
};
foreach (var value in invalidValues)
{
var fromEditor = FromEditor(value);
Assert.IsNull(fromEditor, message: $"Failed for: {value}");
}
}
[Test]
public void Can_Handle_Invalid_Values_To_Editor()
{
// annoyingly we can't use decimals etc. in attributes, so we can't turn these into test cases :(
var invalidValues = new List<object?>
{
123m,
123,
-123,
123.45d,
true,
new object(),
Guid.NewGuid(),
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid())
};
foreach (var value in invalidValues)
{
var toEditor = ToEditor(value);
Assert.IsNull(toEditor, message: $"Failed for: {value}");
}
}
[Test]
public void Can_Parse_Single_Value_From_Editor()
{
var value = new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString();
var fromEditor = FromEditor(new[] { value }) as string;
Assert.AreEqual(value, fromEditor);
}
[Test]
public void Can_Parse_Multi_Value_From_Editor()
{
var values = new[]
{
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString()
};
var fromEditor = FromEditor(values) as string;
Assert.AreEqual(string.Join(",", values), fromEditor);
}
[Test]
public void Can_Parse_Different_Entity_Types_From_Editor()
{
var values = new[]
{
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Media, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Member, Guid.NewGuid()).ToString()
};
var fromEditor = FromEditor(values) as string;
Assert.AreEqual(string.Join(",", values), fromEditor);
}
[Test]
public void Can_Skip_Invalid_Values_From_Editor()
{
var values = new[]
{
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
"Invalid Value",
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString()
};
var fromEditor = FromEditor(values) as string;
Assert.AreEqual(string.Join(",", values.First(), values.Last()), fromEditor);
}
[Test]
public void Can_Parse_Single_Value_To_Editor()
{
var value = new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString();
var toEditor = ToEditor(value) as IEnumerable<string>;
Assert.IsNotNull(toEditor);
Assert.AreEqual(1, toEditor.Count());
Assert.AreEqual(value, toEditor.First());
}
[Test]
public void Can_Parse_Multi_Value_To_Editor()
{
var values = new[]
{
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString()
};
var toEditor = ToEditor(string.Join(",", values)) as IEnumerable<string>;
Assert.IsNotNull(toEditor);
Assert.AreEqual(3, toEditor.Count());
Assert.AreEqual(values[0], toEditor.First());
Assert.AreEqual(values[1], toEditor.Skip(1).First());
Assert.AreEqual(values[2], toEditor.Last());
}
[Test]
public void Can_Parse_Different_Entity_Types_To_Editor()
{
var values = new[]
{
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Media, Guid.NewGuid()).ToString(),
new GuidUdi(Constants.UdiEntityType.Member, Guid.NewGuid()).ToString()
};
var toEditor = ToEditor(string.Join(",", values)) as IEnumerable<string>;
Assert.IsNotNull(toEditor);
Assert.AreEqual(3, toEditor.Count());
Assert.AreEqual(values[0], toEditor.First());
Assert.AreEqual(values[1], toEditor.Skip(1).First());
Assert.AreEqual(values[2], toEditor.Last());
}
[Test]
public void Can_Skip_Invalid_Values_To_Editor()
{
var values = new[]
{
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString(),
"Invalid Value",
new GuidUdi(Constants.UdiEntityType.Document, Guid.NewGuid()).ToString()
};
var toEditor = ToEditor(string.Join(",", values)) as IEnumerable<string>;
Assert.IsNotNull(toEditor);
Assert.AreEqual(2, toEditor.Count());
Assert.AreEqual(values[0], toEditor.First());
Assert.AreEqual(values[2], toEditor.Last());
}
[Test]
public void Null_From_Editor_Yields_Null()
{
var result = FromEditor(null);
Assert.IsNull(result);
}
[Test]
public void Null_To_Editor_Yields_Null()
{
var result = ToEditor(null) as IEnumerable<string>;
Assert.IsNull(result);
}
private static object? FromEditor(object? value, int max = 0)
=> CreateValueEditor().FromEditor(new ContentPropertyData(value, new MultipleTextStringConfiguration { Max = max }), null);
private static object? ToEditor(object? value)
{
var property = new Mock<IProperty>();
property
.Setup(p => p.GetValue(It.IsAny<string?>(), It.IsAny<string?>(), It.IsAny<bool>()))
.Returns(value);
return CreateValueEditor().ToEditor(property.Object);
}
private static MultiNodeTreePickerPropertyEditor.MultiNodeTreePickerPropertyValueEditor CreateValueEditor()
{
var valueEditor = new MultiNodeTreePickerPropertyEditor.MultiNodeTreePickerPropertyValueEditor(
Mock.Of<IShortStringHelper>(),
Mock.Of<IJsonSerializer>(),
Mock.Of<IIOHelper>(),
new DataEditorAttribute("alias"));
return valueEditor;
}
}