Browse Source

Packages updated

Tests fixed
Json support for Rules.
pull/157/head
Sebastian Stehle 8 years ago
parent
commit
bbc7ad2789
  1. 46
      src/Squidex.Domain.Apps.Core.Model/Rules/Json/JsonRule.cs
  2. 27
      src/Squidex.Domain.Apps.Core.Model/Rules/Json/RuleConverter.cs
  3. 2
      src/Squidex.Domain.Apps.Core.Model/Rules/Rule.cs
  4. 2
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs
  5. 113
      tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs
  6. 5
      tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj
  7. 2
      tests/Squidex.Domain.Apps.Core.Tests/TestData.cs
  8. 5
      tests/Squidex.Domain.Apps.Read.Tests/Squidex.Domain.Apps.Read.Tests.csproj
  9. 5
      tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj
  10. 5
      tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj
  11. 5
      tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj

46
src/Squidex.Domain.Apps.Core.Model/Rules/Json/JsonRule.cs

@ -0,0 +1,46 @@
// ==========================================================================
// JsonRule.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using Newtonsoft.Json;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Domain.Apps.Core.Rules.Json
{
public sealed class JsonRule
{
[JsonProperty]
public RuleTrigger Trigger { get; set; }
[JsonProperty]
public RuleAction Action { get; set; }
[JsonProperty]
public bool IsEnabled { get; set; }
public JsonRule()
{
}
public JsonRule(Rule rule)
{
SimpleMapper.Map(rule, this);
}
public Rule ToRule()
{
var rule = new Rule(Trigger, Action);
if (!IsEnabled)
{
rule.Disable();
}
return rule;
}
}
}

27
src/Squidex.Domain.Apps.Core.Model/Rules/Json/RuleConverter.cs

@ -0,0 +1,27 @@
// ==========================================================================
// RuleConverter.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
namespace Squidex.Domain.Apps.Core.Rules.Json
{
public sealed class RuleConverter : JsonClassConverter<Rule>
{
protected override Rule ReadValue(JsonReader reader, JsonSerializer serializer)
{
return serializer.Deserialize<JsonRule>(reader).ToRule();
}
protected override void WriteValue(JsonWriter writer, Rule value, JsonSerializer serializer)
{
serializer.Serialize(writer, new JsonRule(value));
}
}
}

2
src/Squidex.Domain.Apps.Core.Model/Rules/Rule.cs

@ -67,7 +67,7 @@ namespace Squidex.Domain.Apps.Core.Rules
{
Guard.NotNull(newAction, nameof(newAction));
if (newAction.GetType() != trigger.GetType())
if (newAction.GetType() != action.GetType())
{
throw new ArgumentException("New action has another type.", nameof(newAction));
}

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

@ -100,7 +100,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules
return job;
}
public async Task<(string Dump, RuleResult Result, TimeSpan Elapsed)> InvokeAsync(string actionName, Dictionary<string, JToken> job)
public async Task<(string Dump, RuleResult Result, TimeSpan Elapsed)> InvokeAsync(string actionName, RuleJobData job)
{
try
{

113
tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs

@ -0,0 +1,113 @@
// ==========================================================================
// RuleTests.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using FluentAssertions;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.Rules;
using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Domain.Apps.Core.Rules.Triggers;
using Xunit;
namespace Squidex.Domain.Apps.Core.Model.Rules
{
public class RuleTests
{
private readonly JsonSerializer serializer = TestData.DefaultSerializer();
private readonly Rule sut = new Rule(new ContentChangedTrigger(), new WebhookAction());
public sealed class OtherTrigger : RuleTrigger
{
public override T Accept<T>(IRuleTriggerVisitor<T> visitor)
{
throw new NotSupportedException();
}
}
public sealed class OtherAction : RuleAction
{
public override T Accept<T>(IRuleActionVisitor<T> visitor)
{
throw new NotSupportedException();
}
}
[Fact]
public void Should_create_with_trigger_and_action()
{
var ruleTrigger = new ContentChangedTrigger();
var ruleAction = new WebhookAction();
var newRule = new Rule(ruleTrigger, ruleAction);
Assert.Equal(ruleTrigger, newRule.Trigger);
Assert.Equal(ruleAction, newRule.Action);
Assert.True(newRule.IsEnabled);
}
[Fact]
public void Should_set_enabled_to_true_when_enabling()
{
sut.Enable();
Assert.True(sut.IsEnabled);
}
[Fact]
public void Should_set_enabled_to_false_when_disabling()
{
sut.Enable();
sut.Disable();
Assert.False(sut.IsEnabled);
}
[Fact]
public void Should_replace_trigger_when_updating()
{
var newTrigger = new ContentChangedTrigger();
sut.Update(newTrigger);
Assert.Same(newTrigger, sut.Trigger);
}
[Fact]
public void Should_throw_exception_when_new_trigger_has_other_type()
{
Assert.Throws<ArgumentException>(() => sut.Update(new OtherTrigger()));
}
[Fact]
public void Should_replace_action_when_updating()
{
var newAction = new WebhookAction();
sut.Update(newAction);
Assert.Same(newAction, sut.Action);
}
[Fact]
public void Should_throw_exception_when_new_action_has_other_type()
{
Assert.Throws<ArgumentException>(() => sut.Update(new OtherAction()));
}
[Fact]
public void Should_serialize_and_deserialize()
{
sut.Disable();
var appClients = JToken.FromObject(sut, serializer).ToObject<Rule>(serializer);
appClients.ShouldBeEquivalentTo(sut);
}
}
}

5
tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj

@ -19,10 +19,7 @@
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
<PropertyGroup>
<CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet>

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

@ -9,6 +9,7 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Squidex.Domain.Apps.Core.Apps.Json;
using Squidex.Domain.Apps.Core.Rules.Json;
using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Domain.Apps.Core.Schemas.Json;
using Squidex.Infrastructure;
@ -36,6 +37,7 @@ namespace Squidex.Domain.Apps.Core
new NamedLongIdConverter(),
new NamedStringIdConverter(),
new RefTokenConverter(),
new RuleConverter(),
new SchemaConverter(new FieldRegistry(typeNameRegistry)),
new StringEnumConverter()),

5
tests/Squidex.Domain.Apps.Read.Tests/Squidex.Domain.Apps.Read.Tests.csproj

@ -29,10 +29,7 @@
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
<PropertyGroup>
<CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet>

5
tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj

@ -21,10 +21,7 @@
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
<PropertyGroup>
<CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet>

5
tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj

@ -21,10 +21,7 @@
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
<PropertyGroup>
<CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet>

5
tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj

@ -24,10 +24,7 @@
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0-msbuild3-final" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
<PropertyGroup>
<CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet>

Loading…
Cancel
Save