Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

OrderCustomValuesTests.cs

using FluentAssertions;
using Nop.Services.Orders;
using NUnit.Framework;

namespace Nop.Tests.Nop.Services.Tests.Orders;

[TestFixture]
public class OrderCustomValuesTests
{
    [Test]
    public void CanDeserializeEmptyString()
    {
        var deserialized = new CustomValues();
        deserialized.FillByXml(string.Empty);

        deserialized.Should().NotBeNull();
        deserialized.Any().Should().Be(false);
    }

    [Test]
    public void CanSerializeAndDeserializeEmptyCustomValues()
    {
        var customValues = new CustomValues();
        var serializedXml = customValues.SerializeToXml();
        var deserialized = new CustomValues();
        deserialized.FillByXml(serializedXml);

        deserialized.Should().NotBeNull();
        deserialized.Any().Should().Be(false);
    }

    [Test]
    public void CanSerializeAndDeserializeCustomValues()
    {
        var customValues = new CustomValues
        {
            new("key1", "value1", CustomValueDisplayLocation.Shipping), 
            new("key2", null, displayToCustomer:false), 
            new("key3", "3"),
            new("", "")
        };

        var serializedXml = customValues.SerializeToXml();

        var deserialized = new CustomValues();
        deserialized.FillByXml(serializedXml);

        deserialized.Should().NotBeNull();
        deserialized.Count.Should().Be(4);

        var customValue = deserialized["key1"];
        customValue.Should().NotBeNullOrEmpty();
        customValue.Should().Be("value1");
        deserialized.TryGetValue("key1", out var customValueObj);
        customValueObj.DisplayToCustomer.Should().Be(true);
        customValueObj.DisplayLocation.Should().Be(CustomValueDisplayLocation.Shipping);

        customValue = deserialized["key2"];
        customValue.Should().NotBeNull();
        customValue.Should().Be(string.Empty);
        deserialized.TryGetValue("key2", out customValueObj);
        customValueObj.DisplayToCustomer.Should().Be(false);
        customValueObj.DisplayLocation.Should().Be(CustomValueDisplayLocation.Payment);

        customValue = deserialized["key3"];
        customValue.Should().NotBeNullOrEmpty();
        customValue.Should().Be("3");
        deserialized.TryGetValue("key3", out customValueObj);
        customValueObj.DisplayToCustomer.Should().Be(true);
        customValueObj.DisplayLocation.Should().Be(CustomValueDisplayLocation.Payment);


        customValue = deserialized[""];
        customValue.Should().NotBeNullOrEmpty();
        customValue.Should().Be("");

        serializedXml = "test_1test 1test_2test 2test_3test 3test_4test 4";
        deserialized.FillByXml(serializedXml);
        deserialized.Count.Should().Be(4);

        foreach (var orderCustomValue in deserialized) 
            orderCustomValue.Name.StartsWith("test_").Should().BeTrue();

        var newXml = deserialized.SerializeToXml();
        newXml.Should().NotBeEquivalentTo(serializedXml);
        newXml.Should().BeEquivalentTo("test_1test 1true20test_2test 2true20test_3test 3true20test_4test 4true20");
    }
}