Browse Source

All tests green for core.

pull/335/head
Sebastian Stehle 8 years ago
parent
commit
c8e77194b7
  1. 2
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs
  2. 1
      src/Squidex.Infrastructure/Json/Newtonsoft/JsonValueConverter.cs
  3. 2
      src/Squidex.Infrastructure/Json/Objects/JsonObject.cs
  4. 4
      tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs
  5. 14
      tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/ValueConvertersTests.cs
  6. 41
      tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs
  7. 91
      tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs
  8. 9
      tests/Squidex.Domain.Apps.Core.Tests/TestData.cs
  9. 2
      tests/Squidex.Infrastructure.Tests/EventSourcing/DefaultEventDataFormatterTests.cs
  10. 2
      tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs
  11. 16
      tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs

2
src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs

@ -109,7 +109,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules
var actionName = typeNameRegistry.GetName(actionType); var actionName = typeNameRegistry.GetName(actionType);
var actionData = await actionHandler.CreateJobAsync(enrichedEvent, rule.Action); var actionData = await actionHandler.CreateJobAsync(enrichedEvent, rule.Action);
var json = jsonSerializer.Serialize(actionData); var json = jsonSerializer.Serialize(actionData.Data);
var job = new RuleJob var job = new RuleJob
{ {

1
src/Squidex.Infrastructure/Json/Newtonsoft/JsonValueConverter.cs

@ -7,7 +7,6 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Linq;
using Newtonsoft.Json; using Newtonsoft.Json;
using Squidex.Infrastructure.Json.Objects; using Squidex.Infrastructure.Json.Objects;

2
src/Squidex.Infrastructure/Json/Objects/JsonObject.cs

@ -123,7 +123,7 @@ namespace Squidex.Infrastructure.Json.Objects
public override string ToString() public override string ToString()
{ {
return $"{{{string.Join(", ", this.Select(x => $"\"{x.Key}\"={x.Value}\""))}}}"; return $"{{{string.Join(", ", this.Select(x => $"\"{x.Key}\":{x.Value.ToJsonString()}"))}}}";
} }
} }
} }

4
tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs

@ -13,7 +13,6 @@ using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.ConvertContent; using Squidex.Domain.Apps.Core.ConvertContent;
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Json;
using Squidex.Infrastructure.Json.Objects; using Squidex.Infrastructure.Json.Objects;
using Xunit; using Xunit;
@ -22,7 +21,6 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
public class FieldConvertersTests public class FieldConvertersTests
{ {
private readonly IAssetUrlGenerator assetUrlGenerator = A.Fake<IAssetUrlGenerator>(); private readonly IAssetUrlGenerator assetUrlGenerator = A.Fake<IAssetUrlGenerator>();
private readonly IJsonSerializer serializer = TestData.DefaultSerializer();
private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.EN, Language.DE); private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.EN, Language.DE);
private readonly RootField<JsonFieldProperties> jsonField = Fields.Json(1, "1", Partitioning.Invariant); private readonly RootField<JsonFieldProperties> jsonField = Fields.Json(1, "1", Partitioning.Invariant);
private readonly RootField<StringFieldProperties> stringLanguageField = Fields.String(1, "1", Partitioning.Language); private readonly RootField<StringFieldProperties> stringLanguageField = Fields.String(1, "1", Partitioning.Language);
@ -60,7 +58,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData() new ContentFieldData()
.AddValue("iv", JsonValue.Object()); .AddValue("iv", JsonValue.Object());
var actual = FieldConverters.ForValues(ValueConverters.EncodeJson(serializer))(input, jsonField); var actual = FieldConverters.ForValues(ValueConverters.EncodeJson(TestData.DefaultSerializer))(input, jsonField);
var expected = var expected =
new ContentFieldData() new ContentFieldData()

14
tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/ValueConvertersTests.cs

