diff --git a/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializationTests.cs b/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializationTests.cs new file mode 100644 index 000000000..1afb2c71d --- /dev/null +++ b/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializationTests.cs @@ -0,0 +1,84 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Threading.Tasks; +using Orleans; +using Orleans.TestingHost; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.TestHelpers; +using Xunit; + +namespace Squidex.Infrastructure.Orleans +{ + [Trait("Category", "Dependencies")] + public class JsonExternalSerializationTests + { + public interface ICommandGrain : IGrainWithStringKey + { + public Task> ExecuteAsync(J request); + } + + public class CommandGrain : Grain, ICommandGrain + { + public Task> ExecuteAsync(J request) + { + request.Value.ApplyContext(); + + var command = (TestCommand)request.Value.Command; + + var result = new CommandResult(command.AggregateId, 0, 0, command.Value); + + return Task.FromResult(result.AsJ()); + } + } + + public class TestCommand : IAggregateCommand + { + public DomainId AggregateId { get; set; } + + public long ExpectedVersion { get; set; } + + public string Value { get; set; } + } + + public JsonExternalSerializationTests() + { + J.DefaultSerializer = TestUtils.DefaultSerializer; + } + + [Fact] + public async Task Should_make_request_with_json_serializer() + { + var cluster = + new TestClusterBuilder(1) + .Build(); + + await cluster.DeployAsync(); + + try + { + for (var i = 0; i < 100; i++) + { + var id = DomainId.NewGuid().ToString(); + + var grain = cluster.GrainFactory.GetGrain(id); + + var result = await grain.ExecuteAsync(CommandRequest.Create(new TestCommand + { + Value = id + })); + + Assert.Equal(id, result.Value.Payload); + } + } + finally + { + await Task.WhenAny(Task.Delay(2000), cluster.StopAllSilosAsync()); + } + } + } +} diff --git a/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs b/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs index c46c2df1b..66dd8ec86 100644 --- a/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs +++ b/backend/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs @@ -26,28 +26,31 @@ namespace Squidex.Infrastructure.Orleans [Fact] public void Should_not_copy_null() { - var v = (string?)null; - var c = J.Copy(v, null); + var source = (string?)null; - Assert.Null(c); + var clone = J.Copy(source, null); + + Assert.Null(clone); } [Fact] public void Should_copy_null_json() { - var v = new J?>(null); - var c = (J>)J.Copy(v, null)!; + var source = new J?>(null); + + var clone = (J>)J.Copy(source, null)!; - Assert.Null(c.Value); + Assert.Null(clone.Value); } [Fact] public void Should_not_copy_immutable_values() { - var v = new List { 1, 2, 3 }.AsJ(); - var c = (J>)J.Copy(v, null)!; + var source = new List { 1, 2, 3 }.AsJ(); + + var copy = (J>)J.Copy(source, null)!; - Assert.Same(v.Value, c.Value); + Assert.Same(source.Value, copy.Value); } [Fact]