// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Security.Claims; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using NodaTime; using NodaTime.Serialization.JsonNet; using Squidex.Infrastructure.Json; using Squidex.Infrastructure.Json.Newtonsoft; using Squidex.Infrastructure.Json.Objects; using Squidex.Infrastructure.Queries; using Squidex.Infrastructure.Queries.Json; using Squidex.Infrastructure.Reflection; namespace Squidex.Infrastructure.TestHelpers { public static class TestUtils { public static readonly IJsonSerializer DefaultSerializer = CreateSerializer(); public static IJsonSerializer CreateSerializer(TypeNameRegistry? typeNameRegistry = null) { var serializerSettings = DefaultSettings(typeNameRegistry); return new NewtonsoftJsonSerializer(serializerSettings); } public static JsonSerializerSettings DefaultSettings(TypeNameRegistry? typeNameRegistry = null) { return new JsonSerializerSettings { SerializationBinder = new TypeNameSerializationBinder(typeNameRegistry ?? new TypeNameRegistry()), ContractResolver = new ConverterContractResolver( new CompareOperatorJsonConverter(), new JsonValueConverter(), new StringEnumConverter(), new SurrogateConverter(), new SurrogateConverter, JsonFilterSurrogate>(), new EnvelopeHeadersConverter()), TypeNameHandling = TypeNameHandling.Auto }.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); } public static T SerializeAndDeserialize(this T value) { var json = DefaultSerializer.Serialize(Tuple.Create(value)); return DefaultSerializer.Deserialize>(json).Item1; } public static T Deserialize(string value) { return DefaultSerializer.Deserialize>($"{{ \"Item1\": \"{value}\" }}").Item1; } public static T Deserialize(object value) { return DefaultSerializer.Deserialize>($"{{ \"Item1\": {value} }}").Item1; } } }