@ -7,7 +7,6 @@
using Squidex.Domain.Apps.Core.ConvertContent; using Squidex.Domain.Apps.Core.ConvertContent;
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure.Json;
using Squidex.Infrastructure.Json.Objects; using Squidex.Infrastructure.Json.Objects;
using Xunit; using Xunit;
@ -18,14 +17,13 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
private readonly RootField<StringFieldProperties> stringField = Fields.String(1, "1", Partitioning.Invariant); private readonly RootField<StringFieldProperties> stringField = Fields.String(1, "1", Partitioning.Invariant);
private readonly RootField<JsonFieldProperties> jsonField = Fields.Json(1, "1", Partitioning.Invariant); private readonly RootField<JsonFieldProperties> jsonField = Fields.Json(1, "1", Partitioning.Invariant);
private readonly RootField<NumberFieldProperties> numberField = Fields.Number(1, "1", Partitioning.Invariant); private readonly RootField<NumberFieldProperties> numberField = Fields.Number(1, "1", Partitioning.Invariant);
private readonly IJsonSerializer jsonSerializer = TestData.DefaultSerializer();
[Fact] [Fact]
public void Should_encode_json_value() public void Should_encode_json_value()
{ {
var source = JsonValue.Object(); var source = JsonValue.Object();
var result = ValueConverters.EncodeJson(jsonSerializer)(source, jsonField); var result = ValueConverters.EncodeJson(TestData.DefaultSerializer)(source, jsonField);
Assert.Equal(JsonValue.Create("e30="), result); Assert.Equal(JsonValue.Create("e30="), result);
} }
@ -35,7 +33,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
{ {
var source = JsonValue.Null; var source = JsonValue.Null;
var result = ValueConverters.EncodeJson(jsonSerializer)(source, jsonField); var result = ValueConverters.EncodeJson(TestData.DefaultSerializer)(source, jsonField);
Assert.Same(source, result); Assert.Same(source, result);
} }
@ -45,7 +43,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
{ {
var source = JsonValue.Create("NO-JSON"); var source = JsonValue.Create("NO-JSON");
var result = ValueConverters.EncodeJson(jsonSerializer)(source, stringField); var result = ValueConverters.EncodeJson(TestData.DefaultSerializer)(source, stringField);
Assert.Same(source, result); Assert.Same(source, result);
} }
@ -55,7 +53,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
{ {
var source = JsonValue.Create("e30="); var source = JsonValue.Create("e30=");
var result = ValueConverters.DecodeJson(jsonSerializer)(source, jsonField); var result = ValueConverters.DecodeJson(TestData.DefaultSerializer)(source, jsonField);
Assert.Equal(JsonValue.Object(), result); Assert.Equal(JsonValue.Object(), result);
} }
@ -65,7 +63,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
{ {
var source = JsonValue.Null; var source = JsonValue.Null;
var result = ValueConverters.DecodeJson(jsonSerializer)(source, jsonField); var result = ValueConverters.DecodeJson(TestData.DefaultSerializer)(source, jsonField);
Assert.Same(source, result); Assert.Same(source, result);
} }
@ -75,7 +73,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
{ {
var source = JsonValue.Null; var source = JsonValue.Null;
var result = ValueConverters.EncodeJson(jsonSerializer)(source, stringField); var result = ValueConverters.EncodeJson(TestData.DefaultSerializer)(source, stringField);
Assert.Same(source, result); Assert.Same(source, result);
} }

41
tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs

