// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Text.Json.Serialization; using Squidex.Infrastructure.Json.System; using Squidex.Infrastructure.TestHelpers; using Xunit; namespace Squidex.Infrastructure { public class NamedIdTests { internal sealed record Wrapper { [JsonConverter(typeof(StringConverter>))] public NamedId Value { get; set; } } [Fact] public void Should_instantiate_token() { var id = Guid.NewGuid(); var namedId = NamedId.Of(id, "my-name"); Assert.Equal(id, namedId.Id); Assert.Equal("my-name", namedId.Name); } [Fact] public void Should_convert_named_id_to_string() { var id = Guid.NewGuid(); var namedId = NamedId.Of(id, "my-name"); Assert.Equal($"{id},my-name", namedId.ToString()); } [Fact] public void Should_serialize_and_deserialize_null_guid_token() { NamedId? value = null; var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_valid_guid_token() { var value = NamedId.Of(Guid.NewGuid(), "my-name"); var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_null_long_token() { NamedId? value = null; var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_valid_long_token() { var value = NamedId.Of(123L, "my-name"); var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_null_string_token() { NamedId? value = null; var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_valid_string_token() { var value = NamedId.Of(Guid.NewGuid().ToString(), "my-name"); var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_null_id_token() { NamedId? value = null; var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_valid_id_token() { var value = NamedId.Of(DomainId.NewGuid().ToString(), "my-name"); var serialized = value.SerializeAndDeserialize(); Assert.Equal(value, serialized); } [Fact] public void Should_serialize_and_deserialize_old_object() { var value = new { id = 42L, name = "my-name" }; var serialized = value.SerializeAndDeserialize, object>(); Assert.Equal(NamedId.Of(42L, "my-name"), serialized); } [Fact] public void Should_deserialize_from_old_object_with_explicit_converter() { var value = new { value = new { id = 42, name = "my-name" } }; var expected = new Wrapper { Value = NamedId.Of(42L, "my-name") }; var serialized = value.SerializeAndDeserialize(); Assert.Equal(expected, serialized); } [Fact] public void Should_throw_exception_if_string_id_is_not_valid() { Assert.ThrowsAny(() => TestUtils.Deserialize>("123")); } [Fact] public void Should_throw_exception_if_long_id_is_not_valid() { Assert.ThrowsAny(() => TestUtils.Deserialize>("invalid-long,name")); } [Fact] public void Should_throw_exception_if_guid_id_is_not_valid() { Assert.ThrowsAny(() => TestUtils.Deserialize>("invalid-guid,name")); } } }