diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs index 16570c87b..11eb45b48 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using System.Collections.Generic; using Newtonsoft.Json; using Squidex.Infrastructure.Json; @@ -26,7 +27,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json serializer.Serialize(writer, json); } - protected override AppClients ReadValue(JsonReader reader, JsonSerializer serializer) + protected override AppClients ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { var json = serializer.Deserialize>(reader); diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs index efa326377..5c4921d08 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using System.Collections.Generic; using Newtonsoft.Json; using Squidex.Infrastructure.Json; @@ -26,7 +27,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json serializer.Serialize(writer, json); } - protected override AppContributors ReadValue(JsonReader reader, JsonSerializer serializer) + protected override AppContributors ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { var json = serializer.Deserialize>(reader); diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs index af52f34a9..1ae94f71c 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using System.Collections.Generic; using Newtonsoft.Json; using Squidex.Infrastructure.Json; @@ -26,7 +27,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json serializer.Serialize(writer, json); } - protected override LanguagesConfig ReadValue(JsonReader reader, JsonSerializer serializer) + protected override LanguagesConfig ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { var json = serializer.Deserialize>(reader); diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Json/RuleConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Rules/Json/RuleConverter.cs index cd3e9707f..176820ef5 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Json/RuleConverter.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Rules/Json/RuleConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using Newtonsoft.Json; using Squidex.Infrastructure.Json; @@ -13,14 +14,14 @@ namespace Squidex.Domain.Apps.Core.Rules.Json { public sealed class RuleConverter : JsonClassConverter { - protected override Rule ReadValue(JsonReader reader, JsonSerializer serializer) + protected override void WriteValue(JsonWriter writer, Rule value, JsonSerializer serializer) { - return serializer.Deserialize(reader).ToRule(); + serializer.Serialize(writer, new JsonRule(value)); } - protected override void WriteValue(JsonWriter writer, Rule value, JsonSerializer serializer) + protected override Rule ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { - serializer.Serialize(writer, new JsonRule(value)); + return serializer.Deserialize(reader).ToRule(); } } } diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/Json/SchemaConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/Json/SchemaConverter.cs index 317afa717..6db657dc2 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Schemas/Json/SchemaConverter.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/Json/SchemaConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using Newtonsoft.Json; using Squidex.Infrastructure; using Squidex.Infrastructure.Json; @@ -28,7 +29,7 @@ namespace Squidex.Domain.Apps.Core.Schemas.Json serializer.Serialize(writer, new JsonSchemaModel(value)); } - protected override Schema ReadValue(JsonReader reader, JsonSerializer serializer) + protected override Schema ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { return serializer.Deserialize(reader).ToSchema(fieldRegistry); } diff --git a/src/Squidex.Infrastructure/CQRS/Events/Envelope{T}.cs b/src/Squidex.Infrastructure/CQRS/Events/Envelope{T}.cs index c03435422..64e6fa29a 100644 --- a/src/Squidex.Infrastructure/CQRS/Events/Envelope{T}.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/Envelope{T}.cs @@ -23,23 +23,12 @@ namespace Squidex.Infrastructure.CQRS.Events get { return payload; } } - public Envelope(T payload) - : this(payload, new EnvelopeHeaders()) - { - } - - public Envelope(T payload, PropertiesBag bag) - : this(payload, new EnvelopeHeaders(bag)) - { - } - - public Envelope(T payload, EnvelopeHeaders headers) + public Envelope(T payload, EnvelopeHeaders headers = null) { Guard.NotNull(payload, nameof(payload)); - Guard.NotNull(headers, nameof(headers)); this.payload = payload; - this.headers = headers; + this.headers = headers ?? new EnvelopeHeaders(); } public Envelope To() where TOther : class diff --git a/src/Squidex.Infrastructure/CQRS/Events/EventDataFormatter.cs b/src/Squidex.Infrastructure/CQRS/Events/EventDataFormatter.cs index 60d6f7095..939577d31 100644 --- a/src/Squidex.Infrastructure/CQRS/Events/EventDataFormatter.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/EventDataFormatter.cs @@ -27,7 +27,7 @@ namespace Squidex.Infrastructure.CQRS.Events public virtual Envelope Parse(EventData eventData, bool migrate = true) { - var headers = ReadJson(eventData.Metadata); + var headers = ReadJson(eventData.Metadata); var eventType = typeNameRegistry.GetType(eventData.Type); var eventPayload = ReadJson(eventData.Payload, eventType); diff --git a/src/Squidex.Infrastructure/Json/ClaimsPrincipalConverter.cs b/src/Squidex.Infrastructure/Json/ClaimsPrincipalConverter.cs index aca3cdf7f..220086706 100644 --- a/src/Squidex.Infrastructure/Json/ClaimsPrincipalConverter.cs +++ b/src/Squidex.Infrastructure/Json/ClaimsPrincipalConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using System.Linq; using System.Security.Claims; using Newtonsoft.Json; @@ -48,7 +49,7 @@ namespace Squidex.Infrastructure.Json serializer.Serialize(writer, jsonIdentities); } - protected override ClaimsPrincipal ReadValue(JsonReader reader, JsonSerializer serializer) + protected override ClaimsPrincipal ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { var jsonIdentities = serializer.Deserialize(reader); diff --git a/src/Squidex.Infrastructure/Json/JsonClassConverter.cs b/src/Squidex.Infrastructure/Json/JsonClassConverter.cs index a784d6397..5053625be 100644 --- a/src/Squidex.Infrastructure/Json/JsonClassConverter.cs +++ b/src/Squidex.Infrastructure/Json/JsonClassConverter.cs @@ -20,7 +20,7 @@ namespace Squidex.Infrastructure.Json return null; } - return ReadValue(reader, serializer); + return ReadValue(reader, objectType, serializer); } public sealed override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) @@ -41,6 +41,6 @@ namespace Squidex.Infrastructure.Json protected abstract void WriteValue(JsonWriter writer, T value, JsonSerializer serializer); - protected abstract T ReadValue(JsonReader reader, JsonSerializer serializer); + protected abstract T ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer); } } diff --git a/src/Squidex.Infrastructure/Json/LanguageConverter.cs b/src/Squidex.Infrastructure/Json/LanguageConverter.cs index 25d2fa296..73e9a8c85 100644 --- a/src/Squidex.Infrastructure/Json/LanguageConverter.cs +++ b/src/Squidex.Infrastructure/Json/LanguageConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using Newtonsoft.Json; namespace Squidex.Infrastructure.Json @@ -17,7 +18,7 @@ namespace Squidex.Infrastructure.Json writer.WriteValue(value.Iso2Code); } - protected override Language ReadValue(JsonReader reader, JsonSerializer serializer) + protected override Language ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.String) { diff --git a/src/Squidex.Infrastructure/Json/NamedGuidIdConverter.cs b/src/Squidex.Infrastructure/Json/NamedGuidIdConverter.cs index 9e572d2c3..968cb3762 100644 --- a/src/Squidex.Infrastructure/Json/NamedGuidIdConverter.cs +++ b/src/Squidex.Infrastructure/Json/NamedGuidIdConverter.cs @@ -19,7 +19,7 @@ namespace Squidex.Infrastructure.Json writer.WriteValue($"{value.Id},{value.Name}"); } - protected override NamedId ReadValue(JsonReader reader, JsonSerializer serializer) + protected override NamedId ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.String) { diff --git a/src/Squidex.Infrastructure/Json/NamedLongIdConverter.cs b/src/Squidex.Infrastructure/Json/NamedLongIdConverter.cs index f81b62650..4829f79c4 100644 --- a/src/Squidex.Infrastructure/Json/NamedLongIdConverter.cs +++ b/src/Squidex.Infrastructure/Json/NamedLongIdConverter.cs @@ -19,7 +19,7 @@ namespace Squidex.Infrastructure.Json writer.WriteValue($"{value.Id},{value.Name}"); } - protected override NamedId ReadValue(JsonReader reader, JsonSerializer serializer) + protected override NamedId ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.String) { diff --git a/src/Squidex.Infrastructure/Json/NamedStringIdConverter.cs b/src/Squidex.Infrastructure/Json/NamedStringIdConverter.cs index 4fb5a379e..1b409882f 100644 --- a/src/Squidex.Infrastructure/Json/NamedStringIdConverter.cs +++ b/src/Squidex.Infrastructure/Json/NamedStringIdConverter.cs @@ -19,7 +19,7 @@ namespace Squidex.Infrastructure.Json writer.WriteValue($"{value.Id},{value.Name}"); } - protected override NamedId ReadValue(JsonReader reader, JsonSerializer serializer) + protected override NamedId ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.String) { diff --git a/src/Squidex.Infrastructure/Json/Orleans/JsonExternalSerializer.cs b/src/Squidex.Infrastructure/Json/Orleans/JsonExternalSerializer.cs index e18e41e92..f14070130 100644 --- a/src/Squidex.Infrastructure/Json/Orleans/JsonExternalSerializer.cs +++ b/src/Squidex.Infrastructure/Json/Orleans/JsonExternalSerializer.cs @@ -18,13 +18,13 @@ namespace Squidex.Infrastructure.Json.Orleans { public class JsonExternalSerializer : IExternalSerializer { - private readonly JsonSerializer jsonSerializer; + private readonly JsonSerializer serializer; - public JsonExternalSerializer(JsonSerializer jsonSerializer) + public JsonExternalSerializer(JsonSerializer serializer) { - Guard.NotNull(jsonSerializer, nameof(jsonSerializer)); + Guard.NotNull(serializer, nameof(serializer)); - this.jsonSerializer = jsonSerializer; + this.serializer = serializer; } public void Initialize(Logger logger) @@ -38,7 +38,7 @@ namespace Squidex.Infrastructure.Json.Orleans public object DeepCopy(object source, ICopyContext context) { - return source != null ? JObject.FromObject(source, jsonSerializer).ToObject(source.GetType(), jsonSerializer) : null; + return source != null ? JObject.FromObject(source, serializer).ToObject(source.GetType(), serializer) : null; } public object Deserialize(Type expectedType, IDeserializationContext context) @@ -50,7 +50,7 @@ namespace Squidex.Infrastructure.Json.Orleans using (var reader = new JsonTextReader(new StreamReader(stream))) { - return jsonSerializer.Deserialize(reader, expectedType); + return serializer.Deserialize(reader, expectedType); } } @@ -60,7 +60,7 @@ namespace Squidex.Infrastructure.Json.Orleans using (var writer = new JsonTextWriter(new StreamWriter(stream))) { - jsonSerializer.Serialize(writer, item); + serializer.Serialize(writer, item); writer.Flush(); } diff --git a/src/Squidex.Infrastructure/Json/PropertiesBagConverter.cs b/src/Squidex.Infrastructure/Json/PropertiesBagConverter.cs index fad3d3243..ae6990e9a 100644 --- a/src/Squidex.Infrastructure/Json/PropertiesBagConverter.cs +++ b/src/Squidex.Infrastructure/Json/PropertiesBagConverter.cs @@ -13,9 +13,9 @@ using NodaTime.Extensions; namespace Squidex.Infrastructure.Json { - public sealed class PropertiesBagConverter : JsonClassConverter + public sealed class PropertiesBagConverter : JsonClassConverter where T : PropertiesBag, new() { - protected override void WriteValue(JsonWriter writer, PropertiesBag value, JsonSerializer serializer) + protected override void WriteValue(JsonWriter writer, T value, JsonSerializer serializer) { writer.WriteStartObject(); @@ -36,14 +36,14 @@ namespace Squidex.Infrastructure.Json writer.WriteEndObject(); } - protected override PropertiesBag ReadValue(JsonReader reader, JsonSerializer serializer) + protected override T ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) { throw new JsonException($"Expected Object, but got {reader.TokenType}."); } - var properties = new PropertiesBag(); + var properties = new T(); while (reader.Read()) { @@ -73,7 +73,7 @@ namespace Squidex.Infrastructure.Json public override bool CanConvert(Type objectType) { - return typeof(PropertiesBag).IsAssignableFrom(objectType); + return objectType == typeof(T); } } } diff --git a/src/Squidex.Infrastructure/Json/RefTokenConverter.cs b/src/Squidex.Infrastructure/Json/RefTokenConverter.cs index 9964c7f3a..92dfa7a4c 100644 --- a/src/Squidex.Infrastructure/Json/RefTokenConverter.cs +++ b/src/Squidex.Infrastructure/Json/RefTokenConverter.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using Newtonsoft.Json; namespace Squidex.Infrastructure.Json @@ -17,7 +18,7 @@ namespace Squidex.Infrastructure.Json writer.WriteValue(value.ToString()); } - protected override RefToken ReadValue(JsonReader reader, JsonSerializer serializer) + protected override RefToken ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.String) { diff --git a/src/Squidex.Infrastructure/Reflection/SimpleMapper.cs b/src/Squidex.Infrastructure/Reflection/SimpleMapper.cs index a38c522c1..dabd13661 100644 --- a/src/Squidex.Infrastructure/Reflection/SimpleMapper.cs +++ b/src/Squidex.Infrastructure/Reflection/SimpleMapper.cs @@ -121,7 +121,7 @@ namespace Squidex.Infrastructure.Reflection new PropertyAccessor(sourceClassType, sourceProperty), new PropertyAccessor(targetClassType, targetProperty))); } - else if (targetType.Implements() && sourceType.Implements()) + else if (targetType.Implements()) { Mappers.Add(new ConversionPropertyMapper( new PropertyAccessor(sourceClassType, sourceProperty), diff --git a/src/Squidex/Config/Domain/SerializationServices.cs b/src/Squidex/Config/Domain/SerializationServices.cs index 1e30fa762..75b9ed153 100644 --- a/src/Squidex/Config/Domain/SerializationServices.cs +++ b/src/Squidex/Config/Domain/SerializationServices.cs @@ -18,6 +18,7 @@ using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas.Json; using Squidex.Domain.Apps.Events; using Squidex.Infrastructure; +using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.Json; using Squidex.Infrastructure.MongoDb; @@ -48,7 +49,8 @@ namespace Squidex.Config.Domain new NamedGuidIdConverter(), new NamedLongIdConverter(), new NamedStringIdConverter(), - new PropertiesBagConverter(), + new PropertiesBagConverter(), + new PropertiesBagConverter(), new RefTokenConverter(), new RuleConverter(), new SchemaConverter(FieldRegistry), diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeTests.cs new file mode 100644 index 000000000..bf86bd336 --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeTests.cs @@ -0,0 +1,32 @@ +// ========================================================================== +// EnvelopeTests.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using Squidex.Infrastructure.Json; +using Squidex.Infrastructure.TestHelpers; +using Xunit; + +namespace Squidex.Infrastructure.CQRS.Events +{ + public class EnvelopeTests + { + public class MyEvent : IEvent + { + public int Value { get; set; } + } + + [Fact] + public void Should_serialize_and_deserialize() + { + var value = new Envelope(new MyEvent { Value = 1 }); + + var deserialized = value.SerializeAndDeserializeAndReturn(new PropertiesBagConverter()); + + Assert.Equal(1, value.To().Payload.Value); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Events/EventDataFormatterTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EventDataFormatterTests.cs index 7e07d5dd4..a7dd55470 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Events/EventDataFormatterTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EventDataFormatterTests.cs @@ -38,7 +38,7 @@ namespace Squidex.Infrastructure.CQRS.Events public EventDataFormatterTests() { - serializerSettings.Converters.Add(new PropertiesBagConverter()); + serializerSettings.Converters.Add(new PropertiesBagConverter()); typeNameRegistry.Map(typeof(MyEvent), "Event"); typeNameRegistry.Map(typeof(MyOldEvent), "OldEvent"); diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Events/RetrySubscriptionTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Events/RetrySubscriptionTests.cs index a49a4a723..069cf4d55 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Events/RetrySubscriptionTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Events/RetrySubscriptionTests.cs @@ -63,17 +63,29 @@ namespace Squidex.Infrastructure.CQRS.Events var ex = new InvalidOperationException(); await OnErrorAsync(eventSubscription, ex); - await OnErrorAsync(eventSubscription, ex); - await OnErrorAsync(eventSubscription, ex); - await OnErrorAsync(eventSubscription, ex); - await OnErrorAsync(eventSubscription, ex); - await OnErrorAsync(eventSubscription, ex); + await OnErrorAsync(null, ex); + await OnErrorAsync(null, ex); + await OnErrorAsync(null, ex); + await OnErrorAsync(null, ex); + await OnErrorAsync(null, ex); await sut.StopAsync(); A.CallTo(() => eventSubscriber.OnErrorAsync(sut, ex)) .MustHaveHappened(); } + [Fact] + public async Task Should_not_forward_error_when_exception_is_from_another_subscription() + { + var ex = new InvalidOperationException(); + + await OnErrorAsync(A.Fake(), ex); + await sut.StopAsync(); + + A.CallTo(() => eventSubscriber.OnErrorAsync(A.Ignored, A.Ignored)) + .MustNotHaveHappened(); + } + [Fact] public async Task Should_forward_event_from_inner_subscription() { @@ -87,26 +99,34 @@ namespace Squidex.Infrastructure.CQRS.Events } [Fact] - public async Task Should_not_forward_error_when_exception_is_from_another_subscription() + public async Task Should_not_forward_event_when_message_is_from_another_subscription() { - var ex = new InvalidOperationException(); + var ev = new StoredEvent("1", 2, new EventData()); - await OnErrorAsync(A.Fake(), ex); + await OnEventAsync(A.Fake(), ev); await sut.StopAsync(); - A.CallTo(() => eventSubscriber.OnErrorAsync(A.Ignored, A.Ignored)) + A.CallTo(() => eventSubscriber.OnEventAsync(A.Ignored, A.Ignored)) .MustNotHaveHappened(); } [Fact] - public async Task Should_not_forward_event_when_message_is_from_another_subscription() + public async Task Should_forward_closed_from_inner_subscription() { - var ev = new StoredEvent("1", 2, new EventData()); + await OnClosedAsync(eventSubscription); + await sut.StopAsync(); - await OnEventAsync(A.Fake(), ev); + A.CallTo(() => eventSubscriber.OnClosedAsync(sut)) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_not_forward_closed_when_message_is_from_another_subscription() + { + await OnClosedAsync(A.Fake()); await sut.StopAsync(); - A.CallTo(() => eventSubscriber.OnEventAsync(A.Ignored, A.Ignored)) + A.CallTo(() => eventSubscriber.OnClosedAsync(sut)) .MustNotHaveHappened(); } @@ -119,5 +139,10 @@ namespace Squidex.Infrastructure.CQRS.Events { return sutSubscriber.OnEventAsync(subscriber, ev); } + + private Task OnClosedAsync(IEventSubscription subscriber) + { + return sutSubscriber.OnClosedAsync(subscriber); + } } } \ No newline at end of file diff --git a/tests/Squidex.Infrastructure.Tests/PropertiesBagTests.cs b/tests/Squidex.Infrastructure.Tests/PropertiesBagTests.cs index 752036a2e..4ebdd6038 100644 --- a/tests/Squidex.Infrastructure.Tests/PropertiesBagTests.cs +++ b/tests/Squidex.Infrastructure.Tests/PropertiesBagTests.cs @@ -10,9 +10,9 @@ using System; using System.Globalization; using System.Linq; using Microsoft.CSharp.RuntimeBinder; -using Newtonsoft.Json; using NodaTime; using Squidex.Infrastructure.Json; +using Squidex.Infrastructure.TestHelpers; using Xunit; namespace Squidex.Infrastructure @@ -31,12 +31,7 @@ namespace Squidex.Infrastructure [Fact] public void Should_serialize_and_deserialize_empty_bag() { - var serializerSettings = new JsonSerializerSettings(); - - serializerSettings.Converters.Add(new PropertiesBagConverter()); - - var content = JsonConvert.SerializeObject(bag, serializerSettings); - var output = JsonConvert.DeserializeObject(content, serializerSettings); + var output = bag.SerializeAndDeserializeAndReturn(new PropertiesBagConverter()); Assert.Equal(bag.Count, output.Count); } @@ -52,19 +47,14 @@ namespace Squidex.Infrastructure bag.Set("Key4", true); bag.Set("Key5", Guid.NewGuid()); - var serializerSettings = new JsonSerializerSettings(); - - serializerSettings.Converters.Add(new PropertiesBagConverter()); - - var content = JsonConvert.SerializeObject(bag, serializerSettings); - var response = JsonConvert.DeserializeObject(content, serializerSettings); + var output = bag.SerializeAndDeserializeAndReturn(new PropertiesBagConverter()); - foreach (var kvp in response.Properties.Take(4)) + foreach (var kvp in output.Properties.Take(4)) { Assert.Equal(kvp.Value.RawValue, bag[kvp.Key].RawValue); } - Assert.Equal(bag["Key5"].ToGuid(c), response["Key5"].ToGuid(c)); + Assert.Equal(bag["Key5"].ToGuid(c), output["Key5"].ToGuid(c)); } [Fact] diff --git a/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs b/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs index 47b5e7029..7c6490174 100644 --- a/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs +++ b/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs @@ -70,7 +70,7 @@ namespace Squidex.Infrastructure.Reflection } [Fact] - public void Should_to_type() + public void Should_map_to_type() { var class1 = new MyClass1 { diff --git a/tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs b/tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs index 394475828..35e3d55da 100644 --- a/tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs +++ b/tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs @@ -38,10 +38,7 @@ namespace Squidex.Infrastructure.TestHelpers public static T SerializeAndDeserializeAndReturn(this T value, JsonConverter converter) { - var serializerSettings = new JsonSerializerSettings(); - - serializerSettings.Converters.Add(converter); - serializerSettings.NullValueHandling = NullValueHandling.Include; + var serializerSettings = CreateSettings(converter); var result = JsonConvert.SerializeObject(Tuple.Create(value), serializerSettings); var output = JsonConvert.DeserializeObject>(result, serializerSettings); @@ -50,13 +47,25 @@ namespace Squidex.Infrastructure.TestHelpers } public static void DoesNotDeserialize(string value, JsonConverter converter) + { + var serializerSettings = CreateSettings(converter); + + Assert.ThrowsAny(() => JsonConvert.DeserializeObject>($"{{ \"Item1\": \"{value}\" }}", serializerSettings)); + } + + private static JsonSerializerSettings CreateSettings(JsonConverter converter) { var serializerSettings = new JsonSerializerSettings(); - serializerSettings.Converters.Add(converter); + if (converter != null) + { + serializerSettings.Converters.Add(converter); + } + serializerSettings.NullValueHandling = NullValueHandling.Include; + serializerSettings.TypeNameHandling = TypeNameHandling.Auto; - Assert.ThrowsAny(() => JsonConvert.DeserializeObject>($"{{ \"Item1\": \"{value}\" }}", serializerSettings)); + return serializerSettings; } } }