@ -9,14 +9,12 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Security.Claims; using System.Security.Claims;
using FakeItEasy; using FakeItEasy;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NodaTime; using NodaTime;
using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Json; using Squidex.Infrastructure.Json.Objects;
using Squidex.Shared.Identity; using Squidex.Shared.Identity;
using Squidex.Shared.Users; using Squidex.Shared.Users;
using Xunit; using Xunit;
@ -25,7 +23,6 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
{ {
public class RuleEventFormatterTests public class RuleEventFormatterTests
{ {
private readonly IJsonSerializer serializer = TestData.DefaultSerializer();
private readonly IUser user = A.Fake<IUser>(); private readonly IUser user = A.Fake<IUser>();
private readonly IRuleUrlGenerator urlGenerator = A.Fake<IRuleUrlGenerator>(); private readonly IRuleUrlGenerator urlGenerator = A.Fake<IRuleUrlGenerator>();
private readonly NamedId<Guid> appId = NamedId.Of(Guid.NewGuid(), "my-app"); private readonly NamedId<Guid> appId = NamedId.Of(Guid.NewGuid(), "my-app");
@ -41,7 +38,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
A.CallTo(() => user.Claims) A.CallTo(() => user.Claims)
.Returns(new List<Claim> { new Claim(SquidexClaimTypes.DisplayName, "me") }); .Returns(new List<Claim> { new Claim(SquidexClaimTypes.DisplayName, "me") });
sut = new RuleEventFormatter(serializer, urlGenerator); sut = new RuleEventFormatter(TestData.DefaultSerializer, urlGenerator);
} }
[Fact] [Fact]
@ -198,7 +195,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
new NamedContentData() new NamedContentData()
.AddField("city", .AddField("city",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray())) .AddValue("iv", JsonValue.Array()))
}; };
var result = sut.Format("$CONTENT_DATA.city.de.10", @event); var result = sut.Format("$CONTENT_DATA.city.de.10", @event);
@ -215,8 +212,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
new NamedContentData() new NamedContentData()
.AddField("city", .AddField("city",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JObject( .AddValue("iv", JsonValue.Object().Add("name", "Berlin")))
new JProperty("name", "Berlin"))))
}; };
var result = sut.Format("$CONTENT_DATA.city.de.Name", @event); var result = sut.Format("$CONTENT_DATA.city.de.Name", @event);
@ -267,24 +263,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
new NamedContentData() new NamedContentData()
.AddField("city", .AddField("city",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", JValue.CreateNull())) .AddValue("iv", JsonValue.Null))
};
var result = sut.Format("$CONTENT_DATA.city.iv", @event);
Assert.Equal("UNDEFINED", result);
}
[Fact]
public void Should_return_undefined_when_undefined()
{
var @event = new EnrichedContentEvent
{
Data =
new NamedContentData()
.AddField("city",
new ContentFieldData()
.AddValue("iv", JValue.CreateUndefined()))
}; };
var result = sut.Format("$CONTENT_DATA.city.iv", @event); var result = sut.Format("$CONTENT_DATA.city.iv", @event);
@ -301,13 +280,12 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
new NamedContentData() new NamedContentData()
.AddField("city", .AddField("city",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JObject( .AddValue("iv", JsonValue.Object().Add("name", "Berlin")))
new JProperty("name", "Berlin"))))
}; };
var result = sut.Format("$CONTENT_DATA.city.iv", @event); var result = sut.Format("$CONTENT_DATA.city.iv", @event);
Assert.Equal(JObject.FromObject(new { name = "Berlin" }).ToString(Formatting.Indented), result); Assert.Equal("{\"name\":\"Berlin\"}", result);
} }
[Fact] [Fact]
@ -319,7 +297,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
new NamedContentData() new NamedContentData()
.AddField("city", .AddField("city",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray( .AddValue("iv", JsonValue.Array(
"Berlin"))) "Berlin")))
}; };
@ -337,8 +315,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
new NamedContentData() new NamedContentData()
.AddField("city", .AddField("city",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JObject( .AddValue("iv", JsonValue.Object().Add("name", "Berlin")))
new JProperty("name", "Berlin"))))
}; };
var result = sut.Format("$CONTENT_DATA.city.iv.name", @event); var result = sut.Format("$CONTENT_DATA.city.iv.name", @event);

91
tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs

