using Elsa.Expressions.Helpers;
namespace Elsa.Common.IntegrationTests.Serialization;
///
/// Tests for ObjectFormatter.Format() to ensure proper serialization of different types:
/// - Strings are preserved as-is
/// - Byte arrays are base64-encoded
/// - Arrays and collections serialize to JSON instead of "T[] Array"
/// Related to GitHub issue #7019.
///
public class ObjectFormatterTests
{
[Fact(DisplayName = "String is preserved as-is")]
public void StringIsPreservedAsIs()
{
var testString = "Hello World";
var result = testString.Format();
Assert.Equal("Hello World", result);
}
[Fact(DisplayName = "Byte array is serialized as base64 string")]
public void ByteArrayIsSerializedAsBase64String()
{
var testByteArray = new byte[] { 0x01, 0x02, 0x03, 0x04, 0xFF };
var result = testByteArray.Format();
// Byte arrays are base64-encoded for serialization
Assert.NotNull(result);
var expectedBase64 = Convert.ToBase64String(testByteArray);
Assert.Equal(expectedBase64, result);
}
[Fact(DisplayName = "Integer array is serialized as JSON array")]
public void IntegerArrayIsSerializedAsJsonArray()
{
var testArray = new[] { 1, 2, 3, 4, 5 };
var result = testArray.Format();
Assert.Equal("[1,2,3,4,5]", result);
}
[Fact(DisplayName = "String array is serialized as JSON array")]
public void StringArrayIsSerializedAsJsonArray()
{
var testArray = new[] { "Hello", "World" };
var result = testArray.Format();
Assert.Equal("[\"Hello\",\"World\"]", result);
}
[Fact(DisplayName = "String array with multiple elements is serialized as JSON array")]
public void StringArrayWithMultipleElementsIsSerializedAsJsonArray()
{
var testArray = new[] { "Element 1", "Element 2", "Element 3" };
var result = testArray.Format();
Assert.Equal("[\"Element 1\",\"Element 2\",\"Element 3\"]", result);
}
[Fact(DisplayName = "Custom class array is serialized as JSON array")]
public void CustomClassArrayIsSerializedAsJsonArray()
{
var testArray = new[] { new TestClass { Name = "Item1" }, new TestClass { Name = "Item2" } };
var result = testArray.Format();
// Should be JSON, not "TestClass[] Array"
Assert.NotNull(result);
Assert.StartsWith("[", result);
Assert.Contains("Item1", result);
Assert.Contains("Item2", result);
}
[Fact(DisplayName = "List of integers is serialized as JSON array")]
public void ListOfIntegersIsSerializedAsJsonArray()
{
var testList = new List { 1, 2, 3 };
var result = testList.Format();
Assert.Equal("[1,2,3]", result);
}
[Fact(DisplayName = "List with different values is serialized as JSON array")]
public void ListWithDifferentValuesIsSerializedAsJsonArray()
{
var testList = new List { 10, 20, 30 };
var result = testList.Format();
Assert.Equal("[10,20,30]", result);
}
[Fact(DisplayName = "Null returns null")]
public void NullReturnsNull()
{
object? testValue = null;
var result = testValue.Format();
Assert.Null(result);
}
private class TestClass
{
public string Name { get; set; } = string.Empty;
}
}