@ -17,7 +17,6 @@ using Squidex.Domain.Apps.Events;
using Squidex.Domain.Apps.Events.Contents; using Squidex.Domain.Apps.Events.Contents;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Json;
using Xunit; using Xunit;
#pragma warning disable xUnit2009 // Do not use boolean check to check for string equality #pragma warning disable xUnit2009 // Do not use boolean check to check for string equality
@ -28,9 +27,12 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
{ {
private readonly IRuleTriggerHandler ruleTriggerHandler = A.Fake<IRuleTriggerHandler>(); private readonly IRuleTriggerHandler ruleTriggerHandler = A.Fake<IRuleTriggerHandler>();
private readonly IRuleActionHandler ruleActionHandler = A.Fake<IRuleActionHandler>(); private readonly IRuleActionHandler ruleActionHandler = A.Fake<IRuleActionHandler>();
private readonly IJsonSerializer serializer = TestData.DefaultSerializer();
private readonly IEventEnricher eventEnricher = A.Fake<IEventEnricher>(); private readonly IEventEnricher eventEnricher = A.Fake<IEventEnricher>();
private readonly IClock clock = A.Fake<IClock>(); private readonly IClock clock = A.Fake<IClock>();
private readonly string actionData = "{\"value\":10}";
private readonly string actionDump = "MyDump";
private readonly string actionName = "ValidAction";
private readonly string actionDescription = "MyDescription";
private readonly TypeNameRegistry typeNameRegistry = new TypeNameRegistry(); private readonly TypeNameRegistry typeNameRegistry = new TypeNameRegistry();
private readonly RuleService sut; private readonly RuleService sut;
@ -38,12 +40,18 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
{ {
} }
public sealed class InvalidAction : RuleAction
{
}
public sealed class ValidAction : RuleAction public sealed class ValidAction : RuleAction
{ {
public int Value { get; set; }
} }
public sealed class InvalidAction : RuleAction public sealed class ValidData
{ {
public int Value { get; set; }
} }
public sealed class InvalidTrigger : RuleTrigger public sealed class InvalidTrigger : RuleTrigger
@ -57,7 +65,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
public RuleServiceTests() public RuleServiceTests()
{ {
typeNameRegistry.Map(typeof(ContentCreated)); typeNameRegistry.Map(typeof(ContentCreated));
typeNameRegistry.Map(typeof(ValidAction), "ValidAction"); typeNameRegistry.Map(typeof(ValidAction), actionName);
A.CallTo(() => eventEnricher.EnrichAsync(A<Envelope<AppEvent>>.Ignored)) A.CallTo(() => eventEnricher.EnrichAsync(A<Envelope<AppEvent>>.Ignored))
.Returns(new EnrichedContentEvent()); .Returns(new EnrichedContentEvent());
@ -65,16 +73,30 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
A.CallTo(() => ruleActionHandler.ActionType) A.CallTo(() => ruleActionHandler.ActionType)
.Returns(typeof(ValidAction)); .Returns(typeof(ValidAction));
A.CallTo(() => ruleActionHandler.DataType)
.Returns(typeof(ValidData));
A.CallTo(() => ruleTriggerHandler.TriggerType) A.CallTo(() => ruleTriggerHandler.TriggerType)
.Returns(typeof(ContentChangedTrigger)); .Returns(typeof(ContentChangedTrigger));
sut = new RuleService(new[] { ruleTriggerHandler }, new[] { ruleActionHandler }, eventEnricher, serializer, clock, typeNameRegistry); sut = new RuleService(new[] { ruleTriggerHandler }, new[] { ruleActionHandler }, eventEnricher, TestData.DefaultSerializer, clock, typeNameRegistry);
}
[Fact]
public async Task Should_not_create_if_rule_disabled()
{
var ruleConfig = ValidRule().Disable();
var ruleEnvelope = Envelope.Create(new ContentCreated());
var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope);
Assert.Null(job);
} }
[Fact] [Fact]
public async Task Should_not_create_job_for_invalid_event() public async Task Should_not_create_job_for_invalid_event()
{ {
var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleConfig = ValidRule();
var ruleEnvelope = Envelope.Create(new InvalidEvent()); var ruleEnvelope = Envelope.Create(new InvalidEvent());
var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope); var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope);
@ -107,7 +129,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
[Fact] [Fact]
public async Task Should_not_create_if_not_triggered() public async Task Should_not_create_if_not_triggered()
{ {
var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleConfig = ValidRule();
var ruleEnvelope = Envelope.Create(new ContentCreated()); var ruleEnvelope = Envelope.Create(new ContentCreated());
A.CallTo(() => ruleTriggerHandler.Triggers(A<Envelope<AppEvent>>.Ignored, ruleConfig.Trigger)) A.CallTo(() => ruleTriggerHandler.Triggers(A<Envelope<AppEvent>>.Ignored, ruleConfig.Trigger))
@ -125,14 +147,11 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
var now = SystemClock.Instance.GetCurrentInstant(); var now = SystemClock.Instance.GetCurrentInstant();
var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleConfig = ValidRule();
var ruleEnvelope = Envelope.Create(@event); var ruleEnvelope = Envelope.Create(@event);
ruleEnvelope.SetTimestamp(now.Minus(Duration.FromDays(3))); ruleEnvelope.SetTimestamp(now.Minus(Duration.FromDays(3)));
var actionData = "{}";
var actionDescription = "MyDescription";
A.CallTo(() => clock.GetCurrentInstant()) A.CallTo(() => clock.GetCurrentInstant())
.Returns(now); .Returns(now);
@ -154,15 +173,11 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
var now = SystemClock.Instance.GetCurrentInstant(); var now = SystemClock.Instance.GetCurrentInstant();
var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleConfig = ValidRule();
var ruleEnvelope = Envelope.Create(@event); var ruleEnvelope = Envelope.Create(@event);
ruleEnvelope.SetTimestamp(now); ruleEnvelope.SetTimestamp(now);
var actionName = "ValidAction";
var actionData = "{}";
var actionDescription = "MyDescription";
A.CallTo(() => clock.GetCurrentInstant()) A.CallTo(() => clock.GetCurrentInstant())
.Returns(now); .Returns(now);
@ -170,7 +185,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
.Returns(true); .Returns(true);
A.CallTo(() => ruleActionHandler.CreateJobAsync(A<EnrichedEvent>.Ignored, ruleConfig.Action)) A.CallTo(() => ruleActionHandler.CreateJobAsync(A<EnrichedEvent>.Ignored, ruleConfig.Action))
.Returns((actionDescription, actionData)); .Returns((actionDescription, new ValidData { Value = 10 }));
var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope); var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope);
@ -189,14 +204,10 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
[Fact] [Fact]
public async Task Should_return_succeeded_job_with_full_dump_when_handler_returns_no_exception() public async Task Should_return_succeeded_job_with_full_dump_when_handler_returns_no_exception()
{ {
var ruleJob = "{}"; A.CallTo(() => ruleActionHandler.ExecuteJobAsync(A<ValidData>.That.Matches(x => x.Value == 10)))
var actionDump = "MyDump";
A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob))
.Returns((actionDump, null)); .Returns((actionDump, null));
var result = await sut.InvokeAsync("ValidAction", ruleJob); var result = await sut.InvokeAsync(actionName, actionData);
Assert.Equal(RuleResult.Success, result.Result); Assert.Equal(RuleResult.Success, result.Result);
@ -207,14 +218,10 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
[Fact] [Fact]
public async Task Should_return_failed_job_with_full_dump_when_handler_returns_exception() public async Task Should_return_failed_job_with_full_dump_when_handler_returns_exception()
{ {
var ruleJob = "{}"; A.CallTo(() => ruleActionHandler.ExecuteJobAsync(A<ValidData>.That.Matches(x => x.Value == 10)))
var actionDump = "MyDump";
A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob))
.Returns((actionDump, new InvalidOperationException())); .Returns((actionDump, new InvalidOperationException()));
var result = await sut.InvokeAsync("ValidAction", ruleJob); var result = await sut.InvokeAsync(actionName, actionData);
Assert.Equal(RuleResult.Failed, result.Result); Assert.Equal(RuleResult.Failed, result.Result);
@ -225,47 +232,35 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules
[Fact] [Fact]
public async Task Should_return_timedout_job_with_full_dump_when_exception_from_handler_indicates_timeout() public async Task Should_return_timedout_job_with_full_dump_when_exception_from_handler_indicates_timeout()
{ {
var ruleJob = "{}"; A.CallTo(() => ruleActionHandler.ExecuteJobAsync(A<ValidData>.That.Matches(x => x.Value == 10)))
var actionDump = "MyDump";
A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob))
.Returns((actionDump, new TimeoutException())); .Returns((actionDump, new TimeoutException()));
var result = await sut.InvokeAsync("ValidAction", ruleJob); var result = await sut.InvokeAsync(actionName, actionData);
Assert.Equal(RuleResult.Timeout, result.Result); Assert.Equal(RuleResult.Timeout, result.Result);
Assert.True(result.Elapsed >= TimeSpan.Zero); Assert.True(result.Elapsed >= TimeSpan.Zero);
Assert.True(result.Dump.StartsWith(actionDump, StringComparison.OrdinalIgnoreCase)); Assert.True(result.Dump.StartsWith(actionDump, StringComparison.OrdinalIgnoreCase));
Assert.True(result.Dump.IndexOf("Action timed out.", StringComparison.OrdinalIgnoreCase) >= 0); Assert.True(result.Dump.IndexOf("Action timed out.", StringComparison.OrdinalIgnoreCase) >= 0);
} }
[Fact] [Fact]
public async Task Should_create_exception_details_when_job_to_execute_failed() public async Task Should_create_exception_details_when_job_to_execute_failed()
{ {
var ruleJob = "{}";
var ruleError = new InvalidOperationException(); var ruleError = new InvalidOperationException();
A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob)) A.CallTo(() => ruleActionHandler.ExecuteJobAsync(A<ValidData>.That.Matches(x => x.Value == 10)))
.Throws(ruleError); .Throws(ruleError);
var result = await sut.InvokeAsync("ValidAction", ruleJob); var result = await sut.InvokeAsync(actionName, actionData);
Assert.Equal((ruleError.ToString(), RuleResult.Failed, TimeSpan.Zero), result); Assert.Equal((ruleError.ToString(), RuleResult.Failed, TimeSpan.Zero), result);
} }
[Fact] private static Rule ValidRule()
public async Task Should_not_create_if_rule_disabled()
{ {
var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); return new Rule(new ContentChangedTrigger(), new ValidAction());
var ruleEnvelope = Envelope.Create(new ContentCreated());
ruleConfig = ruleConfig.Disable();
var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope);
Assert.Null(job);
} }
} }
} }

9
tests/Squidex.Domain.Apps.Core.Tests/TestData.cs

@ -24,7 +24,9 @@ namespace Squidex.Domain.Apps.Core
{ {
public static class TestData public static class TestData
{ {
public static IJsonSerializer DefaultSerializer() public static readonly IJsonSerializer DefaultSerializer = CreateSerializer();
private static IJsonSerializer CreateSerializer()
{ {
var typeNameRegistry = new TypeNameRegistry(); var typeNameRegistry = new TypeNameRegistry();
@ -38,6 +40,7 @@ namespace Squidex.Domain.Apps.Core
new AppPatternsConverter(), new AppPatternsConverter(),
new ClaimsPrincipalConverter(), new ClaimsPrincipalConverter(),
new InstantConverter(), new InstantConverter(),
new JsonValueConverter(),
new LanguageConverter(), new LanguageConverter(),
new LanguagesConfigConverter(), new LanguagesConfigConverter(),
new NamedGuidIdConverter(), new NamedGuidIdConverter(),
@ -104,9 +107,7 @@ namespace Squidex.Domain.Apps.Core
public static T SerializeAndDeserialize<T>(this T value) public static T SerializeAndDeserialize<T>(this T value)
{ {
var serializer = DefaultSerializer(); return DefaultSerializer.Deserialize<T>(DefaultSerializer.Serialize(value));
return serializer.Deserialize<T>(serializer.Serialize(value));
} }
public static void TestFreeze(IFreezable freezable) public static void TestFreeze(IFreezable freezable)

2
tests/Squidex.Infrastructure.Tests/EventSourcing/DefaultEventDataFormatterTests.cs

@ -34,7 +34,7 @@ namespace Squidex.Infrastructure.EventSourcing
.Map(typeof(MyEvent), "Event") .Map(typeof(MyEvent), "Event")
.Map(typeof(MyOldEvent), "OldEvent"); .Map(typeof(MyOldEvent), "OldEvent");
sut = new DefaultEventDataFormatter(typeNameRegistry, JsonHelper.DefaultSerializer(typeNameRegistry)); sut = new DefaultEventDataFormatter(typeNameRegistry, JsonHelper.CreateSerializer(typeNameRegistry));
} }
[Fact] [Fact]

2
tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs

@ -20,7 +20,7 @@ namespace Squidex.Infrastructure.Orleans
{ {
public JsonExternalSerializerTests() public JsonExternalSerializerTests()
{ {
J.DefaultSerializer = JsonHelper.DefaultSerializer(); J.DefaultSerializer = JsonHelper.DefaultSerializer;
} }
[Fact] [Fact]

16
tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs

@ -16,7 +16,9 @@ namespace Squidex.Infrastructure.TestHelpers
{ {
public static class JsonHelper public static class JsonHelper
{ {
public static IJsonSerializer DefaultSerializer(TypeNameRegistry typeNameRegistry = null) public static readonly IJsonSerializer DefaultSerializer = CreateSerializer();
public static IJsonSerializer CreateSerializer(TypeNameRegistry typeNameRegistry = null)
{ {
var serializerSettings = new JsonSerializerSettings var serializerSettings = new JsonSerializerSettings
{ {
@ -43,23 +45,17 @@ namespace Squidex.Infrastructure.TestHelpers
public static T SerializeAndDeserialize<T>(this T value) public static T SerializeAndDeserialize<T>(this T value)
{ {
var serializer = DefaultSerializer(); return DefaultSerializer.Deserialize<Tuple<T>>(DefaultSerializer.Serialize(Tuple.Create(value))).Item1;
return serializer.Deserialize<Tuple<T>>(serializer.Serialize(Tuple.Create(value))).Item1;
} }
public static T Deserialize<T>(string value) public static T Deserialize<T>(string value)
{ {
var serializer = DefaultSerializer(); return DefaultSerializer.Deserialize<Tuple<T>>($"{{ \"Item1\": \"{value}\" }}").Item1;
return serializer.Deserialize<Tuple<T>>($"{{ \"Item1\": \"{value}\" }}").Item1;
} }
public static T Deserialize<T>(object value) public static T Deserialize<T>(object value)
{ {
var serializer = DefaultSerializer(); return DefaultSerializer.Deserialize<Tuple<T>>($"{{ \"Item1\": {value} }}").Item1;
return serializer.Deserialize<Tuple<T>>($"{{ \"Item1\": {value} }}").Item1;
} }
} }
} }

Loading…
Cancel
Save