From c8511ed04afbd1885227dd471374c6e449c30528 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Wed, 7 Feb 2018 19:26:52 +0100 Subject: [PATCH 01/28] Started to migrate. --- .../Actions/FastlyActionHandler.cs | 3 - .../Apps/AppCommandMiddleware.cs | 1 - .../GetEventStoreSubscription.cs | 4 + .../EventSourcing/MongoEventStore.cs | 2 +- .../EventSourcing/DefaultEventNotifier.cs | 40 ------ .../Grains/EventConsumerBootstrap.cs | 34 +++++ .../Grains/EventConsumerGrain.cs | 129 ++++++++---------- .../Grains/EventConsumerGrainManager.cs | 90 ------------ .../Grains/EventConsumerManagerGrain.cs | 107 +++++++++++++++ .../Grains/IEventConsumerGrain.cs | 33 +++++ .../Grains/IEventConsumerManagerGrain.cs | 29 ++++ .../Grains/Messages/GetStatesRequest.cs | 13 -- .../Grains/Messages/GetStatesResponse.cs | 14 -- .../Grains/Messages/ResetConsumerMessage.cs | 14 -- .../Grains/Messages/StartConsumerMessage.cs | 14 -- .../Grains/Messages/StopConsumerMessage.cs | 14 -- .../Grains/OrleansEventNotifier.cs | 34 +++++ .../Grains/WrapperSubscription.cs | 42 ++++++ .../EventSourcing/IEventSubscription.cs | 2 + .../EventSourcing/PollingSubscription.cs | 18 +-- .../EventSourcing/RetrySubscription.cs | 5 + .../Squidex.Infrastructure.csproj | 3 + .../TypeNameRegistry.cs | 45 ++---- .../EventConsumersController.cs | 27 ++-- .../Config/Authentication/MicrosoftHandler.cs | 1 - src/Squidex/Config/Domain/ReadServices.cs | 6 +- src/Squidex/Config/Orleans/ClientServices.cs | 41 ++++++ src/Squidex/Config/Orleans/SiloExtensions.cs | 34 +++++ src/Squidex/Config/Orleans/SiloServices.cs | 57 ++++++++ src/Squidex/Program.cs | 58 +++++++- src/Squidex/Squidex.csproj | 3 + src/Squidex/WebStartup.cs | 2 + .../Grains/EventConsumerManagerTests.cs | 5 +- 33 files changed, 577 insertions(+), 347 deletions(-) delete mode 100644 src/Squidex.Infrastructure/EventSourcing/DefaultEventNotifier.cs create mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs delete mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrainManager.cs create mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs create mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs create mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs delete mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesRequest.cs delete mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesResponse.cs delete mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/Messages/ResetConsumerMessage.cs delete mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StartConsumerMessage.cs delete mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StopConsumerMessage.cs create mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs create mode 100644 src/Squidex.Infrastructure/EventSourcing/Grains/WrapperSubscription.cs create mode 100644 src/Squidex/Config/Orleans/ClientServices.cs create mode 100644 src/Squidex/Config/Orleans/SiloExtensions.cs create mode 100644 src/Squidex/Config/Orleans/SiloServices.cs diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs index bc3e716b3..5a8a252bd 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs @@ -8,14 +8,11 @@ using System; using System.Collections.Generic; using System.Net.Http; -using System.Text; using System.Threading.Tasks; -using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Events; -using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Http; diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs index 02bb242bd..9439961c4 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs @@ -6,7 +6,6 @@ // ========================================================================== using System; -using System.Collections.Generic; using System.Threading.Tasks; using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Guards; diff --git a/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStoreSubscription.cs b/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStoreSubscription.cs index 3fbffbe37..f5102f54a 100644 --- a/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStoreSubscription.cs +++ b/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStoreSubscription.cs @@ -46,6 +46,10 @@ namespace Squidex.Infrastructure.EventSourcing return TaskHelper.Done; } + public void WakeUp() + { + } + private EventStoreCatchUpSubscription SubscribeToStream(string streamName) { var settings = CatchUpSubscriptionSettings.Default; diff --git a/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore.cs b/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore.cs index 2b4c072a3..6bca83110 100644 --- a/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore.cs +++ b/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore.cs @@ -56,7 +56,7 @@ namespace Squidex.Infrastructure.EventSourcing Guard.NotNull(subscriber, nameof(subscriber)); Guard.NotNullOrEmpty(streamFilter, nameof(streamFilter)); - return new PollingSubscription(this, notifier, subscriber, streamFilter, position); + return new PollingSubscription(this, subscriber, streamFilter, position); } public async Task> GetEventsAsync(string streamName, long streamPosition = 0) diff --git a/src/Squidex.Infrastructure/EventSourcing/DefaultEventNotifier.cs b/src/Squidex.Infrastructure/EventSourcing/DefaultEventNotifier.cs deleted file mode 100644 index 1e94354e3..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/DefaultEventNotifier.cs +++ /dev/null @@ -1,40 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; - -namespace Squidex.Infrastructure.EventSourcing -{ - public sealed class DefaultEventNotifier : IEventNotifier - { - private static readonly string ChannelName = typeof(DefaultEventNotifier).Name; - - private readonly IPubSub pubsub; - - public sealed class EventNotification - { - public string StreamName { get; set; } - } - - public DefaultEventNotifier(IPubSub pubsub) - { - Guard.NotNull(pubsub, nameof(pubsub)); - - this.pubsub = pubsub; - } - - public void NotifyEventsStored(string streamName) - { - pubsub.Publish(new EventNotification { StreamName = streamName }, true); - } - - public IDisposable Subscribe(Action handler) - { - return pubsub.Subscribe(x => handler?.Invoke(x.StreamName)); - } - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs new file mode 100644 index 000000000..40425f5e7 --- /dev/null +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Orleans; +using Orleans.Runtime; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public sealed class EventConsumerBootstrap : ILifecycleParticipant + { + private readonly IGrainFactory grainFactory; + + public EventConsumerBootstrap(IGrainFactory grainFactory) + { + Guard.NotNull(grainFactory, nameof(grainFactory)); + + this.grainFactory = grainFactory; + } + + public void Participate(ISiloLifecycle lifecycle) + { + lifecycle.Subscribe(SiloLifecycleStage.SiloActive, ct => + { + var grain = grainFactory.GetGrain("Default"); + + return grain.ActivateAsync(); + }); + } + } +} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs index 04194ae7f..343462025 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs @@ -8,120 +8,104 @@ using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; +using Orleans; +using Orleans.Concurrency; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Infrastructure.Log; using Squidex.Infrastructure.States; using Squidex.Infrastructure.Tasks; namespace Squidex.Infrastructure.EventSourcing.Grains { - public class EventConsumerGrain : DisposableObjectBase, IStatefulObject, IEventSubscriber + public class EventConsumerGrain : Grain, IEventConsumerGrain { + private readonly EventConsumerFactory eventConsumerFactory; private readonly IEventDataFormatter eventDataFormatter; private readonly IEventStore eventStore; private readonly ISemanticLog log; - private readonly SingleThreadedDispatcher dispatcher = new SingleThreadedDispatcher(1); + private readonly IPersistence persistence; + private TaskScheduler scheduler; private IEventSubscription currentSubscription; private IEventConsumer eventConsumer; - private IPersistence persistence; private EventConsumerState state = new EventConsumerState(); public EventConsumerGrain( + EventConsumerFactory eventConsumerFactory, + IStore store, IEventStore eventStore, IEventDataFormatter eventDataFormatter, ISemanticLog log) + : this (eventConsumerFactory, store, eventStore, eventDataFormatter, null, null, log) + { + } + + protected EventConsumerGrain( + EventConsumerFactory eventConsumerFactory, + IStore store, + IEventStore eventStore, + IEventDataFormatter eventDataFormatter, + IGrainIdentity identity, + IGrainRuntime runtime, + ISemanticLog log) { Guard.NotNull(log, nameof(log)); + Guard.NotNull(store, nameof(store)); Guard.NotNull(eventStore, nameof(eventStore)); Guard.NotNull(eventDataFormatter, nameof(eventDataFormatter)); + Guard.NotNull(eventConsumerFactory, nameof(eventConsumerFactory)); this.log = log; this.eventStore = eventStore; this.eventDataFormatter = eventDataFormatter; - } + this.eventConsumerFactory = eventConsumerFactory; - protected override void DisposeObject(bool disposing) - { - if (disposing) - { - dispatcher.StopAndWaitAsync().Wait(); - } + persistence = store.WithSnapshots(this.GetPrimaryKeyString(), s => state = s); } - public Task ActivateAsync(string key, IStore store) + public override Task OnActivateAsync() { - persistence = store.WithSnapshots(key, s => state = s); + scheduler = TaskScheduler.Current; + + eventConsumer = eventConsumerFactory(this.GetPrimaryKeyString()); return persistence.ReadAsync(); } protected virtual IEventSubscription CreateSubscription(IEventStore eventStore, string streamFilter, string position) { - return new RetrySubscription(eventStore, this, streamFilter, position); - } - - public virtual EventConsumerInfo GetState() - { - return state.ToInfo(this.eventConsumer.Name); - } - - public virtual void Stop() - { - dispatcher.DispatchAsync(HandleStopAsync).Forget(); - } - - public virtual void Start() - { - dispatcher.DispatchAsync(HandleStartAsync).Forget(); - } - - public virtual void Reset() - { - dispatcher.DispatchAsync(HandleResetAsync).Forget(); - } - - public virtual void Activate(IEventConsumer eventConsumer) - { - Guard.NotNull(eventConsumer, nameof(eventConsumer)); - - dispatcher.DispatchAsync(() => HandleSetupAsync(eventConsumer)).Forget(); + return new RetrySubscription(eventStore, new WrapperSubscription(this.AsReference(), scheduler), streamFilter, position); } - private Task HandleSetupAsync(IEventConsumer consumer) + public virtual Task> GetStateAsync() { - eventConsumer = consumer; - - if (!state.IsStopped) - { - Subscribe(state.Position); - } - - return TaskHelper.Done; + return Task.FromResult(state.ToInfo(this.eventConsumer.Name).AsImmutable()); } - private Task HandleEventAsync(IEventSubscription subscription, StoredEvent storedEvent) + public Task OnEventAsync(Immutable subscription, Immutable storedEvent) { - if (subscription != currentSubscription) + if (subscription.Value != currentSubscription) { return TaskHelper.Done; } return DoAndUpdateStateAsync(async () => { - var @event = ParseKnownEvent(storedEvent); + var @event = ParseKnownEvent(storedEvent.Value); if (@event != null) { await DispatchConsumerAsync(@event); } - state = state.Handled(storedEvent.EventPosition); + state = state.Handled(storedEvent.Value.EventPosition); }); } - private Task HandleErrorAsync(IEventSubscription subscription, Exception exception) + public Task OnErrorAsync(Immutable subscription, Immutable exception) { - if (subscription != currentSubscription) + if (subscription.Value != currentSubscription) { return TaskHelper.Done; } @@ -130,11 +114,28 @@ namespace Squidex.Infrastructure.EventSourcing.Grains { Unsubscribe(); - state = state.Failed(exception); + state = state.Failed(exception.Value); }); } - private Task HandleStartAsync() + public Task WakeUpAsync() + { + currentSubscription?.WakeUp(); + + return TaskHelper.Done; + } + + public Task ActivateAsync() + { + if (!state.IsStopped) + { + Subscribe(state.Position); + } + + return TaskHelper.Done; + } + + public Task StartAsync() { if (!state.IsStopped) { @@ -149,7 +150,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains }); } - private Task HandleStopAsync() + public Task StopAsync() { if (state.IsStopped) { @@ -164,7 +165,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains }); } - private Task HandleResetAsync() + public Task ResetAsync() { return DoAndUpdateStateAsync(async () => { @@ -178,16 +179,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains }); } - Task IEventSubscriber.OnEventAsync(IEventSubscription subscription, StoredEvent storedEvent) - { - return dispatcher.DispatchAsync(() => HandleEventAsync(subscription, storedEvent)); - } - - Task IEventSubscriber.OnErrorAsync(IEventSubscription subscription, Exception exception) - { - return dispatcher.DispatchAsync(() => HandleErrorAsync(subscription, exception)); - } - private Task DoAndUpdateStateAsync(Action action, [CallerMemberName] string caller = null) { return DoAndUpdateStateAsync(() => { action(); return TaskHelper.Done; }, caller); diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrainManager.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrainManager.cs deleted file mode 100644 index e833aa5b4..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrainManager.cs +++ /dev/null @@ -1,90 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Squidex.Infrastructure.EventSourcing.Grains.Messages; -using Squidex.Infrastructure.States; - -namespace Squidex.Infrastructure.EventSourcing.Grains -{ - public sealed class EventConsumerGrainManager : DisposableObjectBase, IRunnable - { - private readonly IStateFactory factory; - private readonly IPubSub pubSub; - private readonly List consumers; - private readonly List subscriptions = new List(); - - public EventConsumerGrainManager(IEnumerable consumers, IPubSub pubSub, IStateFactory factory) - { - Guard.NotNull(pubSub, nameof(pubSub)); - Guard.NotNull(factory, nameof(factory)); - Guard.NotNull(consumers, nameof(consumers)); - - this.pubSub = pubSub; - this.factory = factory; - this.consumers = consumers.ToList(); - } - - public void Run() - { - var actors = new Dictionary(); - - foreach (var consumer in consumers) - { - var actor = factory.CreateAsync(consumer.Name).Result; - - actors[consumer.Name] = actor; - actor.Activate(consumer); - } - - subscriptions.Add(pubSub.Subscribe(m => - { - if (actors.TryGetValue(m.ConsumerName, out var actor)) - { - actor.Start(); - } - })); - - subscriptions.Add(pubSub.Subscribe(m => - { - if (actors.TryGetValue(m.ConsumerName, out var actor)) - { - actor.Stop(); - } - })); - - subscriptions.Add(pubSub.Subscribe(m => - { - if (actors.TryGetValue(m.ConsumerName, out var actor)) - { - actor.Reset(); - } - })); - - subscriptions.Add(pubSub.ReceiveAsync(request => - { - var states = actors.Values.Select(x => x.GetState()).ToArray(); - - return Task.FromResult(new GetStatesResponse { States = states }); - })); - } - - protected override void DisposeObject(bool disposing) - { - if (disposing) - { - foreach (var subscription in subscriptions) - { - subscription.Dispose(); - } - } - } - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs new file mode 100644 index 000000000..a18f79078 --- /dev/null +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs @@ -0,0 +1,107 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Orleans; +using Orleans.Concurrency; +using Orleans.Core; +using Orleans.Runtime; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public class EventConsumerManagerGrain : Grain, IEventConsumerManagerGrain + { + private readonly IEnumerable eventConsumers; + + public EventConsumerManagerGrain(IEnumerable eventConsumers) + : this(eventConsumers, null, null) + { + } + + protected EventConsumerManagerGrain( + IEnumerable eventConsumers, + IGrainIdentity identity, + IGrainRuntime runtime) + : base(identity, runtime) + { + Guard.NotNull(eventConsumers, nameof(eventConsumers)); + + this.eventConsumers = eventConsumers; + } + + public Task ReceiveReminder(string reminderName, TickStatus status) + { + return ActivateAsync(); + } + + public override Task OnActivateAsync() + { + DelayDeactivation(TimeSpan.FromDays(1)); + + RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); + RegisterTimer(x => ActivateAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); + + return Task.FromResult(true); + } + + public Task ActivateAsync() + { + var tasks = + eventConsumers + .Select(c => GrainFactory.GetGrain(c.Name)) + .Select(c => c.ActivateAsync()); + + return Task.WhenAll(tasks); + } + + public Task WakeUpAsync(string streamName) + { + var tasks = + eventConsumers + .Where(c => streamName == null || Regex.IsMatch(streamName, c.EventsFilter)) + .Select(c => GrainFactory.GetGrain(c.Name)) + .Select(c => c.WakeUpAsync()); + + return Task.WhenAll(tasks); + } + + public Task>> GetConsumersAsync() + { + var tasks = + eventConsumers + .Select(c => GrainFactory.GetGrain(c.Name)) + .Select(c => c.GetStateAsync()); + + return Task.WhenAll(tasks).ContinueWith(x => new Immutable>(x.Result.Select(r => r.Value).ToList())); + } + + public Task ResetAsync(string consumerName) + { + var eventConsumer = GrainFactory.GetGrain(consumerName); + + return eventConsumer.ResetAsync(); + } + + public Task StartAsync(string consumerName) + { + var eventConsumer = GrainFactory.GetGrain(consumerName); + + return eventConsumer.StartAsync(); + } + + public Task StopAsync(string consumerName) + { + var eventConsumer = GrainFactory.GetGrain(consumerName); + + return eventConsumer.StopAsync(); + } + } +} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs new file mode 100644 index 000000000..fdb330b61 --- /dev/null +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs @@ -0,0 +1,33 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Threading.Tasks; +using Orleans; +using Orleans.Concurrency; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public interface IEventConsumerGrain : IGrainWithStringKey + { + Task> GetStateAsync(); + + Task ActivateAsync(); + + Task StopAsync(); + + Task StartAsync(); + + Task ResetAsync(); + + Task WakeUpAsync(); + + Task OnEventAsync(Immutable subscription, Immutable storedEvent); + + Task OnErrorAsync(Immutable subscription, Immutable exception); + } +} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs new file mode 100644 index 000000000..549953924 --- /dev/null +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs @@ -0,0 +1,29 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Collections.Generic; +using System.Threading.Tasks; +using Orleans; +using Orleans.Concurrency; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public interface IEventConsumerManagerGrain : IGrainWithStringKey + { + Task ActivateAsync(); + + Task WakeUpAsync(string streamName); + + Task StopAsync(string consumerName); + + Task StartAsync(string consumerName); + + Task ResetAsync(string consumerName); + + Task>> GetConsumersAsync(); + } +} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesRequest.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesRequest.cs deleted file mode 100644 index d193d7ebb..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesRequest.cs +++ /dev/null @@ -1,13 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Infrastructure.EventSourcing.Grains.Messages -{ - public sealed class GetStatesRequest - { - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesResponse.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesResponse.cs deleted file mode 100644 index 922116d82..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/GetStatesResponse.cs +++ /dev/null @@ -1,14 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Infrastructure.EventSourcing.Grains.Messages -{ - public sealed class GetStatesResponse - { - public EventConsumerInfo[] States { get; set; } - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/ResetConsumerMessage.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/ResetConsumerMessage.cs deleted file mode 100644 index 012cfd2e1..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/ResetConsumerMessage.cs +++ /dev/null @@ -1,14 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Infrastructure.EventSourcing.Grains.Messages -{ - public sealed class ResetConsumerMessage - { - public string ConsumerName { get; set; } - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StartConsumerMessage.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StartConsumerMessage.cs deleted file mode 100644 index 8d8378653..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StartConsumerMessage.cs +++ /dev/null @@ -1,14 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Infrastructure.EventSourcing.Grains.Messages -{ - public sealed class StartConsumerMessage - { - public string ConsumerName { get; set; } - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StopConsumerMessage.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StopConsumerMessage.cs deleted file mode 100644 index 5a354a468..000000000 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/Messages/StopConsumerMessage.cs +++ /dev/null @@ -1,14 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Infrastructure.EventSourcing.Grains.Messages -{ - public sealed class StopConsumerMessage - { - public string ConsumerName { get; set; } - } -} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs new file mode 100644 index 000000000..4ce33f916 --- /dev/null +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using Orleans; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public sealed class OrleansEventNotifier : IEventNotifier + { + private readonly IEventConsumerManagerGrain eventConsumerManagerGrain; + + public OrleansEventNotifier(IGrainFactory factory) + { + Guard.NotNull(factory, nameof(factory)); + + eventConsumerManagerGrain = factory.GetGrain("Default"); + } + + public void NotifyEventsStored(string streamName) + { + eventConsumerManagerGrain.WakeUpAsync(streamName); + } + + public IDisposable Subscribe(Action handler) + { + return null; + } + } +} diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/WrapperSubscription.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/WrapperSubscription.cs new file mode 100644 index 000000000..012179f1f --- /dev/null +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/WrapperSubscription.cs @@ -0,0 +1,42 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Threading; +using System.Threading.Tasks; +using Orleans.Concurrency; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + internal sealed class WrapperSubscription : IEventSubscriber + { + private readonly IEventConsumerGrain grain; + private readonly TaskScheduler scheduler; + + public WrapperSubscription(IEventConsumerGrain grain, TaskScheduler scheduler) + { + this.grain = grain; + + this.scheduler = scheduler ?? TaskScheduler.Default; + } + + public Task OnEventAsync(IEventSubscription subscription, StoredEvent storedEvent) + { + return Dispatch(() => grain.OnEventAsync(subscription.AsImmutable(), storedEvent.AsImmutable())); + } + + public Task OnErrorAsync(IEventSubscription subscription, Exception exception) + { + return Dispatch(() => grain.OnErrorAsync(subscription.AsImmutable(), exception.AsImmutable())); + } + + private Task Dispatch(Func task) + { + return Task.Factory.StartNew(() => task(), CancellationToken.None, TaskCreationOptions.None, scheduler).Unwrap(); + } + } +} diff --git a/src/Squidex.Infrastructure/EventSourcing/IEventSubscription.cs b/src/Squidex.Infrastructure/EventSourcing/IEventSubscription.cs index a33b1f22b..48ead1da9 100644 --- a/src/Squidex.Infrastructure/EventSourcing/IEventSubscription.cs +++ b/src/Squidex.Infrastructure/EventSourcing/IEventSubscription.cs @@ -11,6 +11,8 @@ namespace Squidex.Infrastructure.EventSourcing { public interface IEventSubscription { + void WakeUp(); + Task StopAsync(); } } \ No newline at end of file diff --git a/src/Squidex.Infrastructure/EventSourcing/PollingSubscription.cs b/src/Squidex.Infrastructure/EventSourcing/PollingSubscription.cs index dd5fc072b..cfdb4486d 100644 --- a/src/Squidex.Infrastructure/EventSourcing/PollingSubscription.cs +++ b/src/Squidex.Infrastructure/EventSourcing/PollingSubscription.cs @@ -14,10 +14,8 @@ namespace Squidex.Infrastructure.EventSourcing { public sealed class PollingSubscription : IEventSubscription { - private readonly IEventNotifier eventNotifier; private readonly IEventStore eventStore; private readonly IEventSubscriber eventSubscriber; - private readonly IDisposable notification; private readonly CompletionTimer timer; private readonly Regex streamRegex; private readonly string streamFilter; @@ -25,17 +23,14 @@ namespace Squidex.Infrastructure.EventSourcing public PollingSubscription( IEventStore eventStore, - IEventNotifier eventNotifier, IEventSubscriber eventSubscriber, string streamFilter, string position) { Guard.NotNull(eventStore, nameof(eventStore)); - Guard.NotNull(eventNotifier, nameof(eventNotifier)); Guard.NotNull(eventSubscriber, nameof(eventSubscriber)); this.position = position; - this.eventNotifier = eventNotifier; this.eventStore = eventStore; this.eventSubscriber = eventSubscriber; this.streamFilter = streamFilter; @@ -61,20 +56,15 @@ namespace Squidex.Infrastructure.EventSourcing } } }); + } - notification = eventNotifier.Subscribe(streamName => - { - if (streamRegex.IsMatch(streamName)) - { - timer.SkipCurrentDelay(); - } - }); + public void WakeUp() + { + timer.SkipCurrentDelay(); } public Task StopAsync() { - notification?.Dispose(); - return timer.StopAsync(); } } diff --git a/src/Squidex.Infrastructure/EventSourcing/RetrySubscription.cs b/src/Squidex.Infrastructure/EventSourcing/RetrySubscription.cs index d023eead5..60a9f5679 100644 --- a/src/Squidex.Infrastructure/EventSourcing/RetrySubscription.cs +++ b/src/Squidex.Infrastructure/EventSourcing/RetrySubscription.cs @@ -57,6 +57,11 @@ namespace Squidex.Infrastructure.EventSourcing currentSubscription = null; } + public void WakeUp() + { + currentSubscription?.WakeUp(); + } + private async Task HandleEventAsync(IEventSubscription subscription, StoredEvent storedEvent) { if (subscription == currentSubscription) diff --git a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index ba723caf1..b7c609898 100644 --- a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -10,6 +10,9 @@ + + + diff --git a/src/Squidex.Infrastructure/TypeNameRegistry.cs b/src/Squidex.Infrastructure/TypeNameRegistry.cs index c000e29eb..233f5ee28 100644 --- a/src/Squidex.Infrastructure/TypeNameRegistry.cs +++ b/src/Squidex.Infrastructure/TypeNameRegistry.cs @@ -23,19 +23,14 @@ namespace Squidex.Infrastructure lock (namesByType) { - try + if (typesByName.TryGetValue(name, out var existingType) && existingType != type) { - typesByName.Add(name, type); - } - catch (ArgumentException) - { - if (typesByName[name] != type) - { - var message = $"The name '{name}' is already registered with type '{typesByName[name]}'"; + var message = $"The name '{name}' is already registered with type '{typesByName[name]}'"; - throw new ArgumentException(message, nameof(type)); - } + throw new ArgumentException(message, nameof(type)); } + + typesByName[name] = type; } return this; @@ -62,33 +57,23 @@ namespace Squidex.Infrastructure lock (namesByType) { - try - { - namesByType.Add(type, name); - } - catch (ArgumentException) + if (namesByType.TryGetValue(type, out var existingName) && existingName != name) { - if (namesByType[type] != name) - { - var message = $"The type '{type}' is already registered with name '{namesByType[type]}'"; + var message = $"The type '{type}' is already registered with name '{namesByType[type]}'"; - throw new ArgumentException(message, nameof(type)); - } + throw new ArgumentException(message, nameof(type)); } - try - { - typesByName.Add(name, type); - } - catch (ArgumentException) + namesByType[type] = name; + + if (typesByName.TryGetValue(name, out var existingType) && existingType != type) { - if (typesByName[name] != type) - { - var message = $"The name '{name}' is already registered with type '{typesByName[name]}'"; + var message = $"The name '{name}' is already registered with type '{typesByName[name]}'"; - throw new ArgumentException(message, nameof(type)); - } + throw new ArgumentException(message, nameof(type)); } + + typesByName[name] = type; } return this; diff --git a/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs b/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs index 41e232307..7e961c6ce 100644 --- a/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs +++ b/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs @@ -5,15 +5,14 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using NSwag.Annotations; +using Orleans; using Squidex.Areas.Api.Controllers.EventConsumers.Models; -using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.EventSourcing.Grains.Messages; +using Squidex.Infrastructure.EventSourcing.Grains; using Squidex.Infrastructure.Reflection; using Squidex.Pipeline; @@ -25,12 +24,12 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers [SwaggerIgnore] public sealed class EventConsumersController : ApiController { - private readonly IPubSub pubSub; + private readonly IEventConsumerManagerGrain eventConsumerManagerGrain; - public EventConsumersController(ICommandBus commandBus, IPubSub pubSub) + public EventConsumersController(ICommandBus commandBus, IClusterClient orleans) : base(commandBus) { - this.pubSub = pubSub; + eventConsumerManagerGrain = orleans.GetGrain("Default"); } [HttpGet] @@ -38,9 +37,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers [ApiCosts(0)] public async Task GetEventConsumers() { - var entities = await pubSub.RequestAsync(new GetStatesRequest(), TimeSpan.FromSeconds(2), true); + var entities = await eventConsumerManagerGrain.GetConsumersAsync(); - var models = entities.States.Select(x => SimpleMapper.Map(x, new EventConsumerDto())).ToList(); + var models = entities.Value.Select(x => SimpleMapper.Map(x, new EventConsumerDto())).ToList(); return Ok(models); } @@ -48,9 +47,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers [HttpPut] [Route("event-consumers/{name}/start/")] [ApiCosts(0)] - public IActionResult Start(string name) + public async Task Start(string name) { - pubSub.Publish(new StartConsumerMessage { ConsumerName = name }, true); + await eventConsumerManagerGrain.StartAsync(name); return NoContent(); } @@ -58,9 +57,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers [HttpPut] [Route("event-consumers/{name}/stop/")] [ApiCosts(0)] - public IActionResult Stop(string name) + public async Task Stop(string name) { - pubSub.Publish(new StopConsumerMessage { ConsumerName = name }, true); + await eventConsumerManagerGrain.StopAsync(name); return NoContent(); } @@ -68,9 +67,9 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers [HttpPut] [Route("event-consumers/{name}/reset/")] [ApiCosts(0)] - public IActionResult Reset(string name) + public async Task Reset(string name) { - pubSub.Publish(new ResetConsumerMessage { ConsumerName = name }, true); + await eventConsumerManagerGrain.ResetAsync(name); return NoContent(); } diff --git a/src/Squidex/Config/Authentication/MicrosoftHandler.cs b/src/Squidex/Config/Authentication/MicrosoftHandler.cs index c308814af..168995ad9 100644 --- a/src/Squidex/Config/Authentication/MicrosoftHandler.cs +++ b/src/Squidex/Config/Authentication/MicrosoftHandler.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication.OAuth; using Squidex.Shared.Identity; diff --git a/src/Squidex/Config/Domain/ReadServices.cs b/src/Squidex/Config/Domain/ReadServices.cs index cd3961628..97dfe5c6e 100644 --- a/src/Squidex/Config/Domain/ReadServices.cs +++ b/src/Squidex/Config/Domain/ReadServices.cs @@ -40,10 +40,6 @@ namespace Squidex.Config.Domain if (consumeEvents) { - services.AddTransient(); - - services.AddSingletonAs() - .As(); services.AddSingletonAs() .As(); } @@ -113,7 +109,7 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() + services.AddSingletonAs() .As(); services.AddSingletonAs() diff --git a/src/Squidex/Config/Orleans/ClientServices.cs b/src/Squidex/Config/Orleans/ClientServices.cs new file mode 100644 index 000000000..60dd40a81 --- /dev/null +++ b/src/Squidex/Config/Orleans/ClientServices.cs @@ -0,0 +1,41 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using Microsoft.Extensions.DependencyInjection; +using Orleans; +using Squidex.Infrastructure.EventSourcing.Grains; + +namespace Squidex.Config.Orleans +{ + public static class ClientServices + { + public static void AddAppClient(this IServiceCollection services) + { + services.AddSingletonAs(c => c.GetRequiredService()) + .As(); + + services.AddSingletonAs(c => + { + var client = new ClientBuilder() + .ConfigureApplicationParts(builder => + { + builder.AddApplicationPart(typeof(EventConsumerGrain).Assembly); + }) + .UseStaticGatewayListProvider(options => + { + options.Gateways.Add(new Uri("gwy.tcp://127.0.0.1:40000/0")); + }) + .Build(); + + client.Connect().Wait(); + + return client; + }); + } + } +} diff --git a/src/Squidex/Config/Orleans/SiloExtensions.cs b/src/Squidex/Config/Orleans/SiloExtensions.cs new file mode 100644 index 000000000..430220d07 --- /dev/null +++ b/src/Squidex/Config/Orleans/SiloExtensions.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.Extensions.Configuration; +using Orleans; +using Orleans.Hosting; +using Orleans.Runtime.Configuration; + +namespace Squidex.Config.Orleans +{ + public static class SiloExtensions + { + public static ISiloHostBuilder UseContentRoot(this ISiloHostBuilder builder, string path) + { + builder.ConfigureAppConfiguration(config => + { + config.SetBasePath(path); + }); + + return builder; + } + + public static ClusterConfiguration WithDashboard(this ClusterConfiguration config) + { + config.RegisterDashboard(); + + return config; + } + } +} diff --git a/src/Squidex/Config/Orleans/SiloServices.cs b/src/Squidex/Config/Orleans/SiloServices.cs new file mode 100644 index 000000000..577246eff --- /dev/null +++ b/src/Squidex/Config/Orleans/SiloServices.cs @@ -0,0 +1,57 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Linq; +using System.Net; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Orleans; +using Orleans.Runtime; +using Orleans.Runtime.Configuration; +using Squidex.Infrastructure.EventSourcing.Grains; + +namespace Squidex.Config.Orleans +{ + public static class SiloServices + { + public static void AddAppSiloServices(this IServiceCollection services, IConfiguration config) + { + services.AddSingletonAs() + .As>(); + + /* + var clusterConfiguration = + services.Where(x => x.ServiceType == typeof(ClusterConfiguration)) + .Select(x => x.ImplementationInstance) + .Select(x => (ClusterConfiguration)x) + .FirstOrDefault(); + + if (clusterConfiguration != null) + { + clusterConfiguration.Globals.RegisterBootstrapProvider("EventConsumers"); + + var ipConfig = config.GetRequiredValue("orleans:hostNameOrIPAddress"); + + if (ipConfig.Equals("Host", StringComparison.OrdinalIgnoreCase)) + { + ipConfig = Dns.GetHostName(); + } + else if (ipConfig.Equals("FirstIPAddressOfHost")) + { + var ips = Dns.GetHostAddressesAsync(Dns.GetHostName()).Result; + + ipConfig = ips.FirstOrDefault()?.ToString(); + } + + clusterConfiguration.Defaults.PropagateActivityId = true; + clusterConfiguration.Defaults.ProxyGatewayEndpoint = new IPEndPoint(IPAddress.Any, 40000); + clusterConfiguration.Defaults.HostNameOrIPAddress = ipConfig; + }*/ + } + } +} \ No newline at end of file diff --git a/src/Squidex/Program.cs b/src/Squidex/Program.cs index 0266f9c99..5e7392532 100644 --- a/src/Squidex/Program.cs +++ b/src/Squidex/Program.cs @@ -5,8 +5,14 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.IO; using Microsoft.AspNetCore.Hosting; +using Orleans; +using Orleans.Hosting; +using Orleans.Runtime.Configuration; +using Squidex.Config.Orleans; +using Squidex.Infrastructure.EventSourcing.Grains; using Squidex.Infrastructure.Log.Adapter; namespace Squidex @@ -15,21 +21,59 @@ namespace Squidex { public static void Main(string[] args) { - new WebHostBuilder() - .UseKestrel(k => { k.AddServerHeader = false; }) + var silo = new SiloHostBuilder() + .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333)) .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() + .ConfigureServices((context, services) => + { + services.AddAppSiloServices(context.Configuration); + services.AddAppServices(context.Configuration); + }) + .ConfigureApplicationParts(builder => + { + builder.AddApplicationPart(typeof(EventConsumerManagerGrain).Assembly); + }) .ConfigureLogging(builder => { builder.AddSemanticLog(); }) .ConfigureAppConfiguration((hostContext, builder) => { - builder.AddAppConfiguration(hostContext.HostingEnvironment.EnvironmentName, args); + builder.AddAppConfiguration(GetEnvironment(), args); }) - .Build() - .Run(); + .Build(); + + silo.StartAsync().Wait(); + + try + { + new WebHostBuilder() + .UseKestrel(k => { k.AddServerHeader = false; }) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup() + .ConfigureLogging(builder => + { + builder.AddSemanticLog(); + }) + .ConfigureAppConfiguration((hostContext, builder) => + { + builder.AddAppConfiguration(hostContext.HostingEnvironment.EnvironmentName, args); + }) + .Build() + .Run(); + } + finally + { + silo.StopAsync().Wait(); + } + } + + private static string GetEnvironment() + { + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + + return environment ?? "Development"; } } } diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index 6a2adcef5..1f408129b 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -70,6 +70,8 @@ + + @@ -77,6 +79,7 @@ + diff --git a/src/Squidex/WebStartup.cs b/src/Squidex/WebStartup.cs index 7632fba3a..08d81bf1b 100644 --- a/src/Squidex/WebStartup.cs +++ b/src/Squidex/WebStartup.cs @@ -15,6 +15,7 @@ using Squidex.Areas.Frontend; using Squidex.Areas.IdentityServer; using Squidex.Areas.Portal; using Squidex.Config.Domain; +using Squidex.Config.Orleans; using Squidex.Config.Web; namespace Squidex @@ -30,6 +31,7 @@ namespace Squidex public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddAppClient(); services.AddAppServices(configuration); return services.BuildServiceProvider(); diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs index 88571afab..1a35c41a2 100644 --- a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs +++ b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs @@ -9,7 +9,6 @@ using System; using System.Threading.Tasks; using FakeItEasy; using FluentAssertions; -using Squidex.Infrastructure.EventSourcing.Grains.Messages; using Squidex.Infrastructure.States; using Xunit; @@ -25,7 +24,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains private readonly IPubSub pubSub = new InMemoryPubSub(); private readonly string consumerName1 = "Consumer1"; private readonly string consumerName2 = "Consumer2"; - private readonly EventConsumerGrainManager sut; + private readonly EventConsumerManagerGrain sut; public EventConsumerManagerTests() { @@ -35,7 +34,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains A.CallTo(() => factory.CreateAsync(consumerName1)).Returns(actor1); A.CallTo(() => factory.CreateAsync(consumerName2)).Returns(actor2); - sut = new EventConsumerGrainManager(new IEventConsumer[] { consumer1, consumer2 }, pubSub, factory); + sut = new EventConsumerManagerGrain(new IEventConsumer[] { consumer1, consumer2 }, pubSub, factory); } [Fact] From 80dc7c12a664a87a9cc5e1f6917288798cfbdf97 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 12 Feb 2018 11:46:51 +0100 Subject: [PATCH 02/28] Continued with basic setup. --- .../EventSourcing/MongoEvent.cs | 5 +- .../EventSourcing/MongoEventStore_Reader.cs | 2 +- .../MongoDb/BsonJsonConvention.cs | 12 --- .../Commands/DomainObjectBase.cs | 2 +- .../Grains/EventConsumerBootstrap.cs | 12 ++- .../Grains/EventConsumerGrain.cs | 7 +- .../Grains/EventConsumerManagerGrain.cs | 4 +- .../Grains/OrleansEventNotifier.cs | 12 ++- src/Squidex.Infrastructure/States/IStore.cs | 6 +- .../States/Persistence.cs | 6 +- ...Key}.cs => Persistence{TSnapshot,TKey}.cs} | 16 ++-- .../States/StateFactory.cs | 4 +- src/Squidex.Infrastructure/States/Store.cs | 18 ++-- .../States/StoreExtensions.cs | 43 +++++++-- src/Squidex/AppConfiguration.cs | 26 ------ .../IdentityServer/Config/LazyClientStore.cs | 3 +- ...rleansDashboardAuthenticationMiddleware.cs | 43 +++++++++ src/Squidex/Areas/OrleansDashboard/Startup.cs | 27 ++++++ src/Squidex/Config/Constants.cs | 2 + .../Config/Domain/InfrastructureServices.cs | 2 + src/Squidex/Config/Domain/ReadServices.cs | 8 +- src/Squidex/Config/Orleans/ClientServices.cs | 41 --------- src/Squidex/Config/Orleans/ClientWrapper.cs | 50 +++++++++++ src/Squidex/Config/Orleans/OrleansServices.cs | 40 +++++++++ src/Squidex/Config/Orleans/SiloServices.cs | 32 +++++-- src/Squidex/Config/Orleans/SiloWrapper.cs | 90 +++++++++++++++++++ src/Squidex/Program.cs | 59 +++--------- src/Squidex/Squidex.csproj | 1 + src/Squidex/WebStartup.cs | 5 +- src/Squidex/appsettings.json | 10 ++- 30 files changed, 402 insertions(+), 186 deletions(-) rename src/Squidex.Infrastructure/States/{Persistence{TOwner,TSnapshot,TKey}.cs => Persistence{TSnapshot,TKey}.cs} (93%) delete mode 100644 src/Squidex/AppConfiguration.cs create mode 100644 src/Squidex/Areas/OrleansDashboard/Middlewares/OrleansDashboardAuthenticationMiddleware.cs create mode 100644 src/Squidex/Areas/OrleansDashboard/Startup.cs delete mode 100644 src/Squidex/Config/Orleans/ClientServices.cs create mode 100644 src/Squidex/Config/Orleans/ClientWrapper.cs create mode 100644 src/Squidex/Config/Orleans/OrleansServices.cs create mode 100644 src/Squidex/Config/Orleans/SiloWrapper.cs diff --git a/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEvent.cs b/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEvent.cs index 62d15ca20..22fb105dc 100644 --- a/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEvent.cs +++ b/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEvent.cs @@ -7,6 +7,7 @@ using MongoDB.Bson.Serialization.Attributes; using Newtonsoft.Json.Linq; +using Squidex.Infrastructure.MongoDb; namespace Squidex.Infrastructure.EventSourcing { @@ -16,7 +17,7 @@ namespace Squidex.Infrastructure.EventSourcing [BsonRequired] public string Payload { get; set; } - [BsonElement] + [BsonJson] [BsonRequired] public JToken Metadata { get; set; } @@ -26,7 +27,7 @@ namespace Squidex.Infrastructure.EventSourcing public static MongoEvent FromEventData(EventData data) { - return new MongoEvent { Type = data.Type, Metadata = data.Metadata, Payload = data.ToString() }; + return new MongoEvent { Type = data.Type, Metadata = data.Metadata, Payload = data.Payload.ToString() }; } public EventData ToEventData() diff --git a/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore_Reader.cs b/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore_Reader.cs index eed2d0bce..8160252f3 100644 --- a/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore_Reader.cs +++ b/src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEventStore_Reader.cs @@ -27,7 +27,7 @@ namespace Squidex.Infrastructure.EventSourcing Guard.NotNull(subscriber, nameof(subscriber)); Guard.NotNullOrEmpty(streamFilter, nameof(streamFilter)); - return new PollingSubscription(this, notifier, subscriber, streamFilter, position); + return new PollingSubscription(this, subscriber, streamFilter, position); } public async Task> QueryAsync(string streamName, long streamPosition = 0) diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs index 2a8d6e572..4326838e1 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs @@ -32,18 +32,6 @@ namespace Squidex.Infrastructure.MongoDb memberMap.SetSerializer((IBsonSerializer)bsonSerializer); } - else if (memberMap.MemberType == typeof(JToken)) - { - memberMap.SetSerializer(JTokenSerializer.Instance); - } - else if (memberMap.MemberType == typeof(JObject)) - { - memberMap.SetSerializer(JTokenSerializer.Instance); - } - else if (memberMap.MemberType == typeof(JValue)) - { - memberMap.SetSerializer(JTokenSerializer.Instance); - } }); ConventionRegistry.Register("json", pack, t => true); diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs b/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs index c4d0e0ef4..bfd50b19c 100644 --- a/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs +++ b/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs @@ -34,7 +34,7 @@ namespace Squidex.Infrastructure.Commands { id = key; - persistence = store.WithSnapshotsAndEventSourcing(key, ApplySnapshot, ApplyEvent); + persistence = store.WithSnapshotsAndEventSourcing(GetType(), key, ApplySnapshot, ApplyEvent); return persistence.ReadAsync(); } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs index 40425f5e7..030da02e9 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs @@ -7,10 +7,11 @@ using Orleans; using Orleans.Runtime; +using Squidex.Infrastructure.Tasks; namespace Squidex.Infrastructure.EventSourcing.Grains { - public sealed class EventConsumerBootstrap : ILifecycleParticipant + public sealed class EventConsumerBootstrap : IRunnable { private readonly IGrainFactory grainFactory; @@ -21,14 +22,11 @@ namespace Squidex.Infrastructure.EventSourcing.Grains this.grainFactory = grainFactory; } - public void Participate(ISiloLifecycle lifecycle) + public void Run() { - lifecycle.Subscribe(SiloLifecycleStage.SiloActive, ct => - { - var grain = grainFactory.GetGrain("Default"); + var grain = grainFactory.GetGrain("Default"); - return grain.ActivateAsync(); - }); + grain.ActivateAsync().Forget(); } } } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs index 343462025..9635cd146 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs @@ -21,11 +21,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains public class EventConsumerGrain : Grain, IEventConsumerGrain { private readonly EventConsumerFactory eventConsumerFactory; + private readonly IStore store; private readonly IEventDataFormatter eventDataFormatter; private readonly IEventStore eventStore; private readonly ISemanticLog log; - private readonly IPersistence persistence; private TaskScheduler scheduler; + private IPersistence persistence; private IEventSubscription currentSubscription; private IEventConsumer eventConsumer; private EventConsumerState state = new EventConsumerState(); @@ -61,7 +62,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains this.eventDataFormatter = eventDataFormatter; this.eventConsumerFactory = eventConsumerFactory; - persistence = store.WithSnapshots(this.GetPrimaryKeyString(), s => state = s); + this.store = store; } public override Task OnActivateAsync() @@ -70,6 +71,8 @@ namespace Squidex.Infrastructure.EventSourcing.Grains eventConsumer = eventConsumerFactory(this.GetPrimaryKeyString()); + persistence = store.WithSnapshots(this.GetPrimaryKeyString(), s => state = s); + return persistence.ReadAsync(); } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs index a18f79078..77d3f40a9 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs @@ -46,8 +46,8 @@ namespace Squidex.Infrastructure.EventSourcing.Grains { DelayDeactivation(TimeSpan.FromDays(1)); - RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); - RegisterTimer(x => ActivateAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); + // RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); + // RegisterTimer(x => ActivateAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); return Task.FromResult(true); } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs index 4ce33f916..b68abde53 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs @@ -10,20 +10,26 @@ using Orleans; namespace Squidex.Infrastructure.EventSourcing.Grains { - public sealed class OrleansEventNotifier : IEventNotifier + public sealed class OrleansEventNotifier : IEventNotifier, IInitializable { - private readonly IEventConsumerManagerGrain eventConsumerManagerGrain; + private readonly IGrainFactory factory; + private IEventConsumerManagerGrain eventConsumerManagerGrain; public OrleansEventNotifier(IGrainFactory factory) { Guard.NotNull(factory, nameof(factory)); + this.factory = factory; + } + + public void Initialize() + { eventConsumerManagerGrain = factory.GetGrain("Default"); } public void NotifyEventsStored(string streamName) { - eventConsumerManagerGrain.WakeUpAsync(streamName); + eventConsumerManagerGrain?.WakeUpAsync(streamName); } public IDisposable Subscribe(Action handler) diff --git a/src/Squidex.Infrastructure/States/IStore.cs b/src/Squidex.Infrastructure/States/IStore.cs index 7ac2c6dea..1ba437fde 100644 --- a/src/Squidex.Infrastructure/States/IStore.cs +++ b/src/Squidex.Infrastructure/States/IStore.cs @@ -13,10 +13,10 @@ namespace Squidex.Infrastructure.States { public interface IStore { - IPersistence WithEventSourcing(TKey key, Func, Task> applyEvent); + IPersistence WithEventSourcing(Type owner, TKey key, Func, Task> applyEvent); - IPersistence WithSnapshots(TKey key, Func applySnapshot); + IPersistence WithSnapshots(Type owner, TKey key, Func applySnapshot); - IPersistence WithSnapshotsAndEventSourcing(TKey key, Func applySnapshot, Func, Task> applyEvent); + IPersistence WithSnapshotsAndEventSourcing(Type owner, TKey key, Func applySnapshot, Func, Task> applyEvent); } } diff --git a/src/Squidex.Infrastructure/States/Persistence.cs b/src/Squidex.Infrastructure/States/Persistence.cs index 92dd38738..5c0d79037 100644 --- a/src/Squidex.Infrastructure/States/Persistence.cs +++ b/src/Squidex.Infrastructure/States/Persistence.cs @@ -11,15 +11,15 @@ using Squidex.Infrastructure.EventSourcing; namespace Squidex.Infrastructure.States { - internal sealed class Persistence : Persistence, IPersistence + internal sealed class Persistence : Persistence, IPersistence { - public Persistence(TKey ownerKey, + public Persistence(TKey ownerKey, Type ownerType, IEventStore eventStore, IEventDataFormatter eventDataFormatter, ISnapshotStore snapshotStore, IStreamNameResolver streamNameResolver, Func, Task> applyEvent) - : base(ownerKey, eventStore, eventDataFormatter, snapshotStore, streamNameResolver, PersistenceMode.EventSourcing, null, applyEvent) + : base(ownerKey, ownerType, eventStore, eventDataFormatter, snapshotStore, streamNameResolver, PersistenceMode.EventSourcing, null, applyEvent) { } } diff --git a/src/Squidex.Infrastructure/States/Persistence{TOwner,TSnapshot,TKey}.cs b/src/Squidex.Infrastructure/States/Persistence{TSnapshot,TKey}.cs similarity index 93% rename from src/Squidex.Infrastructure/States/Persistence{TOwner,TSnapshot,TKey}.cs rename to src/Squidex.Infrastructure/States/Persistence{TSnapshot,TKey}.cs index cb0900aed..ea8b50d1e 100644 --- a/src/Squidex.Infrastructure/States/Persistence{TOwner,TSnapshot,TKey}.cs +++ b/src/Squidex.Infrastructure/States/Persistence{TSnapshot,TKey}.cs @@ -15,9 +15,10 @@ using Squidex.Infrastructure.EventSourcing; namespace Squidex.Infrastructure.States { - internal class Persistence : IPersistence + internal class Persistence : IPersistence { private readonly TKey ownerKey; + private readonly Type ownerType; private readonly ISnapshotStore snapshotStore; private readonly IStreamNameResolver streamNameResolver; private readonly IEventStore eventStore; @@ -34,7 +35,7 @@ namespace Squidex.Infrastructure.States get { return version; } } - public Persistence(TKey ownerKey, + public Persistence(TKey ownerKey, Type ownerType, IEventStore eventStore, IEventDataFormatter eventDataFormatter, ISnapshotStore snapshotStore, @@ -44,6 +45,7 @@ namespace Squidex.Infrastructure.States Func, Task> applyEvent) { this.ownerKey = ownerKey; + this.ownerType = ownerType; this.applyState = applyState; this.applyEvent = applyEvent; this.eventStore = eventStore; @@ -67,11 +69,11 @@ namespace Squidex.Infrastructure.States { if (version == EtagVersion.Empty) { - throw new DomainObjectNotFoundException(ownerKey.ToString(), typeof(TOwner)); + throw new DomainObjectNotFoundException(ownerKey.ToString(), ownerType); } else { - throw new DomainObjectVersionException(ownerKey.ToString(), typeof(TOwner), version, expectedVersion); + throw new DomainObjectVersionException(ownerKey.ToString(), ownerType, version, expectedVersion); } } } @@ -134,7 +136,7 @@ namespace Squidex.Infrastructure.States } catch (InconsistentStateException ex) { - throw new DomainObjectVersionException(ownerKey.ToString(), typeof(TOwner), ex.CurrentVersion, ex.ExpectedVersion); + throw new DomainObjectVersionException(ownerKey.ToString(), ownerType, ex.CurrentVersion, ex.ExpectedVersion); } versionSnapshot = newVersion; @@ -164,7 +166,7 @@ namespace Squidex.Infrastructure.States } catch (WrongEventVersionException ex) { - throw new DomainObjectVersionException(ownerKey.ToString(), typeof(TOwner), ex.CurrentVersion, ex.ExpectedVersion); + throw new DomainObjectVersionException(ownerKey.ToString(), ownerType, ex.CurrentVersion, ex.ExpectedVersion); } versionEvents += eventArray.Length; @@ -180,7 +182,7 @@ namespace Squidex.Infrastructure.States private string GetStreamName() { - return streamNameResolver.GetStreamName(typeof(TOwner), ownerKey.ToString()); + return streamNameResolver.GetStreamName(ownerType, ownerKey.ToString()); } private bool UseSnapshots() diff --git a/src/Squidex.Infrastructure/States/StateFactory.cs b/src/Squidex.Infrastructure/States/StateFactory.cs index 85b9977b4..9aea78534 100644 --- a/src/Squidex.Infrastructure/States/StateFactory.cs +++ b/src/Squidex.Infrastructure/States/StateFactory.cs @@ -94,7 +94,7 @@ namespace Squidex.Infrastructure.States { Guard.NotNull(key, nameof(key)); - var stateStore = new Store(eventStore, eventDataFormatter, services, streamNameResolver); + var stateStore = new Store(eventStore, eventDataFormatter, services, streamNameResolver); var state = (T)services.GetService(typeof(T)); await state.ActivateAsync(key, stateStore); @@ -124,7 +124,7 @@ namespace Squidex.Infrastructure.States } var state = (T)services.GetService(typeof(T)); - var stateStore = new Store(eventStore, eventDataFormatter, services, streamNameResolver); + var stateStore = new Store(eventStore, eventDataFormatter, services, streamNameResolver); stateObj = new ObjectHolder(state, key, stateStore); diff --git a/src/Squidex.Infrastructure/States/Store.cs b/src/Squidex.Infrastructure/States/Store.cs index 2d1daa69c..a3d6b1bc6 100644 --- a/src/Squidex.Infrastructure/States/Store.cs +++ b/src/Squidex.Infrastructure/States/Store.cs @@ -11,7 +11,7 @@ using Squidex.Infrastructure.EventSourcing; namespace Squidex.Infrastructure.States { - internal sealed class Store : IStore + public sealed class Store : IStore { private readonly IServiceProvider services; private readonly IStreamNameResolver streamNameResolver; @@ -30,32 +30,32 @@ namespace Squidex.Infrastructure.States this.streamNameResolver = streamNameResolver; } - public IPersistence WithSnapshots(TKey key, Func applySnapshot) + public IPersistence WithSnapshots(Type owner, TKey key, Func applySnapshot) { - return CreatePersistence(key, PersistenceMode.Snapshots, applySnapshot, null); + return CreatePersistence(owner, key, PersistenceMode.Snapshots, applySnapshot, null); } - public IPersistence WithSnapshotsAndEventSourcing(TKey key, Func applySnapshot, Func, Task> applyEvent) + public IPersistence WithSnapshotsAndEventSourcing(Type owner, TKey key, Func applySnapshot, Func, Task> applyEvent) { - return CreatePersistence(key, PersistenceMode.SnapshotsAndEventSourcing, applySnapshot, applyEvent); + return CreatePersistence(owner, key, PersistenceMode.SnapshotsAndEventSourcing, applySnapshot, applyEvent); } - public IPersistence WithEventSourcing(TKey key, Func, Task> applyEvent) + public IPersistence WithEventSourcing(Type owner, TKey key, Func, Task> applyEvent) { Guard.NotDefault(key, nameof(key)); var snapshotStore = (ISnapshotStore)services.GetService(typeof(ISnapshotStore)); - return new Persistence(key, eventStore, eventDataFormatter, snapshotStore, streamNameResolver, applyEvent); + return new Persistence(key, owner, eventStore, eventDataFormatter, snapshotStore, streamNameResolver, applyEvent); } - private IPersistence CreatePersistence(TKey key, PersistenceMode mode, Func applySnapshot, Func, Task> applyEvent) + private IPersistence CreatePersistence(Type owner, TKey key, PersistenceMode mode, Func applySnapshot, Func, Task> applyEvent) { Guard.NotDefault(key, nameof(key)); var snapshotStore = (ISnapshotStore)services.GetService(typeof(ISnapshotStore)); - return new Persistence(key, eventStore, eventDataFormatter, snapshotStore, streamNameResolver, mode, applySnapshot, applyEvent); + return new Persistence(key, owner, eventStore, eventDataFormatter, snapshotStore, streamNameResolver, mode, applySnapshot, applyEvent); } } } diff --git a/src/Squidex.Infrastructure/States/StoreExtensions.cs b/src/Squidex.Infrastructure/States/StoreExtensions.cs index 5a4dec34b..3cee24593 100644 --- a/src/Squidex.Infrastructure/States/StoreExtensions.cs +++ b/src/Squidex.Infrastructure/States/StoreExtensions.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using System.Threading.Tasks; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Tasks; @@ -13,19 +14,49 @@ namespace Squidex.Infrastructure.States { public static class StoreExtensions { - public static IPersistence WithEventSourcing(this IStore store, TKey key, Action> applyEvent) + public static IPersistence WithEventSourcing(this IStore store, TKey key, Func, Task> applyEvent) { - return store.WithEventSourcing(key, applyEvent.ToAsync()); + return store.WithEventSourcing(typeof(TOwner), key, applyEvent); } - public static IPersistence WithSnapshots(this IStore store, TKey key, Action applySnapshot) + public static IPersistence WithSnapshots(this IStore store, TKey key, Func applySnapshot) { - return store.WithSnapshots(key, applySnapshot.ToAsync()); + return store.WithSnapshots(typeof(TOwner), key, applySnapshot); } - public static IPersistence WithSnapshotsAndEventSourcing(this IStore store, TKey key, Action applySnapshot, Action> applyEvent) + public static IPersistence WithSnapshotsAndEventSourcing(this IStore store, TKey key, Func applySnapshot, Func, Task> applyEvent) { - return store.WithSnapshotsAndEventSourcing(key, applySnapshot.ToAsync(), applyEvent.ToAsync()); + return store.WithSnapshotsAndEventSourcing(typeof(TOwner), key, applySnapshot, applyEvent); + } + + public static IPersistence WithEventSourcing(this IStore store, Type owner, TKey key, Action> applyEvent) + { + return store.WithEventSourcing(owner, key, applyEvent.ToAsync()); + } + + public static IPersistence WithSnapshots(this IStore store, Type owner, TKey key, Action applySnapshot) + { + return store.WithSnapshots(owner, key, applySnapshot.ToAsync()); + } + + public static IPersistence WithSnapshotsAndEventSourcing(this IStore store, Type owner, TKey key, Action applySnapshot, Action> applyEvent) + { + return store.WithSnapshotsAndEventSourcing(owner, key, applySnapshot.ToAsync(), applyEvent.ToAsync()); + } + + public static IPersistence WithEventSourcing(this IStore store, TKey key, Action> applyEvent) + { + return store.WithEventSourcing(typeof(TOwner), key, applyEvent.ToAsync()); + } + + public static IPersistence WithSnapshots(this IStore store, TKey key, Action applySnapshot) + { + return store.WithSnapshots(typeof(TOwner), key, applySnapshot.ToAsync()); + } + + public static IPersistence WithSnapshotsAndEventSourcing(this IStore store, TKey key, Action applySnapshot, Action> applyEvent) + { + return store.WithSnapshotsAndEventSourcing(typeof(TOwner), key, applySnapshot.ToAsync(), applyEvent.ToAsync()); } } } diff --git a/src/Squidex/AppConfiguration.cs b/src/Squidex/AppConfiguration.cs deleted file mode 100644 index 6c707bafb..000000000 --- a/src/Squidex/AppConfiguration.cs +++ /dev/null @@ -1,26 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Microsoft.Extensions.Configuration; - -namespace Squidex -{ - public static class AppConfiguration - { - public static void AddAppConfiguration(this IConfigurationBuilder builder, string environmentName, string[] args) - { - builder.Sources.Clear(); - - builder.AddJsonFile("appsettings.json", true, true); - builder.AddJsonFile($"appsettings.{environmentName}.json", true); - - builder.AddEnvironmentVariables(); - - builder.AddCommandLine(args); - } - } -} diff --git a/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs b/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs index 24b5e1e93..aeea54e9c 100644 --- a/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs +++ b/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs @@ -130,7 +130,8 @@ namespace Squidex.Areas.IdentityServer.Config ClientSecrets = new List { new Secret(Constants.InternalClientSecret) }, RedirectUris = new List { - urlsOptions.BuildUrl($"{Constants.PortalPrefix}/signin-oidc", false) + urlsOptions.BuildUrl($"{Constants.PortalPrefix}/signin-oidc", false), + urlsOptions.BuildUrl($"{Constants.OrleansPrefix}/signin-oidc", false) }, AccessTokenLifetime = (int)TimeSpan.FromDays(30).TotalSeconds, AllowedGrantTypes = GrantTypes.ImplicitAndClientCredentials, diff --git a/src/Squidex/Areas/OrleansDashboard/Middlewares/OrleansDashboardAuthenticationMiddleware.cs b/src/Squidex/Areas/OrleansDashboard/Middlewares/OrleansDashboardAuthenticationMiddleware.cs new file mode 100644 index 000000000..db67abdd3 --- /dev/null +++ b/src/Squidex/Areas/OrleansDashboard/Middlewares/OrleansDashboardAuthenticationMiddleware.cs @@ -0,0 +1,43 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Authentication.OpenIdConnect; +using Microsoft.AspNetCore.Http; +using Squidex.Shared.Identity; + +namespace Squidex.Areas.OrleansDashboard.Middlewares +{ + public sealed class OrleansDashboardAuthenticationMiddleware + { + private readonly RequestDelegate next; + + public OrleansDashboardAuthenticationMiddleware(RequestDelegate next) + { + this.next = next; + } + + public async Task Invoke(HttpContext context) + { + var authentication = await context.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme); + + if (!authentication.Succeeded || !authentication.Principal.IsInRole(SquidexRoles.Administrator)) + { + await context.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties + { + RedirectUri = context.Request.PathBase + context.Request.Path + }); + } + else + { + await next(context); + } + } + } +} diff --git a/src/Squidex/Areas/OrleansDashboard/Startup.cs b/src/Squidex/Areas/OrleansDashboard/Startup.cs new file mode 100644 index 000000000..d8b5da6f8 --- /dev/null +++ b/src/Squidex/Areas/OrleansDashboard/Startup.cs @@ -0,0 +1,27 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.AspNetCore.Builder; +using Orleans; +using Squidex.Areas.OrleansDashboard.Middlewares; +using Squidex.Config; + +namespace Squidex.Areas.OrleansDashboard +{ + public static class Startup + { + public static void ConfigureOrleansDashboard(this IApplicationBuilder app) + { + app.Map(Constants.OrleansPrefix, orleansApp => + { + orleansApp.UseAuthentication(); + orleansApp.UseMiddleware(); + orleansApp.UseOrleansDashboard(); + }); + } + } +} diff --git a/src/Squidex/Config/Constants.cs b/src/Squidex/Config/Constants.cs index 9c97c3d20..bd08faef8 100644 --- a/src/Squidex/Config/Constants.cs +++ b/src/Squidex/Config/Constants.cs @@ -17,6 +17,8 @@ namespace Squidex.Config public static readonly string ApiScope = "squidex-api"; + public static readonly string OrleansPrefix = "/orleans"; + public static readonly string PortalPrefix = "/portal"; public static readonly string RoleScope = "role"; diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index 9a182bf87..0b9e57ac2 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -94,6 +94,8 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .AsSelf(); + + services.AddSingleton(typeof(IStore<>), typeof(Store<>)); } } } diff --git a/src/Squidex/Config/Domain/ReadServices.cs b/src/Squidex/Config/Domain/ReadServices.cs index 1ce8db5b4..f1d5c81bf 100644 --- a/src/Squidex/Config/Domain/ReadServices.cs +++ b/src/Squidex/Config/Domain/ReadServices.cs @@ -44,6 +44,9 @@ namespace Squidex.Config.Domain .As(); services.AddSingletonAs() .As(); + + services.AddSingletonAs() + .As(); } var exposeSourceUrl = config.GetOptionalValue("assetStore:exposeSourceUrl", true); @@ -55,8 +58,7 @@ namespace Squidex.Config.Domain .As(); services.AddSingletonAs() - .As() - .As(); + .As().As(); services.AddSingletonAs(c => c.GetService>()?.Value?.Plans.OrEmpty()); @@ -112,7 +114,7 @@ namespace Squidex.Config.Domain .As(); services.AddSingletonAs() - .As(); + .As().As(); services.AddSingletonAs() .As(); diff --git a/src/Squidex/Config/Orleans/ClientServices.cs b/src/Squidex/Config/Orleans/ClientServices.cs deleted file mode 100644 index 60dd40a81..000000000 --- a/src/Squidex/Config/Orleans/ClientServices.cs +++ /dev/null @@ -1,41 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using Microsoft.Extensions.DependencyInjection; -using Orleans; -using Squidex.Infrastructure.EventSourcing.Grains; - -namespace Squidex.Config.Orleans -{ - public static class ClientServices - { - public static void AddAppClient(this IServiceCollection services) - { - services.AddSingletonAs(c => c.GetRequiredService()) - .As(); - - services.AddSingletonAs(c => - { - var client = new ClientBuilder() - .ConfigureApplicationParts(builder => - { - builder.AddApplicationPart(typeof(EventConsumerGrain).Assembly); - }) - .UseStaticGatewayListProvider(options => - { - options.Gateways.Add(new Uri("gwy.tcp://127.0.0.1:40000/0")); - }) - .Build(); - - client.Connect().Wait(); - - return client; - }); - } - } -} diff --git a/src/Squidex/Config/Orleans/ClientWrapper.cs b/src/Squidex/Config/Orleans/ClientWrapper.cs new file mode 100644 index 000000000..59635c2e1 --- /dev/null +++ b/src/Squidex/Config/Orleans/ClientWrapper.cs @@ -0,0 +1,50 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using Orleans; +using Orleans.Runtime.Configuration; +using Squidex.Infrastructure; + +namespace Squidex.Config.Orleans +{ + public sealed class ClientWrapper : IInitializable, IDisposable + { + private readonly IClusterClient client; + + public IClusterClient Client + { + get { return client; } + } + + public ClientWrapper() + { + client = new ClientBuilder() + .UseConfiguration(ClientConfiguration.LocalhostSilo()) + .UseDashboard() + .ConfigureApplicationParts(builder => + { + builder.AddApplicationPart(SquidexInfrastructure.Assembly); + }) + .UseStaticGatewayListProvider(options => + { + options.Gateways.Add(new Uri("gwy.tcp://127.0.0.1:40000/0")); + }) + .Build(); + } + + public void Initialize() + { + client.Connect().Wait(); + } + + public void Dispose() + { + client.Close().Wait(); + } + } +} diff --git a/src/Squidex/Config/Orleans/OrleansServices.cs b/src/Squidex/Config/Orleans/OrleansServices.cs new file mode 100644 index 000000000..8fa4f34c0 --- /dev/null +++ b/src/Squidex/Config/Orleans/OrleansServices.cs @@ -0,0 +1,40 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.Extensions.DependencyInjection; +using Orleans; +using Squidex.Infrastructure; + +namespace Squidex.Config.Orleans +{ + public static class OrleansServices + { + public static void AddOrleansSilo(this IServiceCollection services) + { + services.AddSingletonAs() + .As(); + } + + public static void AddOrleansClient(this IServiceCollection services) + { + services.AddServicesForSelfHostedDashboard(null, options => + { + options.HideTrace = true; + }); + + services.AddSingletonAs() + .As() + .AsSelf(); + + services.AddSingletonAs(c => c.GetRequiredService().Client) + .As(); + + services.AddSingletonAs(c => c.GetRequiredService().Client) + .As(); + } + } +} diff --git a/src/Squidex/Config/Orleans/SiloServices.cs b/src/Squidex/Config/Orleans/SiloServices.cs index 577246eff..10c27282e 100644 --- a/src/Squidex/Config/Orleans/SiloServices.cs +++ b/src/Squidex/Config/Orleans/SiloServices.cs @@ -13,6 +13,7 @@ using Microsoft.Extensions.DependencyInjection; using Orleans; using Orleans.Runtime; using Orleans.Runtime.Configuration; +using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing.Grains; namespace Squidex.Config.Orleans @@ -21,10 +22,6 @@ namespace Squidex.Config.Orleans { public static void AddAppSiloServices(this IServiceCollection services, IConfiguration config) { - services.AddSingletonAs() - .As>(); - - /* var clusterConfiguration = services.Where(x => x.ServiceType == typeof(ClusterConfiguration)) .Select(x => x.ImplementationInstance) @@ -33,8 +30,6 @@ namespace Squidex.Config.Orleans if (clusterConfiguration != null) { - clusterConfiguration.Globals.RegisterBootstrapProvider("EventConsumers"); - var ipConfig = config.GetRequiredValue("orleans:hostNameOrIPAddress"); if (ipConfig.Equals("Host", StringComparison.OrdinalIgnoreCase)) @@ -51,7 +46,30 @@ namespace Squidex.Config.Orleans clusterConfiguration.Defaults.PropagateActivityId = true; clusterConfiguration.Defaults.ProxyGatewayEndpoint = new IPEndPoint(IPAddress.Any, 40000); clusterConfiguration.Defaults.HostNameOrIPAddress = ipConfig; - }*/ + } + + config.ConfigureByOption("store:type", new Options + { + ["MongoDB"] = () => + { + var mongoConfiguration = config.GetRequiredValue("store:mongoDb:configuration"); + var mongoDatabaseName = config.GetRequiredValue("store:mongoDb:database"); + + services.AddMongoDBMembershipTable(c => + { + c.ConnectionString = mongoConfiguration; + c.CollectionPrefix = "Orleans_"; + c.DatabaseName = mongoDatabaseName; + }); + + services.AddMongoDBReminders(c => + { + c.ConnectionString = mongoConfiguration; + c.CollectionPrefix = "Orleans_"; + c.DatabaseName = mongoDatabaseName; + }); + } + }); } } } \ No newline at end of file diff --git a/src/Squidex/Config/Orleans/SiloWrapper.cs b/src/Squidex/Config/Orleans/SiloWrapper.cs new file mode 100644 index 000000000..63f25c758 --- /dev/null +++ b/src/Squidex/Config/Orleans/SiloWrapper.cs @@ -0,0 +1,90 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.IO; +using Microsoft.Extensions.Configuration; +using Orleans; +using Orleans.Hosting; +using Orleans.Runtime.Configuration; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Log.Adapter; + +namespace Squidex.Config.Orleans +{ + public class SiloWrapper : IInitializable, IDisposable + { + private readonly ISiloHost silo; + + internal sealed class Source : IConfigurationSource + { + private readonly IConfigurationProvider configurationProvider; + + public Source(IConfigurationProvider configurationProvider) + { + this.configurationProvider = configurationProvider; + } + + public IConfigurationProvider Build(IConfigurationBuilder builder) + { + return configurationProvider; + } + } + + public SiloWrapper(IConfiguration configuration) + { + silo = SiloHostBuilder.CreateDefault() + .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333)) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseDashboard(options => + { + options.HostSelf = false; + }) + .ConfigureApplicationParts(builder => + { + builder.AddApplicationPart(SquidexInfrastructure.Assembly); + }) + .ConfigureLogging(builder => + { + builder.AddSemanticLog(); + }) + .ConfigureServices((context, services) => + { + services.AddAppSiloServices(context.Configuration); + services.AddAppServices(context.Configuration); + }) + .ConfigureAppConfiguration((hostContext, builder) => + { + if (configuration is IConfigurationRoot root) + { + foreach (var provider in root.Providers) + { + builder.Add(new Source(provider)); + } + } + }) + .Build(); + } + + public void Initialize() + { + silo.StartAsync().Wait(); + } + + public void Dispose() + { + silo.StopAsync().Wait(); + } + + private static string GetEnvironment() + { + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + + return environment ?? "Development"; + } + } +} diff --git a/src/Squidex/Program.cs b/src/Squidex/Program.cs index 5e7392532..d2f22ecfe 100644 --- a/src/Squidex/Program.cs +++ b/src/Squidex/Program.cs @@ -5,14 +5,12 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.IO; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Orleans; using Orleans.Hosting; -using Orleans.Runtime.Configuration; using Squidex.Config.Orleans; -using Squidex.Infrastructure.EventSourcing.Grains; using Squidex.Infrastructure.Log.Adapter; namespace Squidex @@ -21,59 +19,28 @@ namespace Squidex { public static void Main(string[] args) { - var silo = new SiloHostBuilder() - .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333)) + new WebHostBuilder() + .UseKestrel(k => { k.AddServerHeader = false; }) .UseContentRoot(Directory.GetCurrentDirectory()) - .ConfigureServices((context, services) => - { - services.AddAppSiloServices(context.Configuration); - services.AddAppServices(context.Configuration); - }) - .ConfigureApplicationParts(builder => - { - builder.AddApplicationPart(typeof(EventConsumerManagerGrain).Assembly); - }) + .UseIISIntegration() + .UseStartup() .ConfigureLogging(builder => { builder.AddSemanticLog(); }) .ConfigureAppConfiguration((hostContext, builder) => { - builder.AddAppConfiguration(GetEnvironment(), args); - }) - .Build(); + builder.Sources.Clear(); - silo.StartAsync().Wait(); + builder.AddJsonFile("appsettings.json", true, true); + builder.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true); - try - { - new WebHostBuilder() - .UseKestrel(k => { k.AddServerHeader = false; }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() - .ConfigureLogging(builder => - { - builder.AddSemanticLog(); - }) - .ConfigureAppConfiguration((hostContext, builder) => - { - builder.AddAppConfiguration(hostContext.HostingEnvironment.EnvironmentName, args); - }) - .Build() - .Run(); - } - finally - { - silo.StopAsync().Wait(); - } - } - - private static string GetEnvironment() - { - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + builder.AddEnvironmentVariables(); - return environment ?? "Development"; + builder.AddCommandLine(args); + }) + .Build() + .Run(); } } } diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index 1f408129b..970206238 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -79,6 +79,7 @@ + diff --git a/src/Squidex/WebStartup.cs b/src/Squidex/WebStartup.cs index 08d81bf1b..7288f00a5 100644 --- a/src/Squidex/WebStartup.cs +++ b/src/Squidex/WebStartup.cs @@ -13,6 +13,7 @@ using Microsoft.Extensions.DependencyInjection; using Squidex.Areas.Api; using Squidex.Areas.Frontend; using Squidex.Areas.IdentityServer; +using Squidex.Areas.OrleansDashboard; using Squidex.Areas.Portal; using Squidex.Config.Domain; using Squidex.Config.Orleans; @@ -31,7 +32,8 @@ namespace Squidex public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddAppClient(); + services.AddOrleansSilo(); + services.AddOrleansClient(); services.AddAppServices(configuration); return services.BuildServiceProvider(); @@ -50,6 +52,7 @@ namespace Squidex app.ConfigureApi(); app.ConfigurePortal(); + app.ConfigureOrleansDashboard(); app.ConfigureIdentityServer(); app.ConfigureFrontend(); diff --git a/src/Squidex/appsettings.json b/src/Squidex/appsettings.json index 7edf55f44..be34052ab 100644 --- a/src/Squidex/appsettings.json +++ b/src/Squidex/appsettings.json @@ -42,12 +42,20 @@ } }, + "orleans": { + /* + * Define the IP address or host name that is used for inter-silo communication. + * + * Special values: FirstIPAddressOfHost, Host + */ + "hostNameOrIPAddress": "localhost" + }, "logging": { /* * Setting the flag to true, enables well formatteds json logs. */ - "human": true + "human": true }, /* From f3799c23d1ad528257cb7f25eeeea9d3360ac642 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 12 Feb 2018 14:47:47 +0100 Subject: [PATCH 03/28] Background processes migrated. --- ...tScheduler.cs => ContentSchedulerGrain.cs} | 30 +++++++++---- .../Contents/Guards/GuardContent.cs | 1 - .../Contents/IContentSchedulerGrain.cs | 15 +++++++ .../Rules/IRuleDequeuerGrain.cs | 15 +++++++ .../{RuleDequeuer.cs => RuleDequeuerGrain.cs} | 42 ++++++++++--------- .../Squidex.Domain.Apps.Entities.csproj | 1 + .../SquidexEntities.cs | 16 +++++++ .../MongoDb/BsonJsonConvention.cs | 1 - .../MongoDb/MongoRepositoryBase.cs | 13 +++--- .../Grains/EventConsumerGrain.cs | 4 +- .../Grains/EventConsumerManagerGrain.cs | 23 +++++----- .../Grains/IEventConsumerGrain.cs | 6 +-- .../Grains/IEventConsumerManagerGrain.cs | 6 +-- .../Bootstrap.cs} | 11 +++-- .../Orleans/IBackgroundGrain.cs | 17 ++++++++ .../EventConsumersController.cs | 4 +- .../Config/Domain/InfrastructureServices.cs | 13 ++++-- src/Squidex/Config/Domain/ReadServices.cs | 31 +++++++------- src/Squidex/Config/Orleans/ClientWrapper.cs | 2 + src/Squidex/Config/Orleans/SiloServices.cs | 3 -- src/Squidex/Config/Orleans/SiloWrapper.cs | 19 ++++----- src/Squidex/WebStartup.cs | 1 - .../Rules/RuleDequeuerTests.cs | 4 +- tools/Migrate_01/Migrations/RebuildAssets.cs | 2 - 24 files changed, 179 insertions(+), 101 deletions(-) rename src/Squidex.Domain.Apps.Entities/Contents/{ContentScheduler.cs => ContentSchedulerGrain.cs} (67%) create mode 100644 src/Squidex.Domain.Apps.Entities/Contents/IContentSchedulerGrain.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Rules/IRuleDequeuerGrain.cs rename src/Squidex.Domain.Apps.Entities/Rules/{RuleDequeuer.cs => RuleDequeuerGrain.cs} (82%) create mode 100644 src/Squidex.Domain.Apps.Entities/SquidexEntities.cs rename src/Squidex.Infrastructure/{EventSourcing/Grains/EventConsumerBootstrap.cs => Orleans/Bootstrap.cs} (66%) create mode 100644 src/Squidex.Infrastructure/Orleans/IBackgroundGrain.cs diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentScheduler.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs similarity index 67% rename from src/Squidex.Domain.Apps.Entities/Contents/ContentScheduler.cs rename to src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs index 23d3c05a9..a109042d2 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentScheduler.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs @@ -5,24 +5,26 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.Threading.Tasks; using NodaTime; +using Orleans; +using Orleans.Runtime; using Squidex.Domain.Apps.Entities.Contents.Commands; using Squidex.Domain.Apps.Entities.Contents.Repositories; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Timers; +using Squidex.Infrastructure.Tasks; namespace Squidex.Domain.Apps.Entities.Contents { - public sealed class ContentScheduler : IRunnable + public sealed class ContentSchedulerGrain : Grain, IContentSchedulerGrain, IRemindable { - private readonly CompletionTimer timer; private readonly IContentRepository contentRepository; private readonly ICommandBus commandBus; private readonly IClock clock; - public ContentScheduler( + public ContentSchedulerGrain( IContentRepository contentRepository, ICommandBus commandBus, IClock clock) @@ -34,15 +36,24 @@ namespace Squidex.Domain.Apps.Entities.Contents this.contentRepository = contentRepository; this.commandBus = commandBus; this.clock = clock; + } + + public override Task OnActivateAsync() + { + DelayDeactivation(TimeSpan.FromDays(1)); + + RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); + RegisterTimer(x => PublishAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); - timer = new CompletionTimer(5000, x => PublishAsync()); + return Task.FromResult(true); } - public void Run() + public Task ActivateAsync() { + return TaskHelper.Done; } - private Task PublishAsync() + public Task PublishAsync() { var now = clock.GetCurrentInstant(); @@ -53,5 +64,10 @@ namespace Squidex.Domain.Apps.Entities.Contents return commandBus.PublishAsync(command); }); } + + public Task ReceiveReminder(string reminderName, TickStatus status) + { + return TaskHelper.Done; + } } } diff --git a/src/Squidex.Domain.Apps.Entities/Contents/Guards/GuardContent.cs b/src/Squidex.Domain.Apps.Entities/Contents/Guards/GuardContent.cs index dfd5d8b68..e7cc66f55 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/Guards/GuardContent.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/Guards/GuardContent.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using NodaTime; using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Entities.Contents.Commands; diff --git a/src/Squidex.Domain.Apps.Entities/Contents/IContentSchedulerGrain.cs b/src/Squidex.Domain.Apps.Entities/Contents/IContentSchedulerGrain.cs new file mode 100644 index 000000000..77f7fcc0e --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Contents/IContentSchedulerGrain.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Squidex.Infrastructure.Orleans; + +namespace Squidex.Domain.Apps.Entities.Contents +{ + public interface IContentSchedulerGrain : IBackgroundGrain + { + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/IRuleDequeuerGrain.cs b/src/Squidex.Domain.Apps.Entities/Rules/IRuleDequeuerGrain.cs new file mode 100644 index 000000000..793e43617 --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Rules/IRuleDequeuerGrain.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Squidex.Infrastructure.Orleans; + +namespace Squidex.Domain.Apps.Entities.Rules +{ + public interface IRuleDequeuerGrain : IBackgroundGrain + { + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleDequeuer.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleDequeuerGrain.cs similarity index 82% rename from src/Squidex.Domain.Apps.Entities/Rules/RuleDequeuer.cs rename to src/Squidex.Domain.Apps.Entities/Rules/RuleDequeuerGrain.cs index 693d661bb..79b6726a9 100644 --- a/src/Squidex.Domain.Apps.Entities/Rules/RuleDequeuer.cs +++ b/src/Squidex.Domain.Apps.Entities/Rules/RuleDequeuerGrain.cs @@ -7,31 +7,30 @@ using System; using System.Collections.Concurrent; -using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; using NodaTime; +using Orleans; +using Orleans.Runtime; using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Entities.Rules.Repositories; using Squidex.Infrastructure; using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Tasks; -using Squidex.Infrastructure.Timers; namespace Squidex.Domain.Apps.Entities.Rules { - public class RuleDequeuer : DisposableObjectBase, IRunnable + public class RuleDequeuerGrain : Grain, IRuleDequeuerGrain, IRemindable { private readonly ITargetBlock requestBlock; private readonly IRuleEventRepository ruleEventRepository; private readonly RuleService ruleService; - private readonly CompletionTimer timer; private readonly ConcurrentDictionary executing = new ConcurrentDictionary(); private readonly IClock clock; private readonly ISemanticLog log; - public RuleDequeuer(RuleService ruleService, IRuleEventRepository ruleEventRepository, ISemanticLog log, IClock clock) + public RuleDequeuerGrain(RuleService ruleService, IRuleEventRepository ruleEventRepository, ISemanticLog log, IClock clock) { Guard.NotNull(ruleEventRepository, nameof(ruleEventRepository)); Guard.NotNull(ruleService, nameof(ruleService)); @@ -48,37 +47,37 @@ namespace Squidex.Domain.Apps.Entities.Rules requestBlock = new PartitionedActionBlock(HandleAsync, x => x.Job.AggregateId.GetHashCode(), new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 32, BoundedCapacity = 32 }); - - timer = new CompletionTimer(5000, QueryAsync); } - protected override void DisposeObject(bool disposing) + public override Task OnActivateAsync() { - if (disposing) - { - timer.StopAsync().Wait(); + DelayDeactivation(TimeSpan.FromDays(1)); - requestBlock.Complete(); - requestBlock.Completion.Wait(); - } + RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); + RegisterTimer(x => QueryAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); + + return Task.FromResult(true); } - public void Run() + public override Task OnDeactivateAsync() { + requestBlock.Complete(); + + return requestBlock.Completion; } - public void Next() + public Task ActivateAsync() { - timer.SkipCurrentDelay(); + return TaskHelper.Done; } - private async Task QueryAsync(CancellationToken ct) + public async Task QueryAsync() { try { var now = clock.GetCurrentInstant(); - await ruleEventRepository.QueryPendingAsync(now, requestBlock.SendAsync, ct); + await ruleEventRepository.QueryPendingAsync(now, requestBlock.SendAsync); } catch (Exception ex) { @@ -153,5 +152,10 @@ namespace Squidex.Domain.Apps.Entities.Rules return null; } + + public Task ReceiveReminder(string reminderName, TickStatus status) + { + return TaskHelper.Done; + } } } diff --git a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj index 431c71718..5393faf5e 100644 --- a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj +++ b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Squidex.Domain.Apps.Entities/SquidexEntities.cs b/src/Squidex.Domain.Apps.Entities/SquidexEntities.cs new file mode 100644 index 000000000..c65786a8d --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/SquidexEntities.cs @@ -0,0 +1,16 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Reflection; + +namespace Squidex.Domain.Apps.Entities +{ + public sealed class SquidexEntities + { + public static readonly Assembly Assembly = typeof(SquidexEntities).Assembly; + } +} diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs index 4326838e1..ab9f13d11 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs @@ -11,7 +11,6 @@ using System.Reflection; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace Squidex.Infrastructure.MongoDb { diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs index 27cfdca13..d8c35ef2d 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoRepositoryBase.cs @@ -68,13 +68,16 @@ namespace Squidex.Infrastructure.MongoDb { return new Lazy>(() => { - var databaseCollection = mongoDatabase.GetCollection( - CollectionName(), - CollectionSettings() ?? new MongoCollectionSettings()); + return Task.Run(async () => + { + var databaseCollection = mongoDatabase.GetCollection( + CollectionName(), + CollectionSettings() ?? new MongoCollectionSettings()); - SetupCollectionAsync(databaseCollection).Wait(); + await SetupCollectionAsync(databaseCollection).ConfigureAwait(false); - return databaseCollection; + return databaseCollection; + }).Result; }); } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs index 9635cd146..abe33b21c 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs @@ -71,7 +71,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains eventConsumer = eventConsumerFactory(this.GetPrimaryKeyString()); - persistence = store.WithSnapshots(this.GetPrimaryKeyString(), s => state = s); + persistence = store.WithSnapshots(GetType(), this.GetPrimaryKeyString(), s => state = s); return persistence.ReadAsync(); } @@ -81,7 +81,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains return new RetrySubscription(eventStore, new WrapperSubscription(this.AsReference(), scheduler), streamFilter, position); } - public virtual Task> GetStateAsync() + public Task> GetStateAsync() { return Task.FromResult(state.ToInfo(this.eventConsumer.Name).AsImmutable()); } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs index 77d3f40a9..acf4ff420 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs @@ -14,10 +14,11 @@ using Orleans; using Orleans.Concurrency; using Orleans.Core; using Orleans.Runtime; +using Squidex.Infrastructure.Tasks; namespace Squidex.Infrastructure.EventSourcing.Grains { - public class EventConsumerManagerGrain : Grain, IEventConsumerManagerGrain + public class EventConsumerManagerGrain : Grain, IEventConsumerManagerGrain, IRemindable { private readonly IEnumerable eventConsumers; @@ -37,17 +38,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains this.eventConsumers = eventConsumers; } - public Task ReceiveReminder(string reminderName, TickStatus status) - { - return ActivateAsync(); - } - public override Task OnActivateAsync() { DelayDeactivation(TimeSpan.FromDays(1)); - // RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); - // RegisterTimer(x => ActivateAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); + RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); + RegisterTimer(x => WakeUpAsync(null), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); return Task.FromResult(true); } @@ -73,14 +69,16 @@ namespace Squidex.Infrastructure.EventSourcing.Grains return Task.WhenAll(tasks); } - public Task>> GetConsumersAsync() + public async Task>> GetConsumersAsync() { var tasks = eventConsumers .Select(c => GrainFactory.GetGrain(c.Name)) .Select(c => c.GetStateAsync()); - return Task.WhenAll(tasks).ContinueWith(x => new Immutable>(x.Result.Select(r => r.Value).ToList())); + var consumerInfos = await Task.WhenAll(tasks); + + return new Immutable>(consumerInfos.Select(r => r.Value).ToList()); } public Task ResetAsync(string consumerName) @@ -103,5 +101,10 @@ namespace Squidex.Infrastructure.EventSourcing.Grains return eventConsumer.StopAsync(); } + + public Task ReceiveReminder(string reminderName, TickStatus status) + { + return TaskHelper.Done; + } } } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs index fdb330b61..2044db8bb 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs @@ -7,17 +7,15 @@ using System; using System.Threading.Tasks; -using Orleans; using Orleans.Concurrency; +using Squidex.Infrastructure.Orleans; namespace Squidex.Infrastructure.EventSourcing.Grains { - public interface IEventConsumerGrain : IGrainWithStringKey + public interface IEventConsumerGrain : IBackgroundGrain { Task> GetStateAsync(); - Task ActivateAsync(); - Task StopAsync(); Task StartAsync(); diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs index 549953924..eb3a0d6e7 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs @@ -7,15 +7,13 @@ using System.Collections.Generic; using System.Threading.Tasks; -using Orleans; using Orleans.Concurrency; +using Squidex.Infrastructure.Orleans; namespace Squidex.Infrastructure.EventSourcing.Grains { - public interface IEventConsumerManagerGrain : IGrainWithStringKey + public interface IEventConsumerManagerGrain : IBackgroundGrain { - Task ActivateAsync(); - Task WakeUpAsync(string streamName); Task StopAsync(string consumerName); diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs b/src/Squidex.Infrastructure/Orleans/Bootstrap.cs similarity index 66% rename from src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs rename to src/Squidex.Infrastructure/Orleans/Bootstrap.cs index 030da02e9..9c1326547 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerBootstrap.cs +++ b/src/Squidex.Infrastructure/Orleans/Bootstrap.cs @@ -1,21 +1,20 @@ // ========================================================================== // Squidex Headless CMS // ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) +// Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Orleans; -using Orleans.Runtime; using Squidex.Infrastructure.Tasks; -namespace Squidex.Infrastructure.EventSourcing.Grains +namespace Squidex.Infrastructure.Orleans { - public sealed class EventConsumerBootstrap : IRunnable + public sealed class Bootstrap : IRunnable where T : IBackgroundGrain { private readonly IGrainFactory grainFactory; - public EventConsumerBootstrap(IGrainFactory grainFactory) + public Bootstrap(IGrainFactory grainFactory) { Guard.NotNull(grainFactory, nameof(grainFactory)); @@ -24,7 +23,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains public void Run() { - var grain = grainFactory.GetGrain("Default"); + var grain = grainFactory.GetGrain("Default"); grain.ActivateAsync().Forget(); } diff --git a/src/Squidex.Infrastructure/Orleans/IBackgroundGrain.cs b/src/Squidex.Infrastructure/Orleans/IBackgroundGrain.cs new file mode 100644 index 000000000..e30295b8a --- /dev/null +++ b/src/Squidex.Infrastructure/Orleans/IBackgroundGrain.cs @@ -0,0 +1,17 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Threading.Tasks; +using Orleans; + +namespace Squidex.Infrastructure.Orleans +{ + public interface IBackgroundGrain : IGrainWithStringKey + { + Task ActivateAsync(); + } +} diff --git a/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs b/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs index 7e961c6ce..6dee278b9 100644 --- a/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs +++ b/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs @@ -26,10 +26,10 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers { private readonly IEventConsumerManagerGrain eventConsumerManagerGrain; - public EventConsumersController(ICommandBus commandBus, IClusterClient orleans) + public EventConsumersController(ICommandBus commandBus, IGrainFactory grainFactory) : base(commandBus) { - eventConsumerManagerGrain = orleans.GetGrain("Default"); + eventConsumerManagerGrain = grainFactory.GetGrain("Default"); } [HttpGet] diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index 0b9e57ac2..f7628b642 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -23,10 +23,15 @@ using Squidex.Infrastructure.States; using Squidex.Infrastructure.UsageTracking; using Squidex.Pipeline; +#pragma warning disable RECS0092 // Convert field to readonly + namespace Squidex.Config.Domain { public static class InfrastructureServices { + private static ILogChannel console = new ConsoleLogChannel(); + private static ILogChannel file; + public static void AddMyInfrastructureServices(this IServiceCollection services, IConfiguration config) { if (config.GetValue("logging:human")) @@ -42,11 +47,14 @@ namespace Squidex.Config.Domain if (!string.IsNullOrWhiteSpace(loggingFile)) { - services.AddSingletonAs(new FileChannel(loggingFile)) + services.AddSingletonAs(file ?? (file = new FileChannel(loggingFile))) .As() .As(); } + services.AddSingletonAs(console) + .As(); + services.AddSingletonAs(c => new ApplicationInfoLogAppender(typeof(Program).Assembly, Guid.NewGuid())) .As(); @@ -59,9 +67,6 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As(); - services.AddSingletonAs() .As(); diff --git a/src/Squidex/Config/Domain/ReadServices.cs b/src/Squidex/Config/Domain/ReadServices.cs index f1d5c81bf..38708699e 100644 --- a/src/Squidex/Config/Domain/ReadServices.cs +++ b/src/Squidex/Config/Domain/ReadServices.cs @@ -27,6 +27,7 @@ using Squidex.Infrastructure; using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing.Grains; +using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.States; using Squidex.Pipeline; @@ -36,18 +37,13 @@ namespace Squidex.Config.Domain { public static void AddMyReadServices(this IServiceCollection services, IConfiguration config) { - var consumeEvents = config.GetOptionalValue("eventStore:consume", false); - - if (consumeEvents) - { - services.AddSingletonAs() - .As(); - services.AddSingletonAs() - .As(); + services.AddSingletonAs() + .As() + .As(); - services.AddSingletonAs() - .As(); - } + services.AddSingletonAs() + .As() + .As(); var exposeSourceUrl = config.GetOptionalValue("assetStore:exposeSourceUrl", true); @@ -57,9 +53,6 @@ namespace Squidex.Config.Domain exposeSourceUrl)) .As(); - services.AddSingletonAs() - .As().As(); - services.AddSingletonAs(c => c.GetService>()?.Value?.Plans.OrEmpty()); services.AddSingletonAs() @@ -113,8 +106,14 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As().As(); + services.AddSingletonAs>() + .As(); + + services.AddSingletonAs>() + .As(); + + services.AddSingletonAs>() + .As(); services.AddSingletonAs() .As(); diff --git a/src/Squidex/Config/Orleans/ClientWrapper.cs b/src/Squidex/Config/Orleans/ClientWrapper.cs index 59635c2e1..9f6090cd5 100644 --- a/src/Squidex/Config/Orleans/ClientWrapper.cs +++ b/src/Squidex/Config/Orleans/ClientWrapper.cs @@ -8,6 +8,7 @@ using System; using Orleans; using Orleans.Runtime.Configuration; +using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; namespace Squidex.Config.Orleans @@ -28,6 +29,7 @@ namespace Squidex.Config.Orleans .UseDashboard() .ConfigureApplicationParts(builder => { + builder.AddApplicationPart(SquidexEntities.Assembly); builder.AddApplicationPart(SquidexInfrastructure.Assembly); }) .UseStaticGatewayListProvider(options => diff --git a/src/Squidex/Config/Orleans/SiloServices.cs b/src/Squidex/Config/Orleans/SiloServices.cs index 10c27282e..6192788be 100644 --- a/src/Squidex/Config/Orleans/SiloServices.cs +++ b/src/Squidex/Config/Orleans/SiloServices.cs @@ -11,10 +11,7 @@ using System.Net; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Orleans; -using Orleans.Runtime; using Orleans.Runtime.Configuration; -using Squidex.Infrastructure; -using Squidex.Infrastructure.EventSourcing.Grains; namespace Squidex.Config.Orleans { diff --git a/src/Squidex/Config/Orleans/SiloWrapper.cs b/src/Squidex/Config/Orleans/SiloWrapper.cs index 63f25c758..75b2dfd67 100644 --- a/src/Squidex/Config/Orleans/SiloWrapper.cs +++ b/src/Squidex/Config/Orleans/SiloWrapper.cs @@ -11,6 +11,7 @@ using Microsoft.Extensions.Configuration; using Orleans; using Orleans.Hosting; using Orleans.Runtime.Configuration; +using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; using Squidex.Infrastructure.Log.Adapter; @@ -38,20 +39,21 @@ namespace Squidex.Config.Orleans public SiloWrapper(IConfiguration configuration) { silo = SiloHostBuilder.CreateDefault() - .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333)) + .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333).WithDashboard()) .UseContentRoot(Directory.GetCurrentDirectory()) .UseDashboard(options => { options.HostSelf = false; }) - .ConfigureApplicationParts(builder => - { - builder.AddApplicationPart(SquidexInfrastructure.Assembly); - }) .ConfigureLogging(builder => { builder.AddSemanticLog(); }) + .ConfigureApplicationParts(builder => + { + builder.AddApplicationPart(SquidexEntities.Assembly); + builder.AddApplicationPart(SquidexInfrastructure.Assembly); + }) .ConfigureServices((context, services) => { services.AddAppSiloServices(context.Configuration); @@ -79,12 +81,5 @@ namespace Squidex.Config.Orleans { silo.StopAsync().Wait(); } - - private static string GetEnvironment() - { - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - - return environment ?? "Development"; - } } } diff --git a/src/Squidex/WebStartup.cs b/src/Squidex/WebStartup.cs index 7288f00a5..73b2ffb50 100644 --- a/src/Squidex/WebStartup.cs +++ b/src/Squidex/WebStartup.cs @@ -54,7 +54,6 @@ namespace Squidex app.ConfigurePortal(); app.ConfigureOrleansDashboard(); app.ConfigureIdentityServer(); - app.ConfigureFrontend(); } } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs index 68d032bc7..6fa74a242 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs @@ -27,13 +27,13 @@ namespace Squidex.Domain.Apps.Entities.Rules private readonly IRuleEventRepository ruleEventRepository = A.Fake(); private readonly Instant now = SystemClock.Instance.GetCurrentInstant(); private readonly RuleService ruleService = A.Fake(); - private readonly RuleDequeuer sut; + private readonly RuleDequeuerGrain sut; public RuleDequeuerTests() { A.CallTo(() => clock.GetCurrentInstant()).Returns(now); - sut = new RuleDequeuer( + sut = new RuleDequeuerGrain( ruleService, ruleEventRepository, log, diff --git a/tools/Migrate_01/Migrations/RebuildAssets.cs b/tools/Migrate_01/Migrations/RebuildAssets.cs index a07ab718e..2714c1269 100644 --- a/tools/Migrate_01/Migrations/RebuildAssets.cs +++ b/tools/Migrate_01/Migrations/RebuildAssets.cs @@ -5,8 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; using Squidex.Infrastructure.Migrations; From a9305134f553a82cb4a853ee02f15e9577b79c57 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 12 Feb 2018 18:28:45 +0100 Subject: [PATCH 04/28] First domain grains. --- .../Assets/AssetCommandMiddleware.cs | 130 +++---- .../{AssetDomainObject.cs => AssetGrain.cs} | 89 +++-- .../Assets/IAssetGrain.cs | 15 + .../Rules/IRuleGrain.cs | 15 + .../Rules/RuleCommandMiddleware.cs | 89 ----- .../Rules/RuleDomainObject.cs | 86 ----- .../Rules/RuleGrain.cs | 135 +++++++ .../Schemas/ISchemaGrain.cs | 15 + .../Schemas/SchemaCommandMiddleware.cs | 194 ---------- .../Schemas/SchemaDomainObject.cs | 229 ------------ .../Schemas/SchemaGrain.cs | 330 ++++++++++++++++++ .../Assets/AssetFile.cs | 3 +- .../Commands/DomainObjectGrain.cs | 204 +++++++++++ .../Commands/GrainCommandMiddleware.cs | 46 +++ .../Commands/IDomainObjectGrain.cs | 20 ++ src/Squidex.Infrastructure/Orleans/J.cs | 18 + .../Orleans/JExtensions.cs | 17 + src/Squidex.Infrastructure/Orleans/J{T}.cs | 85 +++++ .../Config/Domain/SerializationServices.cs | 34 +- src/Squidex/Config/Domain/WriteServices.cs | 17 +- src/Squidex/Config/Orleans/SiloWrapper.cs | 4 + 21 files changed, 1042 insertions(+), 733 deletions(-) rename src/Squidex.Domain.Apps.Entities/Assets/{AssetDomainObject.cs => AssetGrain.cs} (54%) create mode 100644 src/Squidex.Domain.Apps.Entities/Assets/IAssetGrain.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs delete mode 100644 src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs delete mode 100644 src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObject.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs delete mode 100644 src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs delete mode 100644 src/Squidex.Domain.Apps.Entities/Schemas/SchemaDomainObject.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs create mode 100644 src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs create mode 100644 src/Squidex.Infrastructure/Commands/GrainCommandMiddleware.cs create mode 100644 src/Squidex.Infrastructure/Commands/IDomainObjectGrain.cs create mode 100644 src/Squidex.Infrastructure/Orleans/J.cs create mode 100644 src/Squidex.Infrastructure/Orleans/JExtensions.cs create mode 100644 src/Squidex.Infrastructure/Orleans/J{T}.cs diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs index d491c5c12..a50f1196d 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs @@ -7,109 +7,81 @@ using System; using System.Threading.Tasks; +using Orleans; using Squidex.Domain.Apps.Entities.Assets.Commands; -using Squidex.Domain.Apps.Entities.Assets.Guards; using Squidex.Infrastructure; using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Dispatching; namespace Squidex.Domain.Apps.Entities.Assets { - public class AssetCommandMiddleware : ICommandMiddleware + public sealed class AssetCommandMiddleware : GrainCommandMiddleware { - private readonly IAggregateHandler handler; private readonly IAssetStore assetStore; private readonly IAssetThumbnailGenerator assetThumbnailGenerator; public AssetCommandMiddleware( - IAggregateHandler handler, + IGrainFactory grainFactory, IAssetStore assetStore, IAssetThumbnailGenerator assetThumbnailGenerator) + : base(grainFactory) { - Guard.NotNull(handler, nameof(handler)); Guard.NotNull(assetStore, nameof(assetStore)); Guard.NotNull(assetThumbnailGenerator, nameof(assetThumbnailGenerator)); - this.handler = handler; this.assetStore = assetStore; this.assetThumbnailGenerator = assetThumbnailGenerator; } - protected async Task On(CreateAsset command, CommandContext context) + public async override Task HandleAsync(CommandContext context, Func next) { - command.ImageInfo = await assetThumbnailGenerator.GetImageInfoAsync(command.File.OpenRead()); - try + switch (context.Command) { - var asset = await handler.CreateSyncedAsync(context, async a => - { - GuardAsset.CanCreate(command); - - a.Create(command); - - await assetStore.UploadTemporaryAsync(context.ContextId.ToString(), command.File.OpenRead()); - - context.Complete(EntityCreatedResult.Create(command.AssetId, a.Version)); - }); - - await assetStore.CopyTemporaryAsync(context.ContextId.ToString(), command.AssetId.ToString(), asset.Snapshot.FileVersion, null); - } - finally - { - await assetStore.DeleteTemporaryAsync(context.ContextId.ToString()); - } - } - - protected async Task On(UpdateAsset command, CommandContext context) - { - command.ImageInfo = await assetThumbnailGenerator.GetImageInfoAsync(command.File.OpenRead()); - - try - { - var asset = await handler.UpdateSyncedAsync(context, async a => - { - GuardAsset.CanUpdate(command); - - a.Update(command); - - await assetStore.UploadTemporaryAsync(context.ContextId.ToString(), command.File.OpenRead()); - - context.Complete(new AssetSavedResult(a.Version, a.Snapshot.FileVersion)); - }); - - await assetStore.CopyTemporaryAsync(context.ContextId.ToString(), command.AssetId.ToString(), asset.Snapshot.FileVersion, null); - } - finally - { - await assetStore.DeleteTemporaryAsync(context.ContextId.ToString()); - } - } - - protected Task On(RenameAsset command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAsset.CanRename(command, a.Snapshot.FileName); - - a.Rename(command); - }); - } - - protected Task On(DeleteAsset command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAsset.CanDelete(command); - - a.Delete(command); - }); - } - - public async Task HandleAsync(CommandContext context, Func next) - { - if (!await this.DispatchActionAsync(context.Command, context)) - { - await next(); + case CreateAsset createAsset: + { + createAsset.ImageInfo = await assetThumbnailGenerator.GetImageInfoAsync(createAsset.File.OpenRead()); + + await assetStore.UploadTemporaryAsync(context.ContextId.ToString(), createAsset.File.OpenRead()); + try + { + var result = await ExecuteCommandAsync(createAsset) as AssetSavedResult; + + context.Complete(EntityCreatedResult.Create(createAsset.AssetId, result.Version)); + + await assetStore.CopyTemporaryAsync(context.ContextId.ToString(), createAsset.AssetId.ToString(), result.FileVersion, null); + } + finally + { + await assetStore.DeleteTemporaryAsync(context.ContextId.ToString()); + } + + break; + } + + case UpdateAsset updateAsset: + { + updateAsset.ImageInfo = await assetThumbnailGenerator.GetImageInfoAsync(updateAsset.File.OpenRead()); + + await assetStore.UploadTemporaryAsync(context.ContextId.ToString(), updateAsset.File.OpenRead()); + try + { + var result = await ExecuteCommandAsync(updateAsset) as AssetSavedResult; + + context.Complete(result); + + await assetStore.CopyTemporaryAsync(context.ContextId.ToString(), updateAsset.AssetId.ToString(), result.FileVersion, null); + } + finally + { + await assetStore.DeleteTemporaryAsync(context.ContextId.ToString()); + } + + break; + } + + default: + await base.HandleAsync(context, next); + break; } } } diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetDomainObject.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs similarity index 54% rename from src/Squidex.Domain.Apps.Entities/Assets/AssetDomainObject.cs rename to src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs index 7cc351c83..1aa3bfdc3 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetDomainObject.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs @@ -5,22 +5,71 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; +using System.Threading.Tasks; using Squidex.Domain.Apps.Entities.Assets.Commands; +using Squidex.Domain.Apps.Entities.Assets.Guards; using Squidex.Domain.Apps.Entities.Assets.State; using Squidex.Domain.Apps.Events; using Squidex.Domain.Apps.Events.Assets; using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Reflection; +using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities.Assets { - public sealed class AssetDomainObject : SquidexDomainObjectBase + public sealed class AssetGrain : DomainObjectGrain, IAssetGrain { - public AssetDomainObject Create(CreateAsset command) + public AssetGrain(IStore store) + : base(store) { - VerifyNotCreated(); + } + + public override Task ExecuteAsync(IAggregateCommand command) + { + switch (command) + { + case CreateAsset createRule: + return CreateReturnAsync(createRule, c => + { + GuardAsset.CanCreate(c); + + Create(c); + + return new AssetSavedResult(NewVersion, Snapshot.FileVersion); + }); + case UpdateAsset updateRule: + return UpdateReturnAsync(updateRule, c => + { + GuardAsset.CanUpdate(c); + + Update(c); + + return new AssetSavedResult(NewVersion, Snapshot.FileVersion); + }); + case RenameAsset renameAsset: + return UpdateAsync(renameAsset, c => + { + GuardAsset.CanRename(c, Snapshot.FileName); + + Rename(c); + }); + case DeleteAsset deleteAsset: + return UpdateAsync(deleteAsset, c => + { + GuardAsset.CanDelete(c); + + Delete(c); + }); + default: + throw new NotSupportedException(); + } + } + public void Create(CreateAsset command) + { var @event = SimpleMapper.Map(command, new AssetCreated { FileName = command.File.FileName, @@ -33,13 +82,11 @@ namespace Squidex.Domain.Apps.Entities.Assets }); RaiseEvent(@event); - - return this; } - public AssetDomainObject Update(UpdateAsset command) + public void Update(UpdateAsset command) { - VerifyCreatedAndNotDeleted(); + VerifyNotDeleted(); var @event = SimpleMapper.Map(command, new AssetUpdated { @@ -52,26 +99,20 @@ namespace Squidex.Domain.Apps.Entities.Assets }); RaiseEvent(@event); - - return this; } - public AssetDomainObject Delete(DeleteAsset command) + public void Delete(DeleteAsset command) { - VerifyCreatedAndNotDeleted(); + VerifyNotDeleted(); RaiseEvent(SimpleMapper.Map(command, new AssetDeleted { DeletedSize = Snapshot.TotalSize })); - - return this; } - public AssetDomainObject Rename(RenameAsset command) + public void Rename(RenameAsset command) { - VerifyCreatedAndNotDeleted(); + VerifyNotDeleted(); RaiseEvent(SimpleMapper.Map(command, new AssetRenamed())); - - return this; } private void RaiseEvent(AppEvent @event) @@ -84,19 +125,11 @@ namespace Squidex.Domain.Apps.Entities.Assets RaiseEvent(Envelope.Create(@event)); } - private void VerifyNotCreated() - { - if (!string.IsNullOrWhiteSpace(Snapshot.FileName)) - { - throw new DomainException("Asset has already been created."); - } - } - - private void VerifyCreatedAndNotDeleted() + private void VerifyNotDeleted() { - if (Snapshot.IsDeleted || string.IsNullOrWhiteSpace(Snapshot.FileName)) + if (Snapshot.IsDeleted) { - throw new DomainException("Asset has already been deleted or not created yet."); + throw new DomainException("Asset has already been deleted"); } } diff --git a/src/Squidex.Domain.Apps.Entities/Assets/IAssetGrain.cs b/src/Squidex.Domain.Apps.Entities/Assets/IAssetGrain.cs new file mode 100644 index 000000000..864c0256a --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Assets/IAssetGrain.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Squidex.Infrastructure.Commands; + +namespace Squidex.Domain.Apps.Entities.Assets +{ + public interface IAssetGrain : IDomainObjectGrain + { + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs b/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs new file mode 100644 index 000000000..7bab17d69 --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Squidex.Infrastructure.Commands; + +namespace Squidex.Domain.Apps.Entities.Rules +{ + public interface IRuleGrain : IDomainObjectGrain + { + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs deleted file mode 100644 index 8a6e43441..000000000 --- a/src/Squidex.Domain.Apps.Entities/Rules/RuleCommandMiddleware.cs +++ /dev/null @@ -1,89 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Squidex.Domain.Apps.Entities.Rules.Commands; -using Squidex.Domain.Apps.Entities.Rules.Guards; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Dispatching; - -namespace Squidex.Domain.Apps.Entities.Rules -{ - public class RuleCommandMiddleware : ICommandMiddleware - { - private readonly IAggregateHandler handler; - private readonly IAppProvider appProvider; - - public RuleCommandMiddleware(IAggregateHandler handler, IAppProvider appProvider) - { - Guard.NotNull(handler, nameof(handler)); - Guard.NotNull(appProvider, nameof(appProvider)); - - this.handler = handler; - - this.appProvider = appProvider; - } - - protected Task On(CreateRule command, CommandContext context) - { - return handler.CreateSyncedAsync(context, async r => - { - await GuardRule.CanCreate(command, appProvider); - - r.Create(command); - }); - } - - protected Task On(UpdateRule command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, async r => - { - await GuardRule.CanUpdate(command, r.Snapshot.AppId.Id, appProvider); - - r.Update(command); - }); - } - - protected Task On(EnableRule command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, r => - { - GuardRule.CanEnable(command, r.Snapshot.RuleDef); - - r.Enable(command); - }); - } - - protected Task On(DisableRule command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, r => - { - GuardRule.CanDisable(command, r.Snapshot.RuleDef); - - r.Disable(command); - }); - } - - protected Task On(DeleteRule command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, r => - { - GuardRule.CanDelete(command); - - r.Delete(command); - }); - } - - public async Task HandleAsync(CommandContext context, Func next) - { - await this.DispatchActionAsync(context.Command, context); - await next(); - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObject.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObject.cs deleted file mode 100644 index 54c9afc2d..000000000 --- a/src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObject.cs +++ /dev/null @@ -1,86 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Domain.Apps.Entities.Rules.Commands; -using Squidex.Domain.Apps.Entities.Rules.State; -using Squidex.Domain.Apps.Events; -using Squidex.Domain.Apps.Events.Rules; -using Squidex.Infrastructure; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Domain.Apps.Entities.Rules -{ - public sealed class RuleDomainObject : SquidexDomainObjectBase - { - public void Create(CreateRule command) - { - VerifyNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new RuleCreated())); - } - - public void Update(UpdateRule command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new RuleUpdated())); - } - - public void Enable(EnableRule command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new RuleEnabled())); - } - - public void Disable(DisableRule command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new RuleDisabled())); - } - - public void Delete(DeleteRule command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new RuleDeleted())); - } - - private void RaiseEvent(AppEvent @event) - { - if (@event.AppId == null) - { - @event.AppId = Snapshot.AppId; - } - - RaiseEvent(Envelope.Create(@event)); - } - - private void VerifyNotCreated() - { - if (Snapshot.RuleDef != null) - { - throw new DomainException("Webhook has already been created."); - } - } - - private void VerifyCreatedAndNotDeleted() - { - if (Snapshot.IsDeleted || Snapshot.RuleDef == null) - { - throw new DomainException("Webhook has already been deleted or not created yet."); - } - } - - public override void ApplyEvent(Envelope @event) - { - ApplySnapshot(Snapshot.Apply(@event)); - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs new file mode 100644 index 000000000..668296c4e --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs @@ -0,0 +1,135 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Threading.Tasks; +using Squidex.Domain.Apps.Entities.Rules.Commands; +using Squidex.Domain.Apps.Entities.Rules.Guards; +using Squidex.Domain.Apps.Entities.Rules.State; +using Squidex.Domain.Apps.Events; +using Squidex.Domain.Apps.Events.Rules; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Reflection; +using Squidex.Infrastructure.States; + +namespace Squidex.Domain.Apps.Entities.Rules +{ + public sealed class RuleGrain : DomainObjectGrain, IRuleGrain + { + private readonly IAppProvider appProvider; + + public RuleGrain(IStore store, IAppProvider appProvider) + : base(store) + { + Guard.NotNull(appProvider, nameof(appProvider)); + + this.appProvider = appProvider; + } + + public override Task ExecuteAsync(IAggregateCommand command) + { + switch (command) + { + case CreateRule createRule: + return CreateAsync(createRule, c => + { + GuardRule.CanCreate(c, appProvider); + + Create(c); + }); + case UpdateRule updateRule: + return UpdateAsync(updateRule, c => + { + GuardRule.CanUpdate(c, Snapshot.AppId.Id, appProvider); + + Update(c); + }); + case EnableRule enableRule: + return UpdateAsync(enableRule, c => + { + GuardRule.CanEnable(c, Snapshot.RuleDef); + + Enable(c); + }); + case DisableRule disableRule: + return UpdateAsync(disableRule, c => + { + GuardRule.CanDisable(c, Snapshot.RuleDef); + + Disable(c); + }); + case DeleteRule deleteRule: + return UpdateAsync(deleteRule, c => + { + GuardRule.CanDelete(deleteRule); + + Delete(c); + }); + default: + throw new NotSupportedException(); + } + } + + public void Create(CreateRule command) + { + RaiseEvent(SimpleMapper.Map(command, new RuleCreated())); + } + + public void Update(UpdateRule command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new RuleUpdated())); + } + + public void Enable(EnableRule command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new RuleEnabled())); + } + + public void Disable(DisableRule command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new RuleDisabled())); + } + + public void Delete(DeleteRule command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new RuleDeleted())); + } + + private void RaiseEvent(AppEvent @event) + { + if (@event.AppId == null) + { + @event.AppId = Snapshot.AppId; + } + + RaiseEvent(Envelope.Create(@event)); + } + + private void VerifyNotDeleted() + { + if (Snapshot.IsDeleted || Snapshot.RuleDef == null) + { + throw new DomainException("Webhook has already been deleted."); + } + } + + public override void ApplyEvent(Envelope @event) + { + ApplySnapshot(Snapshot.Apply(@event)); + } + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs b/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs new file mode 100644 index 000000000..1f3b46dbf --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs @@ -0,0 +1,15 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Squidex.Infrastructure.Commands; + +namespace Squidex.Domain.Apps.Entities.Schemas +{ + public interface ISchemaGrain : IDomainObjectGrain + { + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs deleted file mode 100644 index b58f2c815..000000000 --- a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaCommandMiddleware.cs +++ /dev/null @@ -1,194 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Linq; -using System.Threading.Tasks; -using Squidex.Domain.Apps.Entities.Schemas.Commands; -using Squidex.Domain.Apps.Entities.Schemas.Guards; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Dispatching; - -namespace Squidex.Domain.Apps.Entities.Schemas -{ - public class SchemaCommandMiddleware : ICommandMiddleware - { - private readonly IAppProvider appProvider; - private readonly IAggregateHandler handler; - - public SchemaCommandMiddleware(IAggregateHandler handler, IAppProvider appProvider) - { - Guard.NotNull(handler, nameof(handler)); - Guard.NotNull(appProvider, nameof(appProvider)); - - this.handler = handler; - - this.appProvider = appProvider; - } - - protected Task On(CreateSchema command, CommandContext context) - { - return handler.CreateSyncedAsync(context, async s => - { - await GuardSchema.CanCreate(command, appProvider); - - s.Create(command); - - context.Complete(EntityCreatedResult.Create(command.SchemaId, s.Version)); - }); - } - - protected Task On(AddField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanAdd(s.Snapshot.SchemaDef, command); - - s.Add(command); - - context.Complete(EntityCreatedResult.Create(s.Snapshot.SchemaDef.FieldsById.Values.First(x => x.Name == command.Name).Id, s.Version)); - }); - } - - protected Task On(DeleteField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanDelete(s.Snapshot.SchemaDef, command); - - s.DeleteField(command); - }); - } - - protected Task On(LockField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanLock(s.Snapshot.SchemaDef, command); - - s.LockField(command); - }); - } - - protected Task On(HideField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanHide(s.Snapshot.SchemaDef, command); - - s.HideField(command); - }); - } - - protected Task On(ShowField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanShow(s.Snapshot.SchemaDef, command); - - s.ShowField(command); - }); - } - - protected Task On(DisableField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanDisable(s.Snapshot.SchemaDef, command); - - s.DisableField(command); - }); - } - - protected Task On(EnableField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanEnable(s.Snapshot.SchemaDef, command); - - s.EnableField(command); - }); - } - - protected Task On(UpdateField command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchemaField.CanUpdate(s.Snapshot.SchemaDef, command); - - s.UpdateField(command); - }); - } - - protected Task On(ReorderFields command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchema.CanReorder(s.Snapshot.SchemaDef, command); - - s.Reorder(command); - }); - } - - protected Task On(UpdateSchema command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchema.CanUpdate(s.Snapshot.SchemaDef, command); - - s.Update(command); - }); - } - - protected Task On(PublishSchema command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchema.CanPublish(s.Snapshot.SchemaDef, command); - - s.Publish(command); - }); - } - - protected Task On(UnpublishSchema command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchema.CanUnpublish(s.Snapshot.SchemaDef, command); - - s.Unpublish(command); - }); - } - - protected Task On(ConfigureScripts command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchema.CanConfigureScripts(s.Snapshot.SchemaDef, command); - - s.ConfigureScripts(command); - }); - } - - protected Task On(DeleteSchema command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, s => - { - GuardSchema.CanDelete(s.Snapshot.SchemaDef, command); - - s.Delete(command); - }); - } - - public async Task HandleAsync(CommandContext context, Func next) - { - await this.DispatchActionAsync(context.Command, context); - await next(); - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaDomainObject.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaDomainObject.cs deleted file mode 100644 index b57b31333..000000000 --- a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaDomainObject.cs +++ /dev/null @@ -1,229 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using Squidex.Domain.Apps.Core.Schemas; -using Squidex.Domain.Apps.Entities.Schemas.Commands; -using Squidex.Domain.Apps.Entities.Schemas.State; -using Squidex.Domain.Apps.Events; -using Squidex.Domain.Apps.Events.Schemas; -using Squidex.Infrastructure; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Domain.Apps.Entities.Schemas -{ - public sealed class SchemaDomainObject : SquidexDomainObjectBase - { - private readonly FieldRegistry registry; - - public SchemaDomainObject(FieldRegistry registry) - { - Guard.NotNull(registry, nameof(registry)); - - this.registry = registry; - } - - public SchemaDomainObject Create(CreateSchema command) - { - VerifyNotCreated(); - - var @event = SimpleMapper.Map(command, new SchemaCreated { SchemaId = new NamedId(command.SchemaId, command.Name) }); - - if (command.Fields != null) - { - @event.Fields = new List(); - - foreach (var commandField in command.Fields) - { - var eventField = SimpleMapper.Map(commandField, new SchemaCreatedField()); - - @event.Fields.Add(eventField); - } - } - - RaiseEvent(@event); - - return this; - } - - public SchemaDomainObject Add(AddField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new FieldAdded { FieldId = new NamedId(Snapshot.TotalFields + 1, command.Name) })); - - return this; - } - - public SchemaDomainObject UpdateField(UpdateField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, SimpleMapper.Map(command, new FieldUpdated())); - - return this; - } - - public SchemaDomainObject LockField(LockField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, new FieldLocked()); - - return this; - } - - public SchemaDomainObject HideField(HideField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, new FieldHidden()); - - return this; - } - - public SchemaDomainObject ShowField(ShowField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, new FieldShown()); - - return this; - } - - public SchemaDomainObject DisableField(DisableField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, new FieldDisabled()); - - return this; - } - - public SchemaDomainObject EnableField(EnableField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, new FieldEnabled()); - - return this; - } - - public SchemaDomainObject DeleteField(DeleteField command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(command, new FieldDeleted()); - - return this; - } - - public SchemaDomainObject Reorder(ReorderFields command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new SchemaFieldsReordered())); - - return this; - } - - public SchemaDomainObject Publish(PublishSchema command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new SchemaPublished())); - - return this; - } - - public SchemaDomainObject Unpublish(UnpublishSchema command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new SchemaUnpublished())); - - return this; - } - - public SchemaDomainObject ConfigureScripts(ConfigureScripts command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new ScriptsConfigured())); - - return this; - } - - public SchemaDomainObject Delete(DeleteSchema command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new SchemaDeleted())); - - return this; - } - - public SchemaDomainObject Update(UpdateSchema command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new SchemaUpdated())); - - return this; - } - - private void RaiseEvent(FieldCommand fieldCommand, FieldEvent @event) - { - SimpleMapper.Map(fieldCommand, @event); - - if (Snapshot.SchemaDef.FieldsById.TryGetValue(fieldCommand.FieldId, out var field)) - { - @event.FieldId = new NamedId(field.Id, field.Name); - } - - RaiseEvent(@event); - } - - private void RaiseEvent(SchemaEvent @event) - { - if (@event.SchemaId == null) - { - @event.SchemaId = new NamedId(Snapshot.Id, Snapshot.Name); - } - - if (@event.AppId == null) - { - @event.AppId = Snapshot.AppId; - } - - RaiseEvent(Envelope.Create(@event)); - } - - private void VerifyNotCreated() - { - if (Snapshot.SchemaDef != null) - { - throw new DomainException("Schema has already been created."); - } - } - - private void VerifyCreatedAndNotDeleted() - { - if (Snapshot.IsDeleted || Snapshot.SchemaDef == null) - { - throw new DomainException("Schema has already been deleted or not created yet."); - } - } - - public override void ApplyEvent(Envelope @event) - { - ApplySnapshot(Snapshot.Apply(@event, registry)); - } - } -} \ No newline at end of file diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs new file mode 100644 index 000000000..332129c30 --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs @@ -0,0 +1,330 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Squidex.Domain.Apps.Core.Schemas; +using Squidex.Domain.Apps.Entities.Schemas.Commands; +using Squidex.Domain.Apps.Entities.Schemas.Guards; +using Squidex.Domain.Apps.Entities.Schemas.State; +using Squidex.Domain.Apps.Events; +using Squidex.Domain.Apps.Events.Schemas; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Reflection; +using Squidex.Infrastructure.States; + +namespace Squidex.Domain.Apps.Entities.Schemas +{ + public sealed class SchemaGrain : DomainObjectGrain, ISchemaGrain + { + private readonly IAppProvider appProvider; + private readonly FieldRegistry registry; + + public SchemaGrain(IStore store, IAppProvider appProvider, FieldRegistry registry) + : base(store) + { + Guard.NotNull(appProvider, nameof(appProvider)); + Guard.NotNull(registry, nameof(registry)); + + this.appProvider = appProvider; + + this.registry = registry; + } + + public override Task ExecuteAsync(IAggregateCommand command) + { + switch (command) + { + case CreateSchema createSchema: + return CreateAsync(createSchema, async c => + { + await GuardSchema.CanCreate(c, appProvider); + + Create(c); + }); + + case AddField addField: + return UpdateReturnAsync(addField, c => + { + GuardSchemaField.CanAdd(Snapshot.SchemaDef, c); + + Add(c); + + return EntityCreatedResult.Create(Snapshot.SchemaDef.FieldsById.Values.First(x => x.Name == addField.Name).Id, Version); + }); + + case DeleteField deleteField: + return UpdateAsync(deleteField, c => + { + GuardSchemaField.CanDelete(Snapshot.SchemaDef, deleteField); + + DeleteField(c); + }); + + case LockField lockField: + return UpdateAsync(lockField, c => + { + GuardSchemaField.CanLock(Snapshot.SchemaDef, lockField); + + LockField(c); + }); + + case HideField hideField: + return UpdateAsync(hideField, c => + { + GuardSchemaField.CanHide(Snapshot.SchemaDef, c); + + HideField(c); + }); + + case ShowField showField: + return UpdateAsync(showField, c => + { + GuardSchemaField.CanShow(Snapshot.SchemaDef, c); + + ShowField(c); + }); + + case DisableField disableField: + return UpdateAsync(disableField, c => + { + GuardSchemaField.CanDisable(Snapshot.SchemaDef, c); + + DisableField(c); + }); + + case EnableField enableField: + return UpdateAsync(enableField, c => + { + GuardSchemaField.CanEnable(Snapshot.SchemaDef, c); + + EnableField(c); + }); + + case UpdateField updateField: + return UpdateAsync(updateField, c => + { + GuardSchemaField.CanUpdate(Snapshot.SchemaDef, c); + + UpdateField(c); + }); + + case ReorderFields reorderFields: + return UpdateAsync(reorderFields, c => + { + GuardSchema.CanReorder(Snapshot.SchemaDef, c); + + Reorder(c); + }); + + case UpdateSchema updateSchema: + return UpdateAsync(updateSchema, c => + { + GuardSchema.CanUpdate(Snapshot.SchemaDef, c); + + Update(c); + }); + + case PublishSchema publishSchema: + return UpdateAsync(publishSchema, c => + { + GuardSchema.CanPublish(Snapshot.SchemaDef, c); + + Publish(c); + }); + + case UnpublishSchema unpublishSchema: + return UpdateAsync(unpublishSchema, c => + { + GuardSchema.CanUnpublish(Snapshot.SchemaDef, c); + + Unpublish(c); + }); + + case ConfigureScripts configureScripts: + return UpdateAsync(configureScripts, c => + { + GuardSchema.CanConfigureScripts(Snapshot.SchemaDef, c); + + ConfigureScripts(c); + }); + + case DeleteSchema deleteSchema: + return UpdateAsync(deleteSchema, c => + { + GuardSchema.CanDelete(Snapshot.SchemaDef, c); + + Delete(c); + }); + + default: + throw new NotSupportedException(); + } + } + + public void Create(CreateSchema command) + { + var @event = SimpleMapper.Map(command, new SchemaCreated { SchemaId = new NamedId(command.SchemaId, command.Name) }); + + if (command.Fields != null) + { + @event.Fields = new List(); + + foreach (var commandField in command.Fields) + { + var eventField = SimpleMapper.Map(commandField, new SchemaCreatedField()); + + @event.Fields.Add(eventField); + } + } + + RaiseEvent(@event); + } + + public void Add(AddField command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new FieldAdded { FieldId = new NamedId(Snapshot.TotalFields + 1, command.Name) })); + } + + public void UpdateField(UpdateField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, SimpleMapper.Map(command, new FieldUpdated())); + } + + public void LockField(LockField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, new FieldLocked()); + } + + public void HideField(HideField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, new FieldHidden()); + } + + public void ShowField(ShowField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, new FieldShown()); + } + + public void DisableField(DisableField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, new FieldDisabled()); + } + + public void EnableField(EnableField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, new FieldEnabled()); + } + + public void DeleteField(DeleteField command) + { + VerifyNotDeleted(); + + RaiseEvent(command, new FieldDeleted()); + } + + public void Reorder(ReorderFields command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new SchemaFieldsReordered())); + } + + public void Publish(PublishSchema command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new SchemaPublished())); + } + + public void Unpublish(UnpublishSchema command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new SchemaUnpublished())); + } + + public void ConfigureScripts(ConfigureScripts command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new ScriptsConfigured())); + } + + public void Delete(DeleteSchema command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new SchemaDeleted())); + } + + public void Update(UpdateSchema command) + { + VerifyNotDeleted(); + + RaiseEvent(SimpleMapper.Map(command, new SchemaUpdated())); + } + + private void RaiseEvent(FieldCommand fieldCommand, FieldEvent @event) + { + SimpleMapper.Map(fieldCommand, @event); + + if (Snapshot.SchemaDef.FieldsById.TryGetValue(fieldCommand.FieldId, out var field)) + { + @event.FieldId = new NamedId(field.Id, field.Name); + } + + RaiseEvent(@event); + } + + private void RaiseEvent(SchemaEvent @event) + { + if (@event.SchemaId == null) + { + @event.SchemaId = new NamedId(Snapshot.Id, Snapshot.Name); + } + + if (@event.AppId == null) + { + @event.AppId = Snapshot.AppId; + } + + RaiseEvent(Envelope.Create(@event)); + } + + private void VerifyNotDeleted() + { + if (Snapshot.IsDeleted) + { + throw new DomainException("Schema has already been deleted."); + } + } + + public override void ApplyEvent(Envelope @event) + { + ApplySnapshot(Snapshot.Apply(@event, registry)); + } + } +} \ No newline at end of file diff --git a/src/Squidex.Infrastructure/Assets/AssetFile.cs b/src/Squidex.Infrastructure/Assets/AssetFile.cs index 3b59ba505..bbaa0917d 100644 --- a/src/Squidex.Infrastructure/Assets/AssetFile.cs +++ b/src/Squidex.Infrastructure/Assets/AssetFile.cs @@ -7,6 +7,7 @@ using System; using System.IO; +using Newtonsoft.Json; namespace Squidex.Infrastructure.Assets { @@ -20,11 +21,11 @@ namespace Squidex.Infrastructure.Assets public long FileSize { get; } + [JsonConstructor] public AssetFile(string fileName, string mimeType, long fileSize, Func openAction) { Guard.NotNullOrEmpty(fileName, nameof(fileName)); Guard.NotNullOrEmpty(mimeType, nameof(mimeType)); - Guard.NotNull(openAction, nameof(openAction)); Guard.GreaterEquals(fileSize, 0, nameof(fileSize)); FileName = fileName; diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs b/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs new file mode 100644 index 000000000..16636ef8b --- /dev/null +++ b/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs @@ -0,0 +1,204 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Orleans; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; +using Squidex.Infrastructure.States; + +namespace Squidex.Infrastructure.Commands +{ + public abstract class DomainObjectGrain : Grain, IDomainObjectGrain where T : IDomainState, new() + { + private readonly List> uncomittedEvents = new List>(); + private readonly IStore store; + private T snapshot = new T { Version = EtagVersion.Empty }; + private IPersistence persistence; + + public long Version + { + get { return snapshot.Version; } + } + + public long NewVersion + { + get { return snapshot.Version + uncomittedEvents.Count; } + } + + protected T Snapshot + { + get { return snapshot; } + } + + protected DomainObjectGrain(IStore store) + { + Guard.NotNull(store, nameof(store)); + + this.store = store; + } + + public override Task OnActivateAsync() + { + persistence = store.WithSnapshotsAndEventSourcing(GetType(), this.GetPrimaryKey(), ApplySnapshot, ApplyEvent); + + return persistence.ReadAsync(); + } + + public void RaiseEvent(IEvent @event) + { + RaiseEvent(Envelope.Create(@event)); + } + + public virtual void RaiseEvent(Envelope @event) + { + Guard.NotNull(@event, nameof(@event)); + + @event.SetAggregateId(this.GetPrimaryKey()); + + ApplyEvent(@event); + + uncomittedEvents.Add(@event); + } + + public IReadOnlyList> GetUncomittedEvents() + { + return uncomittedEvents; + } + + public void ClearUncommittedEvents() + { + uncomittedEvents.Clear(); + } + + public virtual void ApplySnapshot(T newSnapshot) + { + snapshot = newSnapshot; + } + + public virtual void ApplyEvent(Envelope @event) + { + } + + public Task WriteSnapshotAsync() + { + snapshot.Version = persistence.Version; + + return persistence.WriteSnapshotAsync(snapshot); + } + + protected Task CreateReturnAsync(TCommand command, Func> handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, handler, false); + } + + protected Task CreateReturnAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, x => Task.FromResult(handler(x)), false); + } + + protected Task CreateAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, x => handler(x).ContinueWith(t => null), false); + } + + protected Task CreateAsync(TCommand command, Action handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, x => { handler(x); return Task.FromResult(null); }, false); + } + + protected Task UpdateReturnAsync(TCommand command, Func> handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, handler, true); + } + + protected Task UpdateReturnAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, x => Task.FromResult(handler(x)), true); + } + + protected Task UpdateAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, x => handler(x).ContinueWith(t => null), true); + } + + protected Task UpdateAsync(TCommand command, Action handler) where TCommand : class, IAggregateCommand + { + return InvokeAsync(command, x => { handler(x); return Task.FromResult(null); }, true); + } + + private async Task InvokeAsync(TCommand command, Func> handler, bool isUpdate) where TCommand : class, IAggregateCommand + { + Guard.NotNull(command, nameof(command)); + + if (command.ExpectedVersion != EtagVersion.Any && command.ExpectedVersion != Version) + { + throw new DomainObjectVersionException(this.GetPrimaryKey().ToString(), GetType(), Version, command.ExpectedVersion); + } + + if (isUpdate && Version < 0) + { + DeactivateOnIdle(); + + throw new DomainObjectNotFoundException(this.GetPrimaryKey().ToString(), GetType()); + } + else if (!isUpdate && Version >= 0) + { + throw new DomainException("Object has already been created."); + } + + var previousSnapshot = snapshot; + try + { + var result = await handler(command); + + var events = uncomittedEvents.ToArray(); + + if (events.Length > 0) + { + snapshot.Version = NewVersion; + + await persistence.WriteEventsAsync(events); + await persistence.WriteSnapshotAsync(snapshot); + } + + if (result == null) + { + if (isUpdate) + { + result = new EntitySavedResult(Version); + } + else + { + result = EntityCreatedResult.Create(this.GetPrimaryKey(), Version); + } + } + + return result; + } + catch + { + snapshot = previousSnapshot; + + throw; + } + finally + { + uncomittedEvents.Clear(); + } + } + + public Task> ExecuteAsync(J command) + { + return ExecuteAsync(command.Value).ContinueWith(x => x.Result.AsJ()); + } + + public abstract Task ExecuteAsync(IAggregateCommand command); + } +} diff --git a/src/Squidex.Infrastructure/Commands/GrainCommandMiddleware.cs b/src/Squidex.Infrastructure/Commands/GrainCommandMiddleware.cs new file mode 100644 index 000000000..97ebe0b0d --- /dev/null +++ b/src/Squidex.Infrastructure/Commands/GrainCommandMiddleware.cs @@ -0,0 +1,46 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Threading.Tasks; +using Orleans; + +namespace Squidex.Infrastructure.Commands +{ + public class GrainCommandMiddleware : ICommandMiddleware where TCommand : IAggregateCommand where TGrain : IDomainObjectGrain + { + private readonly IGrainFactory grainFactory; + + public GrainCommandMiddleware(IGrainFactory grainFactory) + { + Guard.NotNull(grainFactory, nameof(grainFactory)); + + this.grainFactory = grainFactory; + } + + public async virtual Task HandleAsync(CommandContext context, Func next) + { + if (context.Command is TCommand typedCommand) + { + var result = await ExecuteCommandAsync(typedCommand); + + context.Complete(result); + } + + await next(); + } + + protected async Task ExecuteCommandAsync(TCommand typedCommand) + { + var grain = grainFactory.GetGrain(typedCommand.AggregateId); + + var result = await grain.ExecuteAsync(typedCommand); + + return result.Value; + } + } +} diff --git a/src/Squidex.Infrastructure/Commands/IDomainObjectGrain.cs b/src/Squidex.Infrastructure/Commands/IDomainObjectGrain.cs new file mode 100644 index 000000000..500db0245 --- /dev/null +++ b/src/Squidex.Infrastructure/Commands/IDomainObjectGrain.cs @@ -0,0 +1,20 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Threading.Tasks; +using Orleans; +using Squidex.Infrastructure.Orleans; + +namespace Squidex.Infrastructure.Commands +{ + public interface IDomainObjectGrain : IGrainWithGuidKey + { + Task WriteSnapshotAsync(); + + Task> ExecuteAsync(J command); + } +} diff --git a/src/Squidex.Infrastructure/Orleans/J.cs b/src/Squidex.Infrastructure/Orleans/J.cs new file mode 100644 index 000000000..cd1190790 --- /dev/null +++ b/src/Squidex.Infrastructure/Orleans/J.cs @@ -0,0 +1,18 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Newtonsoft.Json; + +#pragma warning disable SA1401 // Fields must be private + +namespace Squidex.Infrastructure.Orleans +{ + public static class J + { + public static JsonSerializer Serializer = new JsonSerializer(); + } +} diff --git a/src/Squidex.Infrastructure/Orleans/JExtensions.cs b/src/Squidex.Infrastructure/Orleans/JExtensions.cs new file mode 100644 index 000000000..49125b346 --- /dev/null +++ b/src/Squidex.Infrastructure/Orleans/JExtensions.cs @@ -0,0 +1,17 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +namespace Squidex.Infrastructure.Orleans +{ + public static class JExtensions + { + public static J AsJ(this T value) + { + return new J(value); + } + } +} diff --git a/src/Squidex.Infrastructure/Orleans/J{T}.cs b/src/Squidex.Infrastructure/Orleans/J{T}.cs new file mode 100644 index 000000000..7d7329998 --- /dev/null +++ b/src/Squidex.Infrastructure/Orleans/J{T}.cs @@ -0,0 +1,85 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.IO; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Orleans.CodeGeneration; +using Orleans.Serialization; + +namespace Squidex.Infrastructure.Orleans +{ + public struct J + { + private readonly T value; + + public T Value + { + get { return value; } + } + + [JsonConstructor] + public J(T value) + { + this.value = value; + } + + public static implicit operator T(J value) + { + return value.value; + } + + public static implicit operator J(T d) + { + return new J(d); + } + + public static Task> AsTask(T value) + { + return Task.FromResult>(value); + } + + [CopierMethod] + private static object Copy(object input, ICopyContext context) + { + return input; + } + + [SerializerMethod] + private static void Serialize(object input, ISerializationContext context, Type expected) + { + var stream = new MemoryStream(); + + using (var writer = new JsonTextWriter(new StreamWriter(stream))) + { + J.Serializer.Serialize(writer, input); + + writer.Flush(); + } + + var outBytes = stream.ToArray(); + + context.StreamWriter.Write(outBytes.Length); + context.StreamWriter.Write(outBytes); + } + + [DeserializerMethod] + private static object Deserialize(Type expected, IDeserializationContext context) + { + var outLength = context.StreamReader.ReadInt(); + var outBytes = context.StreamReader.ReadBytes(outLength); + + var stream = new MemoryStream(outBytes); + + using (var reader = new JsonTextReader(new StreamReader(stream))) + { + return J.Serializer.Deserialize(reader, expected); + } + } + } +} diff --git a/src/Squidex/Config/Domain/SerializationServices.cs b/src/Squidex/Config/Domain/SerializationServices.cs index f783f2601..45e7ad011 100644 --- a/src/Squidex/Config/Domain/SerializationServices.cs +++ b/src/Squidex/Config/Domain/SerializationServices.cs @@ -27,15 +27,17 @@ namespace Squidex.Config.Domain public static class SerializationServices { private static readonly TypeNameRegistry TypeNameRegistry = - new TypeNameRegistry() - .MapUnmapped(SquidexCoreModel.Assembly) - .MapUnmapped(SquidexEvents.Assembly) - .MapUnmapped(SquidexInfrastructure.Assembly) - .MapUnmapped(SquidexMigrations.Assembly); - + new TypeNameRegistry() + .MapUnmapped(SquidexCoreModel.Assembly) + .MapUnmapped(SquidexEvents.Assembly) + .MapUnmapped(SquidexInfrastructure.Assembly) + .MapUnmapped(SquidexMigrations.Assembly); private static readonly FieldRegistry FieldRegistry = new FieldRegistry(TypeNameRegistry); - private static JsonSerializerSettings ConfigureJson(JsonSerializerSettings settings, TypeNameHandling typeNameHandling) + public static readonly JsonSerializerSettings DefaultJsonSettings = new JsonSerializerSettings(); + public static readonly JsonSerializer DefaultJsonSerializer; + + private static void ConfigureJson(JsonSerializerSettings settings, TypeNameHandling typeNameHandling) { settings.SerializationBinder = new TypeNameSerializationBinder(TypeNameRegistry); @@ -65,22 +67,24 @@ namespace Squidex.Config.Domain settings.TypeNameHandling = typeNameHandling; settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); + } + + static SerializationServices() + { + ConfigureJson(DefaultJsonSettings, TypeNameHandling.Auto); + + DefaultJsonSerializer = JsonSerializer.Create(DefaultJsonSettings); - return settings; + BsonJsonConvention.Register(DefaultJsonSerializer); } public static IServiceCollection AddMySerializers(this IServiceCollection services) { - var serializerSettings = ConfigureJson(new JsonSerializerSettings(), TypeNameHandling.Auto); - var serializerInstance = JsonSerializer.Create(serializerSettings); - services.AddSingletonAs(t => FieldRegistry); - services.AddSingletonAs(t => serializerSettings); - services.AddSingletonAs(t => serializerInstance); + services.AddSingletonAs(t => DefaultJsonSettings); + services.AddSingletonAs(t => DefaultJsonSerializer); services.AddSingletonAs(t => TypeNameRegistry); - BsonJsonConvention.Register(serializerInstance); - return services; } diff --git a/src/Squidex/Config/Domain/WriteServices.cs b/src/Squidex/Config/Domain/WriteServices.cs index a40bd1c87..b1d1f0423 100644 --- a/src/Squidex/Config/Domain/WriteServices.cs +++ b/src/Squidex/Config/Domain/WriteServices.cs @@ -12,11 +12,13 @@ using Migrate_01; using Migrate_01.Migrations; using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Core.Scripting; +using Squidex.Domain.Apps.Entities; using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.Templates; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Contents; using Squidex.Domain.Apps.Entities.Rules; +using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Users; using Squidex.Infrastructure.Commands; @@ -59,10 +61,10 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() + services.AddSingletonAs>() .As(); - services.AddSingletonAs() + services.AddSingletonAs>() .As(); services.AddSingletonAs() @@ -92,19 +94,10 @@ namespace Squidex.Config.Domain services.AddTransientAs() .AsSelf(); - services.AddTransientAs() - .AsSelf(); - services.AddTransientAs() .AsSelf(); - services.AddTransientAs() - .AsSelf(); - - services.AddTransientAs() - .AsSelf(); - - services.AddSingleton(c => + services.AddSingleton(c => { var config = c.GetRequiredService>(); diff --git a/src/Squidex/Config/Orleans/SiloWrapper.cs b/src/Squidex/Config/Orleans/SiloWrapper.cs index 75b2dfd67..7e700fdf4 100644 --- a/src/Squidex/Config/Orleans/SiloWrapper.cs +++ b/src/Squidex/Config/Orleans/SiloWrapper.cs @@ -11,9 +11,11 @@ using Microsoft.Extensions.Configuration; using Orleans; using Orleans.Hosting; using Orleans.Runtime.Configuration; +using Squidex.Config.Domain; using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; using Squidex.Infrastructure.Log.Adapter; +using Squidex.Infrastructure.Orleans; namespace Squidex.Config.Orleans { @@ -38,6 +40,8 @@ namespace Squidex.Config.Orleans public SiloWrapper(IConfiguration configuration) { + J.Serializer = SerializationServices.DefaultJsonSerializer; + silo = SiloHostBuilder.CreateDefault() .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333).WithDashboard()) .UseContentRoot(Directory.GetCurrentDirectory()) From 5e8009f4584be70b26e32f38ae9119a94baa8317 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 12 Feb 2018 19:03:17 +0100 Subject: [PATCH 05/28] App and schema grain. --- .../AppProvider.cs | 46 +-- .../Apps/AppCommandMiddleware.cs | 200 ----------- .../Apps/AppDomainObject.cs | 228 ------------- .../Apps/AppGrain.cs | 320 ++++++++++++++++++ .../Apps/Guards/GuardAppClients.cs | 2 +- .../Apps/Guards/GuardAppContributors.cs | 2 +- .../Apps/Guards/GuardAppLanguages.cs | 2 +- .../Apps/IAppEntity.cs | 6 +- .../Apps/IAppGrain.cs | 18 + .../Rules/IRuleGrain.cs | 3 + .../Rules/RuleGrain.cs | 16 +- .../Schemas/ISchemaGrain.cs | 3 + .../Schemas/SchemaGrain.cs | 36 +- src/Squidex/Config/Domain/WriteServices.cs | 9 +- .../EnrichWithSchemaIdCommandMiddleware.cs | 2 +- tools/Migrate_01/Migrations/AddPatterns.cs | 21 +- tools/Migrate_01/Rebuilder.cs | 17 +- 17 files changed, 417 insertions(+), 514 deletions(-) delete mode 100644 src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs delete mode 100644 src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Apps/IAppGrain.cs diff --git a/src/Squidex.Domain.Apps.Entities/AppProvider.cs b/src/Squidex.Domain.Apps.Entities/AppProvider.cs index b2e028a12..a81cf8e22 100644 --- a/src/Squidex.Domain.Apps.Entities/AppProvider.cs +++ b/src/Squidex.Domain.Apps.Entities/AppProvider.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Orleans; using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.Repositories; using Squidex.Domain.Apps.Entities.Rules; @@ -16,52 +17,51 @@ using Squidex.Domain.Apps.Entities.Rules.Repositories; using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.Schemas.Repositories; using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities { public sealed class AppProvider : IAppProvider { + private readonly IGrainFactory grainFactory; private readonly IAppRepository appRepository; private readonly IRuleRepository ruleRepository; private readonly ISchemaRepository schemaRepository; - private readonly IStateFactory stateFactory; public AppProvider( + IGrainFactory grainFactory, IAppRepository appRepository, ISchemaRepository schemaRepository, - IStateFactory stateFactory, IRuleRepository ruleRepository) { + Guard.NotNull(grainFactory, nameof(grainFactory)); Guard.NotNull(appRepository, nameof(appRepository)); Guard.NotNull(schemaRepository, nameof(schemaRepository)); - Guard.NotNull(stateFactory, nameof(stateFactory)); Guard.NotNull(ruleRepository, nameof(ruleRepository)); + this.grainFactory = grainFactory; this.appRepository = appRepository; this.schemaRepository = schemaRepository; - this.stateFactory = stateFactory; this.ruleRepository = ruleRepository; } public async Task<(IAppEntity, ISchemaEntity)> GetAppWithSchemaAsync(Guid appId, Guid id) { - var app = await stateFactory.GetSingleAsync(appId); + var app = await grainFactory.GetGrain(appId).GetStateAsync(); - if (!IsFound(app)) + if (!IsFound(app.Value)) { return (null, null); } - var schema = await stateFactory.GetSingleAsync(id); + var schema = await grainFactory.GetGrain(id).GetStateAsync(); - if (!IsFound(schema) || schema.Snapshot.IsDeleted) + if (!IsFound(schema.Value) || schema.Value.IsDeleted) { return (null, null); } - return (app.Snapshot, schema.Snapshot); + return (app.Value, schema.Value); } public async Task GetAppAsync(string appName) @@ -73,7 +73,7 @@ namespace Squidex.Domain.Apps.Entities return null; } - return (await stateFactory.GetSingleAsync(appId)).Snapshot; + return (await grainFactory.GetGrain(appId).GetStateAsync()).Value; } public async Task GetSchemaAsync(Guid appId, string name) @@ -85,19 +85,19 @@ namespace Squidex.Domain.Apps.Entities return null; } - return (await stateFactory.GetSingleAsync(schemaId)).Snapshot; + return (await grainFactory.GetGrain(schemaId).GetStateAsync()).Value; } public async Task GetSchemaAsync(Guid appId, Guid id, bool allowDeleted = false) { - var schema = await stateFactory.GetSingleAsync(id); + var schema = await grainFactory.GetGrain(id).GetStateAsync(); - if (!IsFound(schema) || (schema.Snapshot.IsDeleted && !allowDeleted) || schema.Snapshot.AppId.Id != appId) + if (!IsFound(schema.Value) || (schema.Value.IsDeleted && !allowDeleted) || schema.Value.AppId.Id != appId) { return null; } - return schema.Snapshot; + return schema.Value; } public async Task> GetSchemasAsync(Guid appId) @@ -106,9 +106,9 @@ namespace Squidex.Domain.Apps.Entities var schemas = await Task.WhenAll( - ids.Select(id => stateFactory.GetSingleAsync(id))); + ids.Select(id => grainFactory.GetGrain(id).GetStateAsync())); - return schemas.Where(IsFound).Select(s => (ISchemaEntity)s.Snapshot).ToList(); + return schemas.Where(s => IsFound(s.Value)).Select(s => (ISchemaEntity)s.Value).ToList(); } public async Task> GetRulesAsync(Guid appId) @@ -117,9 +117,9 @@ namespace Squidex.Domain.Apps.Entities var rules = await Task.WhenAll( - ids.Select(id => stateFactory.GetSingleAsync(id))); + ids.Select(id => grainFactory.GetGrain(id).GetStateAsync())); - return rules.Where(IsFound).Select(r => (IRuleEntity)r.Snapshot).ToList(); + return rules.Where(r => IsFound(r.Value)).Select(r => (IRuleEntity)r.Value).ToList(); } public async Task> GetUserApps(string userId) @@ -128,9 +128,9 @@ namespace Squidex.Domain.Apps.Entities var apps = await Task.WhenAll( - ids.Select(id => stateFactory.GetSingleAsync(id))); + ids.Select(id => grainFactory.GetGrain(id).GetStateAsync())); - return apps.Where(IsFound).Select(a => (IAppEntity)a.Snapshot).ToList(); + return apps.Where(a => IsFound(a.Value)).Select(a => (IAppEntity)a.Value).ToList(); } private Task GetAppIdAsync(string name) @@ -143,9 +143,9 @@ namespace Squidex.Domain.Apps.Entities return await schemaRepository.FindSchemaIdAsync(appId, name); } - private static bool IsFound(IDomainObject app) + private static bool IsFound(IEntityWithVersion entity) { - return app.Version > EtagVersion.Empty; + return entity.Version > EtagVersion.Empty; } } } diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs deleted file mode 100644 index 829c1388c..000000000 --- a/src/Squidex.Domain.Apps.Entities/Apps/AppCommandMiddleware.cs +++ /dev/null @@ -1,200 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Squidex.Domain.Apps.Entities.Apps.Commands; -using Squidex.Domain.Apps.Entities.Apps.Guards; -using Squidex.Domain.Apps.Entities.Apps.Services; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Dispatching; -using Squidex.Shared.Users; - -namespace Squidex.Domain.Apps.Entities.Apps -{ - public class AppCommandMiddleware : ICommandMiddleware - { - private readonly IAggregateHandler handler; - private readonly IAppProvider appProvider; - private readonly IAppPlansProvider appPlansProvider; - private readonly IAppPlanBillingManager appPlansBillingManager; - private readonly IUserResolver userResolver; - - public AppCommandMiddleware( - IAggregateHandler handler, - IAppProvider appProvider, - IAppPlansProvider appPlansProvider, - IAppPlanBillingManager appPlansBillingManager, - IUserResolver userResolver) - { - Guard.NotNull(handler, nameof(handler)); - Guard.NotNull(appProvider, nameof(appProvider)); - Guard.NotNull(userResolver, nameof(userResolver)); - Guard.NotNull(appPlansProvider, nameof(appPlansProvider)); - Guard.NotNull(appPlansBillingManager, nameof(appPlansBillingManager)); - - this.handler = handler; - this.userResolver = userResolver; - this.appProvider = appProvider; - this.appPlansProvider = appPlansProvider; - this.appPlansBillingManager = appPlansBillingManager; - } - - protected async Task On(CreateApp command, CommandContext context) - { - var app = await handler.CreateSyncedAsync(context, async a => - { - await GuardApp.CanCreate(command, appProvider); - - a.Create(command); - - context.Complete(EntityCreatedResult.Create(command.AppId, a.Version)); - }); - } - - protected Task On(AssignContributor command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, async a => - { - await GuardAppContributors.CanAssign(a.Snapshot.Contributors, command, userResolver, appPlansProvider.GetPlan(a.Snapshot.Plan?.PlanId)); - - a.AssignContributor(command); - }); - } - - protected Task On(RemoveContributor command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppContributors.CanRemove(a.Snapshot.Contributors, command); - - a.RemoveContributor(command); - }); - } - - protected Task On(AttachClient command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppClients.CanAttach(a.Snapshot.Clients, command); - - a.AttachClient(command); - }); - } - - protected Task On(UpdateClient command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppClients.CanUpdate(a.Snapshot.Clients, command); - - a.UpdateClient(command); - }); - } - - protected Task On(RevokeClient command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppClients.CanRevoke(a.Snapshot.Clients, command); - - a.RevokeClient(command); - }); - } - - protected Task On(AddLanguage command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppLanguages.CanAdd(a.Snapshot.LanguagesConfig, command); - - a.AddLanguage(command); - }); - } - - protected Task On(RemoveLanguage command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppLanguages.CanRemove(a.Snapshot.LanguagesConfig, command); - - a.RemoveLanguage(command); - }); - } - - protected Task On(UpdateLanguage command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppLanguages.CanUpdate(a.Snapshot.LanguagesConfig, command); - - a.UpdateLanguage(command); - }); - } - - protected Task On(AddPattern command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppPattern.CanAdd(a.Snapshot.Patterns, command); - - a.AddPattern(command); - }); - } - - protected Task On(DeletePattern command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, a => - { - GuardAppPattern.CanDelete(a.Snapshot.Patterns, command); - - a.DeletePattern(command); - }); - } - - protected async Task On(UpdatePattern command, CommandContext context) - { - await handler.UpdateSyncedAsync(context, a => - { - GuardAppPattern.CanUpdate(a.Snapshot.Patterns, command); - - a.UpdatePattern(command); - }); - } - - protected Task On(ChangePlan command, CommandContext context) - { - return handler.UpdateSyncedAsync(context, async a => - { - GuardApp.CanChangePlan(command, a.Snapshot.Plan, appPlansProvider); - - if (command.FromCallback) - { - a.ChangePlan(command); - } - else - { - var result = await appPlansBillingManager.ChangePlanAsync(command.Actor.Identifier, a.Snapshot.Id, a.Snapshot.Name, command.PlanId); - - if (result is PlanChangedResult) - { - a.ChangePlan(command); - } - - context.Complete(result); - } - }); - } - - public async Task HandleAsync(CommandContext context, Func next) - { - await this.DispatchActionAsync(context.Command, context); - await next(); - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs deleted file mode 100644 index 2dedb3a7a..000000000 --- a/src/Squidex.Domain.Apps.Entities/Apps/AppDomainObject.cs +++ /dev/null @@ -1,228 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using Squidex.Domain.Apps.Core.Apps; -using Squidex.Domain.Apps.Entities.Apps.Commands; -using Squidex.Domain.Apps.Entities.Apps.State; -using Squidex.Domain.Apps.Events; -using Squidex.Domain.Apps.Events.Apps; -using Squidex.Infrastructure; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Domain.Apps.Entities.Apps -{ - public sealed class AppDomainObject : SquidexDomainObjectBase - { - private readonly InitialPatterns initialPatterns; - - public AppDomainObject(InitialPatterns initialPatterns) - { - Guard.NotNull(initialPatterns, nameof(initialPatterns)); - - this.initialPatterns = initialPatterns; - } - - public AppDomainObject Create(CreateApp command) - { - ThrowIfCreated(); - - var appId = new NamedId(command.AppId, command.Name); - - var events = new List - { - CreateInitalEvent(command.Name), - CreateInitialOwner(command.Actor), - CreateInitialLanguage() - }; - - foreach (var pattern in initialPatterns) - { - events.Add(CreateInitialPattern(pattern.Key, pattern.Value)); - } - - foreach (var @event in events) - { - @event.Actor = command.Actor; - @event.AppId = appId; - - RaiseEvent(@event); - } - - return this; - } - - public AppDomainObject UpdateLanguage(UpdateLanguage command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppLanguageUpdated())); - - return this; - } - - public AppDomainObject UpdateClient(UpdateClient command) - { - ThrowIfNotCreated(); - - if (!string.IsNullOrWhiteSpace(command.Name)) - { - RaiseEvent(SimpleMapper.Map(command, new AppClientRenamed())); - } - - if (command.Permission.HasValue) - { - RaiseEvent(SimpleMapper.Map(command, new AppClientUpdated { Permission = command.Permission.Value })); - } - - return this; - } - - public AppDomainObject AssignContributor(AssignContributor command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppContributorAssigned())); - - return this; - } - - public AppDomainObject RemoveContributor(RemoveContributor command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppContributorRemoved())); - - return this; - } - - public AppDomainObject AttachClient(AttachClient command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppClientAttached())); - - return this; - } - - public AppDomainObject RevokeClient(RevokeClient command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppClientRevoked())); - - return this; - } - - public AppDomainObject AddLanguage(AddLanguage command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppLanguageAdded())); - - return this; - } - - public AppDomainObject RemoveLanguage(RemoveLanguage command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppLanguageRemoved())); - - return this; - } - - public AppDomainObject ChangePlan(ChangePlan command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppPlanChanged())); - - return this; - } - - public AppDomainObject AddPattern(AddPattern command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppPatternAdded())); - - return this; - } - - public AppDomainObject DeletePattern(DeletePattern command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppPatternDeleted())); - - return this; - } - - public AppDomainObject UpdatePattern(UpdatePattern command) - { - ThrowIfNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new AppPatternUpdated())); - - return this; - } - - private void RaiseEvent(AppEvent @event) - { - if (@event.AppId == null) - { - @event.AppId = new NamedId(Snapshot.Id, Snapshot.Name); - } - - RaiseEvent(Envelope.Create(@event)); - } - - private static AppCreated CreateInitalEvent(string name) - { - return new AppCreated { Name = name }; - } - - private static AppPatternAdded CreateInitialPattern(Guid id, AppPattern pattern) - { - return new AppPatternAdded { PatternId = id, Name = pattern.Name, Pattern = pattern.Pattern, Message = pattern.Message }; - } - - private static AppLanguageAdded CreateInitialLanguage() - { - return new AppLanguageAdded { Language = Language.EN }; - } - - private static AppContributorAssigned CreateInitialOwner(RefToken actor) - { - return new AppContributorAssigned { ContributorId = actor.Identifier, Permission = AppContributorPermission.Owner }; - } - - private void ThrowIfNotCreated() - { - if (string.IsNullOrWhiteSpace(Snapshot.Name)) - { - throw new DomainException("App has not been created."); - } - } - - private void ThrowIfCreated() - { - if (!string.IsNullOrWhiteSpace(Snapshot.Name)) - { - throw new DomainException("App has already been created."); - } - } - - public override void ApplyEvent(Envelope @event) - { - ApplySnapshot(Snapshot.Apply(@event)); - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs new file mode 100644 index 000000000..ae1ad9337 --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs @@ -0,0 +1,320 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Squidex.Domain.Apps.Core.Apps; +using Squidex.Domain.Apps.Entities.Apps.Commands; +using Squidex.Domain.Apps.Entities.Apps.Guards; +using Squidex.Domain.Apps.Entities.Apps.Services; +using Squidex.Domain.Apps.Entities.Apps.State; +using Squidex.Domain.Apps.Events; +using Squidex.Domain.Apps.Events.Apps; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; +using Squidex.Infrastructure.Reflection; +using Squidex.Infrastructure.States; +using Squidex.Shared.Users; + +namespace Squidex.Domain.Apps.Entities.Apps +{ + public sealed class AppGrain : DomainObjectGrain, IAppGrain + { + private readonly InitialPatterns initialPatterns; + private readonly IAppProvider appProvider; + private readonly IAppPlansProvider appPlansProvider; + private readonly IAppPlanBillingManager appPlansBillingManager; + private readonly IUserResolver userResolver; + + public AppGrain( + IStore store, + IAppProvider appProvider, + IAppPlansProvider appPlansProvider, + IAppPlanBillingManager appPlansBillingManager, + IUserResolver userResolver, + InitialPatterns initialPatterns) + : base(store) + { + Guard.NotNull(initialPatterns, nameof(initialPatterns)); + Guard.NotNull(appProvider, nameof(appProvider)); + Guard.NotNull(userResolver, nameof(userResolver)); + Guard.NotNull(appPlansProvider, nameof(appPlansProvider)); + Guard.NotNull(appPlansBillingManager, nameof(appPlansBillingManager)); + + this.userResolver = userResolver; + this.appProvider = appProvider; + this.appPlansProvider = appPlansProvider; + this.appPlansBillingManager = appPlansBillingManager; + this.initialPatterns = initialPatterns; + } + + public override Task ExecuteAsync(IAggregateCommand command) + { + switch (command) + { + case CreateApp createApp: + return CreateAsync(createApp, async c => + { + await GuardApp.CanCreate(c, appProvider); + + Create(c); + }); + + case AssignContributor assigneContributor: + return UpdateAsync(assigneContributor, async c => + { + await GuardAppContributors.CanAssign(Snapshot.Contributors, c, userResolver, appPlansProvider.GetPlan(Snapshot.Plan?.PlanId)); + + AssignContributor(c); + }); + + case RemoveContributor removeContributor: + return UpdateAsync(removeContributor, c => + { + GuardAppContributors.CanRemove(Snapshot.Contributors, c); + + RemoveContributor(c); + }); + + case AttachClient attachClient: + return UpdateAsync(attachClient, c => + { + GuardAppClients.CanAttach(Snapshot.Clients, c); + + AttachClient(c); + }); + + case UpdateClient updateClient: + return UpdateAsync(updateClient, c => + { + GuardAppClients.CanUpdate(Snapshot.Clients, c); + + UpdateClient(c); + }); + + case RevokeClient revokeClient: + return UpdateAsync(revokeClient, c => + { + GuardAppClients.CanRevoke(Snapshot.Clients, c); + + RevokeClient(c); + }); + + case AddLanguage addLanguage: + return UpdateAsync(addLanguage, c => + { + GuardAppLanguages.CanAdd(Snapshot.LanguagesConfig, c); + + AddLanguage(c); + }); + + case RemoveLanguage removeLanguage: + return UpdateAsync(removeLanguage, c => + { + GuardAppLanguages.CanRemove(Snapshot.LanguagesConfig, c); + + RemoveLanguage(c); + }); + + case UpdateLanguage updateLanguage: + return UpdateAsync(updateLanguage, c => + { + GuardAppLanguages.CanUpdate(Snapshot.LanguagesConfig, c); + + UpdateLanguage(c); + }); + + case AddPattern addPattern: + return UpdateAsync(addPattern, c => + { + GuardAppPattern.CanAdd(Snapshot.Patterns, c); + + AddPattern(c); + }); + + case DeletePattern deletePattern: + return UpdateAsync(deletePattern, c => + { + GuardAppPattern.CanDelete(Snapshot.Patterns, c); + + DeletePattern(c); + }); + + case UpdatePattern updatePattern: + return UpdateAsync(updatePattern, c => + { + GuardAppPattern.CanUpdate(Snapshot.Patterns, c); + + UpdatePattern(c); + }); + + case ChangePlan changePlan: + return UpdateReturnAsync(changePlan, async c => + { + GuardApp.CanChangePlan(c, Snapshot.Plan, appPlansProvider); + + if (c.FromCallback) + { + ChangePlan(c); + + return null; + } + else + { + var result = await appPlansBillingManager.ChangePlanAsync(c.Actor.Identifier, Snapshot.Id, Snapshot.Name, c.PlanId); + + if (result is PlanChangedResult) + { + ChangePlan(c); + } + + return result; + } + }); + + default: + throw new NotSupportedException(); + } + } + + public void Create(CreateApp command) + { + var appId = new NamedId(command.AppId, command.Name); + + var events = new List + { + CreateInitalEvent(command.Name), + CreateInitialOwner(command.Actor), + CreateInitialLanguage() + }; + + foreach (var pattern in initialPatterns) + { + events.Add(CreateInitialPattern(pattern.Key, pattern.Value)); + } + + foreach (var @event in events) + { + @event.Actor = command.Actor; + @event.AppId = appId; + + RaiseEvent(@event); + } + } + + public void UpdateClient(UpdateClient command) + { + if (!string.IsNullOrWhiteSpace(command.Name)) + { + RaiseEvent(SimpleMapper.Map(command, new AppClientRenamed())); + } + + if (command.Permission.HasValue) + { + RaiseEvent(SimpleMapper.Map(command, new AppClientUpdated { Permission = command.Permission.Value })); + } + } + + public void UpdateLanguage(UpdateLanguage command) + { + RaiseEvent(SimpleMapper.Map(command, new AppLanguageUpdated())); + } + + public void AssignContributor(AssignContributor command) + { + RaiseEvent(SimpleMapper.Map(command, new AppContributorAssigned())); + } + + public void RemoveContributor(RemoveContributor command) + { + RaiseEvent(SimpleMapper.Map(command, new AppContributorRemoved())); + } + + public void AttachClient(AttachClient command) + { + RaiseEvent(SimpleMapper.Map(command, new AppClientAttached())); + } + + public void RevokeClient(RevokeClient command) + { + RaiseEvent(SimpleMapper.Map(command, new AppClientRevoked())); + } + + public void AddLanguage(AddLanguage command) + { + RaiseEvent(SimpleMapper.Map(command, new AppLanguageAdded())); + } + + public void RemoveLanguage(RemoveLanguage command) + { + RaiseEvent(SimpleMapper.Map(command, new AppLanguageRemoved())); + } + + public void ChangePlan(ChangePlan command) + { + RaiseEvent(SimpleMapper.Map(command, new AppPlanChanged())); + } + + public void AddPattern(AddPattern command) + { + RaiseEvent(SimpleMapper.Map(command, new AppPatternAdded())); + } + + public void DeletePattern(DeletePattern command) + { + RaiseEvent(SimpleMapper.Map(command, new AppPatternDeleted())); + } + + public void UpdatePattern(UpdatePattern command) + { + RaiseEvent(SimpleMapper.Map(command, new AppPatternUpdated())); + } + + private void RaiseEvent(AppEvent @event) + { + if (@event.AppId == null) + { + @event.AppId = new NamedId(Snapshot.Id, Snapshot.Name); + } + + RaiseEvent(Envelope.Create(@event)); + } + + private static AppCreated CreateInitalEvent(string name) + { + return new AppCreated { Name = name }; + } + + private static AppPatternAdded CreateInitialPattern(Guid id, AppPattern pattern) + { + return new AppPatternAdded { PatternId = id, Name = pattern.Name, Pattern = pattern.Pattern, Message = pattern.Message }; + } + + private static AppLanguageAdded CreateInitialLanguage() + { + return new AppLanguageAdded { Language = Language.EN }; + } + + private static AppContributorAssigned CreateInitialOwner(RefToken actor) + { + return new AppContributorAssigned { ContributorId = actor.Identifier, Permission = AppContributorPermission.Owner }; + } + + public override void ApplyEvent(Envelope @event) + { + ApplySnapshot(Snapshot.Apply(@event)); + } + + public Task> GetStateAsync() + { + return Task.FromResult(new J(Snapshot)); + } + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppClients.cs b/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppClients.cs index b46cf9240..3689ba571 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppClients.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppClients.cs @@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards if (!clients.TryGetValue(id, out var client)) { - throw new DomainObjectNotFoundException(id, "Clients", typeof(AppDomainObject)); + throw new DomainObjectNotFoundException(id, "Clients", typeof(AppGrain)); } return client; diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppContributors.cs b/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppContributors.cs index 08860f0e9..277a89c4c 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppContributors.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppContributors.cs @@ -74,7 +74,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards if (!contributors.ContainsKey(command.ContributorId)) { - throw new DomainObjectNotFoundException(command.ContributorId, "Contributors", typeof(AppDomainObject)); + throw new DomainObjectNotFoundException(command.ContributorId, "Contributors", typeof(AppGrain)); } } } diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppLanguages.cs b/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppLanguages.cs index a860def06..edb3b288c 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppLanguages.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppLanguages.cs @@ -90,7 +90,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards if (!languages.TryGetConfig(language, out var languageConfig)) { - throw new DomainObjectNotFoundException(language, "Languages", typeof(AppDomainObject)); + throw new DomainObjectNotFoundException(language, "Languages", typeof(AppGrain)); } return languageConfig; diff --git a/src/Squidex.Domain.Apps.Entities/Apps/IAppEntity.cs b/src/Squidex.Domain.Apps.Entities/Apps/IAppEntity.cs index facea56c0..88b6b7b17 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/IAppEntity.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/IAppEntity.cs @@ -9,7 +9,11 @@ using Squidex.Domain.Apps.Core.Apps; namespace Squidex.Domain.Apps.Entities.Apps { - public interface IAppEntity : IEntity, IEntityWithVersion + public interface IAppEntity : + IEntity, + IEntityWithCreatedBy, + IEntityWithLastModifiedBy, + IEntityWithVersion { string Name { get; } diff --git a/src/Squidex.Domain.Apps.Entities/Apps/IAppGrain.cs b/src/Squidex.Domain.Apps.Entities/Apps/IAppGrain.cs new file mode 100644 index 000000000..d98dd68b8 --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Apps/IAppGrain.cs @@ -0,0 +1,18 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Threading.Tasks; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.Orleans; + +namespace Squidex.Domain.Apps.Entities.Apps +{ + public interface IAppGrain : IDomainObjectGrain + { + Task> GetStateAsync(); + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs b/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs index 7bab17d69..4ba5432c2 100644 --- a/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Rules/IRuleGrain.cs @@ -5,11 +5,14 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Threading.Tasks; using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.Orleans; namespace Squidex.Domain.Apps.Entities.Rules { public interface IRuleGrain : IDomainObjectGrain { + Task> GetStateAsync(); } } diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs index 668296c4e..d61214ace 100644 --- a/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs @@ -15,6 +15,7 @@ using Squidex.Domain.Apps.Events.Rules; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.States; @@ -34,6 +35,8 @@ namespace Squidex.Domain.Apps.Entities.Rules public override Task ExecuteAsync(IAggregateCommand command) { + VerifyNotDeleted(); + switch (command) { case CreateRule createRule: @@ -83,29 +86,21 @@ namespace Squidex.Domain.Apps.Entities.Rules public void Update(UpdateRule command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new RuleUpdated())); } public void Enable(EnableRule command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new RuleEnabled())); } public void Disable(DisableRule command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new RuleDisabled())); } public void Delete(DeleteRule command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new RuleDeleted())); } @@ -131,5 +126,10 @@ namespace Squidex.Domain.Apps.Entities.Rules { ApplySnapshot(Snapshot.Apply(@event)); } + + public Task> GetStateAsync() + { + return Task.FromResult(new J(Snapshot)); + } } } diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs b/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs index 1f3b46dbf..ab41ae13e 100644 --- a/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Schemas/ISchemaGrain.cs @@ -5,11 +5,14 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Threading.Tasks; using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.Orleans; namespace Squidex.Domain.Apps.Entities.Schemas { public interface ISchemaGrain : IDomainObjectGrain { + Task> GetStateAsync(); } } diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs index 332129c30..219c42c42 100644 --- a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs @@ -18,6 +18,7 @@ using Squidex.Domain.Apps.Events.Schemas; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.States; @@ -41,6 +42,8 @@ namespace Squidex.Domain.Apps.Entities.Schemas public override Task ExecuteAsync(IAggregateCommand command) { + VerifyNotDeleted(); + switch (command) { case CreateSchema createSchema: @@ -191,99 +194,71 @@ namespace Squidex.Domain.Apps.Entities.Schemas public void Add(AddField command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new FieldAdded { FieldId = new NamedId(Snapshot.TotalFields + 1, command.Name) })); } public void UpdateField(UpdateField command) { - VerifyNotDeleted(); - RaiseEvent(command, SimpleMapper.Map(command, new FieldUpdated())); } public void LockField(LockField command) { - VerifyNotDeleted(); - RaiseEvent(command, new FieldLocked()); } public void HideField(HideField command) { - VerifyNotDeleted(); - RaiseEvent(command, new FieldHidden()); } public void ShowField(ShowField command) { - VerifyNotDeleted(); - RaiseEvent(command, new FieldShown()); } public void DisableField(DisableField command) { - VerifyNotDeleted(); - RaiseEvent(command, new FieldDisabled()); } public void EnableField(EnableField command) { - VerifyNotDeleted(); - RaiseEvent(command, new FieldEnabled()); } public void DeleteField(DeleteField command) { - VerifyNotDeleted(); - RaiseEvent(command, new FieldDeleted()); } public void Reorder(ReorderFields command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new SchemaFieldsReordered())); } public void Publish(PublishSchema command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new SchemaPublished())); } public void Unpublish(UnpublishSchema command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new SchemaUnpublished())); } public void ConfigureScripts(ConfigureScripts command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new ScriptsConfigured())); } public void Delete(DeleteSchema command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new SchemaDeleted())); } public void Update(UpdateSchema command) { - VerifyNotDeleted(); - RaiseEvent(SimpleMapper.Map(command, new SchemaUpdated())); } @@ -326,5 +301,10 @@ namespace Squidex.Domain.Apps.Entities.Schemas { ApplySnapshot(Snapshot.Apply(@event, registry)); } + + public Task> GetStateAsync() + { + return Task.FromResult(new J(Snapshot)); + } } } \ No newline at end of file diff --git a/src/Squidex/Config/Domain/WriteServices.cs b/src/Squidex/Config/Domain/WriteServices.cs index b1d1f0423..633695575 100644 --- a/src/Squidex/Config/Domain/WriteServices.cs +++ b/src/Squidex/Config/Domain/WriteServices.cs @@ -14,6 +14,7 @@ using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Core.Scripting; using Squidex.Domain.Apps.Entities; using Squidex.Domain.Apps.Entities.Apps; +using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Templates; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Contents; @@ -52,15 +53,15 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As(); - services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); + services.AddSingletonAs>() + .As(); + services.AddSingletonAs>() .As(); @@ -91,7 +92,7 @@ namespace Squidex.Config.Domain services.AddTransientAs() .AsSelf(); - services.AddTransientAs() + services.AddTransientAs() .AsSelf(); services.AddTransientAs() diff --git a/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs b/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs index 495131855..09b27c89d 100644 --- a/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs @@ -77,7 +77,7 @@ namespace Squidex.Pipeline.CommandMiddlewares if (schema == null) { - throw new DomainObjectNotFoundException(schemaName, typeof(SchemaDomainObject)); + throw new DomainObjectNotFoundException(schemaName, typeof(ISchemaEntity)); } schemaCommand.SchemaId = new NamedId(schema.Id, schema.Name); diff --git a/tools/Migrate_01/Migrations/AddPatterns.cs b/tools/Migrate_01/Migrations/AddPatterns.cs index 68aa6e9dd..ca06601ec 100644 --- a/tools/Migrate_01/Migrations/AddPatterns.cs +++ b/tools/Migrate_01/Migrations/AddPatterns.cs @@ -7,6 +7,7 @@ using System; using System.Threading.Tasks; +using Orleans; using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Repositories; @@ -18,14 +19,14 @@ namespace Migrate_01.Migrations public sealed class AddPatterns : IMigration { private readonly InitialPatterns initialPatterns; - private readonly IStateFactory stateFactory; + private readonly IGrainFactory grainFactory; private readonly IAppRepository appRepository; - public AddPatterns(InitialPatterns initialPatterns, IAppRepository appRepository, IStateFactory stateFactory) + public AddPatterns(InitialPatterns initialPatterns, IAppRepository appRepository, IGrainFactory grainFactory) { this.initialPatterns = initialPatterns; this.appRepository = appRepository; - this.stateFactory = stateFactory; + this.grainFactory = grainFactory; } public async Task UpdateAsync() @@ -34,27 +35,29 @@ namespace Migrate_01.Migrations foreach (var id in ids) { - var app = await stateFactory.GetSingleAsync(id); + var app = grainFactory.GetGrain(id); - if (app.Snapshot.Patterns.Count == 0) + var state = await app.GetStateAsync(); + + if (state.Value.Patterns.Count == 0) { foreach (var pattern in initialPatterns.Values) { var command = new AddPattern { - Actor = app.Snapshot.CreatedBy, - AppId = app.Snapshot.Id, + Actor = state.Value.CreatedBy, + AppId = state.Value.Id, Name = pattern.Name, PatternId = Guid.NewGuid(), Pattern = pattern.Pattern, Message = pattern.Message }; - app.AddPattern(command); + await app.ExecuteAsync(command); } - await app.WriteAsync(); + await app.WriteSnapshotAsync(); } } } diff --git a/tools/Migrate_01/Rebuilder.cs b/tools/Migrate_01/Rebuilder.cs index a4a350b9b..d93f3528f 100644 --- a/tools/Migrate_01/Rebuilder.cs +++ b/tools/Migrate_01/Rebuilder.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using Orleans; using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.State; @@ -39,7 +40,7 @@ namespace Migrate_01 private readonly ISnapshotStore snapshotContentStore; private readonly ISnapshotStore snapshotRuleStore; private readonly ISnapshotStore snapshotSchemaStore; - private readonly IStateFactory stateFactory; + private readonly IGrainFactory grainFactory; public Rebuilder( FieldRegistry fieldRegistry, @@ -50,7 +51,7 @@ namespace Migrate_01 ISnapshotStore snapshotAssetStore, ISnapshotStore snapshotRuleStore, ISnapshotStore snapshotSchemaStore, - IStateFactory stateFactory) + IGrainFactory grainFactory) { this.fieldRegistry = fieldRegistry; this.eventDataFormatter = eventDataFormatter; @@ -60,7 +61,7 @@ namespace Migrate_01 this.snapshotContentStore = snapshotContentStore; this.snapshotRuleStore = snapshotRuleStore; this.snapshotSchemaStore = snapshotSchemaStore; - this.stateFactory = stateFactory; + this.grainFactory = grainFactory; } public async Task RebuildAssetsAsync() @@ -79,9 +80,7 @@ namespace Migrate_01 { if (@event.Payload is AssetEvent assetEvent && handledIds.Add(assetEvent.AssetId)) { - var asset = await stateFactory.CreateAsync(assetEvent.AssetId); - - asset.ApplySnapshot(asset.Snapshot.Apply(@event)); + var asset = grainFactory.GetGrain(assetEvent.AssetId); await asset.WriteSnapshotAsync(); } @@ -107,19 +106,19 @@ namespace Migrate_01 { if (@event.Payload is SchemaEvent schemaEvent && handledIds.Add(schemaEvent.SchemaId.Id)) { - var schema = await stateFactory.GetSingleAsync(schemaEvent.SchemaId.Id); + var schema = grainFactory.GetGrain(schemaEvent.SchemaId.Id); await schema.WriteSnapshotAsync(); } else if (@event.Payload is RuleEvent ruleEvent && handledIds.Add(ruleEvent.RuleId)) { - var rule = await stateFactory.GetSingleAsync(ruleEvent.RuleId); + var rule = grainFactory.GetGrain(ruleEvent.RuleId); await rule.WriteSnapshotAsync(); } else if (@event.Payload is AppEvent appEvent && handledIds.Add(appEvent.AppId.Id)) { - var app = await stateFactory.GetSingleAsync(appEvent.AppId.Id); + var app = grainFactory.GetGrain(appEvent.AppId.Id); await app.WriteSnapshotAsync(); } From 92a5832ddf1d91f7ea8be4eb216dd804061e7a66 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 12 Feb 2018 22:35:32 +0100 Subject: [PATCH 06/28] Tests for infrastructure. --- .../AppProvider.cs | 1 - .../Contents/ContentCommandMiddleware.cs | 158 ---------- .../Contents/ContentDomainObject.cs | 126 -------- .../Contents/ContentGrain.cs | 232 ++++++++++++++ .../Contents/ContentOperationContext.cs | 18 +- .../Contents/IContentGrain.cs | 6 +- .../SquidexDomainObjectBase.cs | 26 -- .../Commands/AggregateHandler.cs | 149 --------- .../Commands/CommandExtensions.cs | 21 -- .../Commands/DomainObjectBase.cs | 104 ------- .../Commands/DomainObjectGrain.cs | 16 +- .../Commands/IAggregateHandler.cs | 23 -- .../Commands/IDomainObject.cs | 20 -- .../Grains/EventConsumerGrain.cs | 34 ++- .../Grains/EventConsumerManagerGrain.cs | 24 +- .../Grains/IEventConsumerGrain.cs | 3 +- .../Grains/IEventConsumerManagerGrain.cs | 2 +- .../Grains/OrleansEventNotifier.cs | 2 +- .../EventSourcing/IEventNotifier.cs | 4 - src/Squidex.Infrastructure/Orleans/J{T}.cs | 6 +- .../States/IStateFactory.cs | 31 -- .../States/IStatefulObject.cs | 16 - .../States/InvalidateMessage.cs | 14 - .../States/StateFactory.cs | 158 ---------- src/Squidex/Config/Domain/ReadServices.cs | 5 - src/Squidex/Config/Domain/WriteServices.cs | 7 +- .../EnrichWithAppIdCommandMiddleware.cs | 27 +- .../EnrichWithSchemaIdCommandMiddleware.cs | 48 +-- .../Commands/AggregateHandlerTests.cs | 284 ------------------ .../Commands/DomainObjectBaseTests.cs | 88 ------ .../Commands/DomainObjectGrainTests.cs | 284 ++++++++++++++++++ .../DefaultEventNotifierTests.cs | 49 --- .../Grains/EventConsumerGrainTests.cs | 173 ++++++----- .../Grains/EventConsumerManagerGrainTests.cs | 162 ++++++++++ .../Grains/EventConsumerManagerTests.cs | 120 -------- .../Grains/OrleansEventNotifierTests.cs | 39 +++ .../EventSourcing/PollingSubscriptionTests.cs | 28 +- .../Orleans/BootstrapTests.cs | 39 +++ .../Orleans/JsonExternalSerializerTests.cs | 80 +++++ .../States/PersistenceEventSourcingTests.cs | 186 +++++------- .../States/PersistenceSnapshotTests.cs | 171 ++++------- .../States/StateFactoryTests.cs | 145 --------- .../Tasks/AsyncLockPoolTests.cs | 38 +++ .../Tasks/AsyncLockTests.cs | 38 +++ .../TestHelpers/MyCommand.cs | 4 +- tools/Migrate_01/Migrations/AddPatterns.cs | 1 - 46 files changed, 1249 insertions(+), 1961 deletions(-) delete mode 100644 src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs delete mode 100644 src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs create mode 100644 src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs rename tests/Squidex.Infrastructure.Tests/TestHelpers/MyDomainObject.cs => src/Squidex.Domain.Apps.Entities/Contents/IContentGrain.cs (68%) delete mode 100644 src/Squidex.Domain.Apps.Entities/SquidexDomainObjectBase.cs delete mode 100644 src/Squidex.Infrastructure/Commands/AggregateHandler.cs delete mode 100644 src/Squidex.Infrastructure/Commands/DomainObjectBase.cs delete mode 100644 src/Squidex.Infrastructure/Commands/IAggregateHandler.cs delete mode 100644 src/Squidex.Infrastructure/Commands/IDomainObject.cs delete mode 100644 src/Squidex.Infrastructure/States/IStateFactory.cs delete mode 100644 src/Squidex.Infrastructure/States/IStatefulObject.cs delete mode 100644 src/Squidex.Infrastructure/States/InvalidateMessage.cs delete mode 100644 src/Squidex.Infrastructure/States/StateFactory.cs delete mode 100644 tests/Squidex.Infrastructure.Tests/Commands/AggregateHandlerTests.cs delete mode 100644 tests/Squidex.Infrastructure.Tests/Commands/DomainObjectBaseTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/Commands/DomainObjectGrainTests.cs delete mode 100644 tests/Squidex.Infrastructure.Tests/EventSourcing/DefaultEventNotifierTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerGrainTests.cs delete mode 100644 tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/OrleansEventNotifierTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/Orleans/BootstrapTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs delete mode 100644 tests/Squidex.Infrastructure.Tests/States/StateFactoryTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockPoolTests.cs create mode 100644 tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockTests.cs diff --git a/src/Squidex.Domain.Apps.Entities/AppProvider.cs b/src/Squidex.Domain.Apps.Entities/AppProvider.cs index a81cf8e22..29a4e9283 100644 --- a/src/Squidex.Domain.Apps.Entities/AppProvider.cs +++ b/src/Squidex.Domain.Apps.Entities/AppProvider.cs @@ -17,7 +17,6 @@ using Squidex.Domain.Apps.Entities.Rules.Repositories; using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.Schemas.Repositories; using Squidex.Infrastructure; -using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities { diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs deleted file mode 100644 index 7674f1512..000000000 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs +++ /dev/null @@ -1,158 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Squidex.Domain.Apps.Core.Scripting; -using Squidex.Domain.Apps.Entities.Assets.Repositories; -using Squidex.Domain.Apps.Entities.Contents.Commands; -using Squidex.Domain.Apps.Entities.Contents.Guards; -using Squidex.Domain.Apps.Entities.Contents.Repositories; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Dispatching; - -namespace Squidex.Domain.Apps.Entities.Contents -{ - public class ContentCommandMiddleware : ICommandMiddleware - { - private readonly IAggregateHandler handler; - private readonly IAppProvider appProvider; - private readonly IAssetRepository assetRepository; - private readonly IContentRepository contentRepository; - private readonly IScriptEngine scriptEngine; - - public ContentCommandMiddleware( - IAggregateHandler handler, - IAppProvider appProvider, - IAssetRepository assetRepository, - IScriptEngine scriptEngine, - IContentRepository contentRepository) - { - Guard.NotNull(handler, nameof(handler)); - Guard.NotNull(appProvider, nameof(appProvider)); - Guard.NotNull(scriptEngine, nameof(scriptEngine)); - Guard.NotNull(assetRepository, nameof(assetRepository)); - Guard.NotNull(contentRepository, nameof(contentRepository)); - - this.handler = handler; - this.appProvider = appProvider; - this.scriptEngine = scriptEngine; - this.assetRepository = assetRepository; - this.contentRepository = contentRepository; - } - - protected async Task On(CreateContent command, CommandContext context) - { - await handler.CreateAsync(context, async content => - { - GuardContent.CanCreate(command); - - var operationContext = await CreateContext(command, content, () => "Failed to create content."); - - if (command.Publish) - { - await operationContext.ExecuteScriptAsync(x => x.ScriptChange, "Published"); - } - - await operationContext.ExecuteScriptAndTransformAsync(x => x.ScriptCreate, "Create"); - await operationContext.EnrichAsync(); - await operationContext.ValidateAsync(false); - - content.Create(command); - - context.Complete(EntityCreatedResult.Create(command.Data, content.Version)); - }); - } - - protected async Task On(UpdateContent command, CommandContext context) - { - await handler.UpdateAsync(context, async content => - { - GuardContent.CanUpdate(command); - - var operationContext = await CreateContext(command, content, () => "Failed to update content."); - - await operationContext.ValidateAsync(true); - await operationContext.ExecuteScriptAndTransformAsync(x => x.ScriptUpdate, "Update"); - - content.Update(command); - - context.Complete(new ContentDataChangedResult(content.Snapshot.Data, content.Version)); - }); - } - - protected async Task On(PatchContent command, CommandContext context) - { - await handler.UpdateAsync(context, async content => - { - GuardContent.CanPatch(command); - - var operationContext = await CreateContext(command, content, () => "Failed to patch content."); - - await operationContext.ValidateAsync(true); - await operationContext.ExecuteScriptAndTransformAsync(x => x.ScriptUpdate, "Patch"); - - content.Patch(command); - - context.Complete(new ContentDataChangedResult(content.Snapshot.Data, content.Version)); - }); - } - - protected Task On(ChangeContentStatus command, CommandContext context) - { - return handler.UpdateAsync(context, async content => - { - GuardContent.CanChangeContentStatus(content.Snapshot.Status, command); - - if (!command.DueTime.HasValue) - { - var operationContext = await CreateContext(command, content, () => "Failed to patch content."); - - await operationContext.ExecuteScriptAsync(x => x.ScriptChange, command.Status); - } - - content.ChangeStatus(command); - }); - } - - protected Task On(DeleteContent command, CommandContext context) - { - return handler.UpdateAsync(context, async content => - { - GuardContent.CanDelete(command); - - var operationContext = await CreateContext(command, content, () => "Failed to delete content."); - - await operationContext.ExecuteScriptAsync(x => x.ScriptDelete, "Delete"); - - content.Delete(command); - }); - } - - public async Task HandleAsync(CommandContext context, Func next) - { - await this.DispatchActionAsync(context.Command, context); - await next(); - } - - private async Task CreateContext(ContentCommand command, ContentDomainObject content, Func message) - { - var operationContext = - await ContentOperationContext.CreateAsync( - contentRepository, - content, - command, - appProvider, - assetRepository, - scriptEngine, - message); - - return operationContext; - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs deleted file mode 100644 index 47db34ab1..000000000 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs +++ /dev/null @@ -1,126 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Domain.Apps.Core.Contents; -using Squidex.Domain.Apps.Entities.Contents.Commands; -using Squidex.Domain.Apps.Entities.Contents.State; -using Squidex.Domain.Apps.Events; -using Squidex.Domain.Apps.Events.Contents; -using Squidex.Infrastructure; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Domain.Apps.Entities.Contents -{ - public sealed class ContentDomainObject : SquidexDomainObjectBase - { - public ContentDomainObject Create(CreateContent command) - { - VerifyNotCreated(); - - RaiseEvent(SimpleMapper.Map(command, new ContentCreated())); - - if (command.Publish) - { - RaiseEvent(SimpleMapper.Map(command, new ContentStatusChanged { Status = Status.Published })); - } - - return this; - } - - public ContentDomainObject Delete(DeleteContent command) - { - VerifyCreatedAndNotDeleted(); - - RaiseEvent(SimpleMapper.Map(command, new ContentDeleted())); - - return this; - } - - public ContentDomainObject ChangeStatus(ChangeContentStatus command) - { - VerifyCreatedAndNotDeleted(); - - if (command.DueTime.HasValue) - { - RaiseEvent(SimpleMapper.Map(command, new ContentStatusScheduled { DueTime = command.DueTime.Value })); - } - else - { - RaiseEvent(SimpleMapper.Map(command, new ContentStatusChanged())); - } - - return this; - } - - public ContentDomainObject Update(UpdateContent command) - { - VerifyCreatedAndNotDeleted(); - - if (!command.Data.Equals(Snapshot.Data)) - { - RaiseEvent(SimpleMapper.Map(command, new ContentUpdated())); - } - - return this; - } - - public ContentDomainObject Patch(PatchContent command) - { - VerifyCreatedAndNotDeleted(); - - var newData = command.Data.MergeInto(Snapshot.Data); - - if (!newData.Equals(Snapshot.Data)) - { - var @event = SimpleMapper.Map(command, new ContentUpdated()); - - @event.Data = newData; - - RaiseEvent(@event); - } - - return this; - } - - private void RaiseEvent(SchemaEvent @event) - { - if (@event.AppId == null) - { - @event.AppId = Snapshot.AppId; - } - - if (@event.SchemaId == null) - { - @event.SchemaId = Snapshot.SchemaId; - } - - RaiseEvent(Envelope.Create(@event)); - } - - private void VerifyNotCreated() - { - if (Snapshot.Data != null) - { - throw new DomainException("Content has already been created."); - } - } - - private void VerifyCreatedAndNotDeleted() - { - if (Snapshot.IsDeleted || Snapshot.Data == null) - { - throw new DomainException("Content has already been deleted or not created yet."); - } - } - - public override void ApplyEvent(Envelope @event) - { - ApplySnapshot(Snapshot.Apply(@event)); - } - } -} diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs new file mode 100644 index 000000000..b1f880328 --- /dev/null +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs @@ -0,0 +1,232 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Threading.Tasks; +using Squidex.Domain.Apps.Core.Contents; +using Squidex.Domain.Apps.Core.Scripting; +using Squidex.Domain.Apps.Entities.Assets.Repositories; +using Squidex.Domain.Apps.Entities.Contents.Commands; +using Squidex.Domain.Apps.Entities.Contents.Guards; +using Squidex.Domain.Apps.Entities.Contents.Repositories; +using Squidex.Domain.Apps.Entities.Contents.State; +using Squidex.Domain.Apps.Events; +using Squidex.Domain.Apps.Events.Contents; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Reflection; +using Squidex.Infrastructure.States; + +namespace Squidex.Domain.Apps.Entities.Contents +{ + public sealed class ContentGrain : DomainObjectGrain, IContentGrain + { + private readonly IAppProvider appProvider; + private readonly IAssetRepository assetRepository; + private readonly IContentRepository contentRepository; + private readonly IScriptEngine scriptEngine; + + public ContentGrain( + IStore store, + IAppProvider appProvider, + IAssetRepository assetRepository, + IScriptEngine scriptEngine, + IContentRepository contentRepository) + : base(store) + { + Guard.NotNull(appProvider, nameof(appProvider)); + Guard.NotNull(scriptEngine, nameof(scriptEngine)); + Guard.NotNull(assetRepository, nameof(assetRepository)); + Guard.NotNull(contentRepository, nameof(contentRepository)); + + this.appProvider = appProvider; + this.scriptEngine = scriptEngine; + this.assetRepository = assetRepository; + this.contentRepository = contentRepository; + } + + public override Task ExecuteAsync(IAggregateCommand command) + { + VerifyNotDeleted(); + + switch (command) + { + case CreateContent createContent: + return CreateReturnAsync(createContent, async c => + { + GuardContent.CanCreate(c); + + var operationContext = await CreateContext(c, () => "Failed to create content."); + + if (c.Publish) + { + await operationContext.ExecuteScriptAsync(x => x.ScriptChange, "Published"); + } + + await operationContext.ExecuteScriptAndTransformAsync(x => x.ScriptCreate, "Create"); + await operationContext.EnrichAsync(); + await operationContext.ValidateAsync(false); + + Create(c); + + return EntityCreatedResult.Create(c.Data, Version); + }); + + case UpdateContent updateContent: + return UpdateReturnAsync(updateContent, async c => + { + GuardContent.CanUpdate(c); + + var operationContext = await CreateContext(c, () => "Failed to update content."); + + await operationContext.ValidateAsync(true); + await operationContext.ExecuteScriptAndTransformAsync(x => x.ScriptUpdate, "Update"); + + Update(c); + + return new ContentDataChangedResult(Snapshot.Data, Version); + }); + + case PatchContent patchContent: + return UpdateReturnAsync(patchContent, async c => + { + GuardContent.CanPatch(c); + + var operationContext = await CreateContext(c, () => "Failed to patch content."); + + await operationContext.ValidateAsync(true); + await operationContext.ExecuteScriptAndTransformAsync(x => x.ScriptUpdate, "Patch"); + + Patch(c); + + return new ContentDataChangedResult(Snapshot.Data, Version); + }); + + case ChangeContentStatus patchContent: + return UpdateAsync(patchContent, async c => + { + GuardContent.CanChangeContentStatus(Snapshot.Status, c); + + if (!c.DueTime.HasValue) + { + var operationContext = await CreateContext(c, () => "Failed to patch content."); + + await operationContext.ExecuteScriptAsync(x => x.ScriptChange, c.Status); + } + + ChangeStatus(c); + }); + + case DeleteContent deleteContent: + return UpdateAsync(deleteContent, async c => + { + GuardContent.CanDelete(c); + + var operationContext = await CreateContext(c, () => "Failed to delete content."); + + await operationContext.ExecuteScriptAsync(x => x.ScriptDelete, "Delete"); + + Delete(c); + }); + + default: + throw new NotSupportedException(); + } + } + + public void Create(CreateContent command) + { + RaiseEvent(SimpleMapper.Map(command, new ContentCreated())); + + if (command.Publish) + { + RaiseEvent(SimpleMapper.Map(command, new ContentStatusChanged { Status = Status.Published })); + } + } + + public void Update(UpdateContent command) + { + if (!command.Data.Equals(Snapshot.Data)) + { + RaiseEvent(SimpleMapper.Map(command, new ContentUpdated())); + } + } + + public void ChangeStatus(ChangeContentStatus command) + { + if (command.DueTime.HasValue) + { + RaiseEvent(SimpleMapper.Map(command, new ContentStatusScheduled { DueTime = command.DueTime.Value })); + } + else + { + RaiseEvent(SimpleMapper.Map(command, new ContentStatusChanged())); + } + } + + public void Patch(PatchContent command) + { + var newData = command.Data.MergeInto(Snapshot.Data); + + if (!newData.Equals(Snapshot.Data)) + { + var @event = SimpleMapper.Map(command, new ContentUpdated()); + + @event.Data = newData; + + RaiseEvent(@event); + } + } + + public void Delete(DeleteContent command) + { + RaiseEvent(SimpleMapper.Map(command, new ContentDeleted())); + } + + private void RaiseEvent(SchemaEvent @event) + { + if (@event.AppId == null) + { + @event.AppId = Snapshot.AppId; + } + + if (@event.SchemaId == null) + { + @event.SchemaId = Snapshot.SchemaId; + } + + RaiseEvent(Envelope.Create(@event)); + } + + private void VerifyNotDeleted() + { + if (Snapshot.IsDeleted) + { + throw new DomainException("Content has already been deleted."); + } + } + + public override void ApplyEvent(Envelope @event) + { + ApplySnapshot(Snapshot.Apply(@event)); + } + + private async Task CreateContext(ContentCommand command, Func message) + { + var operationContext = + await ContentOperationContext.CreateAsync(command, Snapshot, + contentRepository, + appProvider, + assetRepository, + scriptEngine, + message); + + return operationContext; + } + } +} diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs index 8660af246..82963a379 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs @@ -24,9 +24,9 @@ namespace Squidex.Domain.Apps.Entities.Contents { public sealed class ContentOperationContext { - private ContentDomainObject content; private ContentCommand command; private IContentRepository contentRepository; + private IContentEntity content; private IAssetRepository assetRepository; private IScriptEngine scriptEngine; private ISchemaEntity schemaEntity; @@ -34,16 +34,16 @@ namespace Squidex.Domain.Apps.Entities.Contents private Func message; public static async Task CreateAsync( - IContentRepository contentRepository, - ContentDomainObject content, ContentCommand command, + IContentEntity content, + IContentRepository contentRepository, IAppProvider appProvider, IAssetRepository assetRepository, IScriptEngine scriptEngine, Func message) { - var a = content.Snapshot.AppId; - var s = content.Snapshot.SchemaId; + var a = content.AppId; + var s = content.SchemaId; if (command is CreateContent createContent) { @@ -88,11 +88,11 @@ namespace Squidex.Domain.Apps.Entities.Contents new ValidationContext( (contentIds, schemaId) => { - return QueryContentsAsync(content.Snapshot.AppId.Id, schemaId, contentIds); + return QueryContentsAsync(content.AppId.Id, schemaId, contentIds); }, assetIds => { - return QueryAssetsAsync(content.Snapshot.AppId.Id, assetIds); + return QueryAssetsAsync(content.AppId.Id, assetIds); }); if (partial) @@ -125,7 +125,7 @@ namespace Squidex.Domain.Apps.Entities.Contents { if (command is ContentDataCommand dataCommand) { - var ctx = new ScriptContext { ContentId = content.Snapshot.Id, OldData = content.Snapshot.Data, User = command.User, Operation = operation.ToString(), Data = dataCommand.Data }; + var ctx = new ScriptContext { ContentId = content.Id, OldData = content.Data, User = command.User, Operation = operation.ToString(), Data = dataCommand.Data }; dataCommand.Data = scriptEngine.ExecuteAndTransform(ctx, script(schemaEntity)); } @@ -135,7 +135,7 @@ namespace Squidex.Domain.Apps.Entities.Contents public Task ExecuteScriptAsync(Func script, object operation) { - var ctx = new ScriptContext { ContentId = content.Snapshot.Id, OldData = content.Snapshot.Data, User = command.User, Operation = operation.ToString() }; + var ctx = new ScriptContext { ContentId = content.Id, OldData = content.Data, User = command.User, Operation = operation.ToString() }; scriptEngine.Execute(ctx, script(schemaEntity)); diff --git a/tests/Squidex.Infrastructure.Tests/TestHelpers/MyDomainObject.cs b/src/Squidex.Domain.Apps.Entities/Contents/IContentGrain.cs similarity index 68% rename from tests/Squidex.Infrastructure.Tests/TestHelpers/MyDomainObject.cs rename to src/Squidex.Domain.Apps.Entities/Contents/IContentGrain.cs index 0b28e17b3..0b2d547c1 100644 --- a/tests/Squidex.Infrastructure.Tests/TestHelpers/MyDomainObject.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/IContentGrain.cs @@ -1,15 +1,15 @@ // ========================================================================== // Squidex Headless CMS // ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) +// Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Squidex.Infrastructure.Commands; -namespace Squidex.Infrastructure.TestHelpers +namespace Squidex.Domain.Apps.Entities.Contents { - internal sealed class MyDomainObject : DomainObjectBase + public interface IContentGrain : IDomainObjectGrain { } } diff --git a/src/Squidex.Domain.Apps.Entities/SquidexDomainObjectBase.cs b/src/Squidex.Domain.Apps.Entities/SquidexDomainObjectBase.cs deleted file mode 100644 index 63f0f94ed..000000000 --- a/src/Squidex.Domain.Apps.Entities/SquidexDomainObjectBase.cs +++ /dev/null @@ -1,26 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Domain.Apps.Events; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.EventSourcing; - -namespace Squidex.Domain.Apps.Entities -{ - public abstract class SquidexDomainObjectBase : DomainObjectBase where T : IDomainState, new() - { - public override void RaiseEvent(Envelope @event) - { - if (@event.Payload is AppEvent appEvent) - { - @event.SetAppId(appEvent.AppId.Id); - } - - base.RaiseEvent(@event); - } - } -} diff --git a/src/Squidex.Infrastructure/Commands/AggregateHandler.cs b/src/Squidex.Infrastructure/Commands/AggregateHandler.cs deleted file mode 100644 index a05e4a5b7..000000000 --- a/src/Squidex.Infrastructure/Commands/AggregateHandler.cs +++ /dev/null @@ -1,149 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Squidex.Infrastructure.States; -using Squidex.Infrastructure.Tasks; - -namespace Squidex.Infrastructure.Commands -{ - public sealed class AggregateHandler : IAggregateHandler - { - private readonly AsyncLockPool lockPool = new AsyncLockPool(10000); - private readonly IStateFactory stateFactory; - private readonly IServiceProvider serviceProvider; - - public AggregateHandler(IStateFactory stateFactory, IServiceProvider serviceProvider) - { - Guard.NotNull(stateFactory, nameof(stateFactory)); - Guard.NotNull(serviceProvider, nameof(serviceProvider)); - - this.stateFactory = stateFactory; - this.serviceProvider = serviceProvider; - } - - public Task CreateAsync(CommandContext context, Func creator) where T : class, IDomainObject - { - Guard.NotNull(creator, nameof(creator)); - - return InvokeAsync(context, creator, false); - } - - public Task UpdateAsync(CommandContext context, Func updater) where T : class, IDomainObject - { - Guard.NotNull(updater, nameof(updater)); - - return InvokeAsync(context, updater, true); - } - - public Task CreateSyncedAsync(CommandContext context, Func creator) where T : class, IDomainObject - { - Guard.NotNull(creator, nameof(creator)); - - return InvokeSyncedAsync(context, creator, false); - } - - public Task UpdateSyncedAsync(CommandContext context, Func updater) where T : class, IDomainObject - { - Guard.NotNull(updater, nameof(updater)); - - return InvokeSyncedAsync(context, updater, true); - } - - private async Task InvokeAsync(CommandContext context, Func handler, bool isUpdate) where T : class, IDomainObject - { - Guard.NotNull(context, nameof(context)); - - var domainCommand = GetCommand(context); - var domainObjectId = domainCommand.AggregateId; - var domainObject = await stateFactory.CreateAsync(domainObjectId); - - if (domainCommand.ExpectedVersion != EtagVersion.Any && domainCommand.ExpectedVersion != domainObject.Version) - { - throw new DomainObjectVersionException(domainObjectId.ToString(), typeof(T), domainObject.Version, domainCommand.ExpectedVersion); - } - - await handler(domainObject); - - await domainObject.WriteAsync(); - - if (!context.IsCompleted) - { - if (isUpdate) - { - context.Complete(new EntitySavedResult(domainObject.Version)); - } - else - { - context.Complete(EntityCreatedResult.Create(domainObjectId, domainObject.Version)); - } - } - - return domainObject; - } - - private async Task InvokeSyncedAsync(CommandContext context, Func handler, bool isUpdate) where T : class, IDomainObject - { - Guard.NotNull(context, nameof(context)); - - var domainCommand = GetCommand(context); - var domainObjectId = domainCommand.AggregateId; - - using (await lockPool.LockAsync(Tuple.Create(typeof(T), domainObjectId))) - { - var domainObject = await stateFactory.GetSingleAsync(domainObjectId); - - if (domainCommand.ExpectedVersion != EtagVersion.Any && domainCommand.ExpectedVersion != domainObject.Version) - { - throw new DomainObjectVersionException(domainObjectId.ToString(), typeof(T), domainObject.Version, domainCommand.ExpectedVersion); - } - - await handler(domainObject); - - try - { - await domainObject.WriteAsync(); - - stateFactory.Synchronize(domainObjectId); - } - catch - { - stateFactory.Remove(domainObjectId); - - throw; - } - - if (!context.IsCompleted) - { - if (isUpdate) - { - context.Complete(new EntitySavedResult(domainObject.Version)); - } - else - { - context.Complete(EntityCreatedResult.Create(domainObjectId, domainObject.Version)); - } - } - - return domainObject; - } - } - - private static IAggregateCommand GetCommand(CommandContext context) - { - if (!(context.Command is IAggregateCommand command)) - { - throw new ArgumentException("Context must have an aggregate command.", nameof(context)); - } - - Guard.NotEmpty(command.AggregateId, "context.Command.AggregateId"); - - return command; - } - } -} diff --git a/src/Squidex.Infrastructure/Commands/CommandExtensions.cs b/src/Squidex.Infrastructure/Commands/CommandExtensions.cs index c2cb8bff0..c669a221a 100644 --- a/src/Squidex.Infrastructure/Commands/CommandExtensions.cs +++ b/src/Squidex.Infrastructure/Commands/CommandExtensions.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Threading.Tasks; using Squidex.Infrastructure.Tasks; @@ -13,26 +12,6 @@ namespace Squidex.Infrastructure.Commands { public static class CommandExtensions { - public static Task CreateAsync(this IAggregateHandler handler, CommandContext context, Action creator) where T : class, IDomainObject - { - return handler.CreateAsync(context, creator.ToAsync()); - } - - public static Task UpdateAsync(this IAggregateHandler handler, CommandContext context, Action updater) where T : class, IDomainObject - { - return handler.UpdateAsync(context, updater.ToAsync()); - } - - public static Task CreateSyncedAsync(this IAggregateHandler handler, CommandContext context, Action creator) where T : class, IDomainObject - { - return handler.CreateSyncedAsync(context, creator.ToAsync()); - } - - public static Task UpdateSyncedAsync(this IAggregateHandler handler, CommandContext context, Action updater) where T : class, IDomainObject - { - return handler.UpdateSyncedAsync(context, updater.ToAsync()); - } - public static Task HandleAsync(this ICommandMiddleware commandMiddleware, CommandContext context) { return commandMiddleware.HandleAsync(context, () => TaskHelper.Done); diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs b/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs deleted file mode 100644 index bfd50b19c..000000000 --- a/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs +++ /dev/null @@ -1,104 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.States; - -namespace Squidex.Infrastructure.Commands -{ - public abstract class DomainObjectBase : IDomainObject where T : IDomainState, new() - { - private readonly List> uncomittedEvents = new List>(); - private Guid id; - private T snapshot = new T { Version = EtagVersion.Empty }; - private IPersistence persistence; - - public long Version - { - get { return snapshot.Version; } - } - - public T Snapshot - { - get { return snapshot; } - } - - public Task ActivateAsync(Guid key, IStore store) - { - id = key; - - persistence = store.WithSnapshotsAndEventSourcing(GetType(), key, ApplySnapshot, ApplyEvent); - - return persistence.ReadAsync(); - } - - public void RaiseEvent(IEvent @event) - { - RaiseEvent(Envelope.Create(@event)); - } - - public virtual void RaiseEvent(Envelope @event) - { - Guard.NotNull(@event, nameof(@event)); - - @event.SetAggregateId(id); - - ApplyEvent(@event); - - uncomittedEvents.Add(@event); - } - - public IReadOnlyList> GetUncomittedEvents() - { - return uncomittedEvents; - } - - public void ClearUncommittedEvents() - { - uncomittedEvents.Clear(); - } - - public virtual void ApplySnapshot(T newSnapshot) - { - snapshot = newSnapshot; - } - - public virtual void ApplyEvent(Envelope @event) - { - } - - public Task WriteSnapshotAsync() - { - snapshot.Version = persistence.Version; - - return persistence.WriteSnapshotAsync(snapshot); - } - - public async Task WriteAsync() - { - var events = uncomittedEvents.ToArray(); - - if (events.Length > 0) - { - try - { - snapshot.Version = persistence.Version + events.Length; - - await persistence.WriteEventsAsync(events); - await persistence.WriteSnapshotAsync(snapshot); - } - finally - { - uncomittedEvents.Clear(); - } - } - } - } -} diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs b/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs index 16636ef8b..40d3fecf6 100644 --- a/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs +++ b/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs @@ -9,6 +9,8 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; using Orleans; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.States; @@ -32,12 +34,18 @@ namespace Squidex.Infrastructure.Commands get { return snapshot.Version + uncomittedEvents.Count; } } - protected T Snapshot + public T Snapshot { get { return snapshot; } } protected DomainObjectGrain(IStore store) + : this(store, null, null) + { + } + + protected DomainObjectGrain(IStore store, IGrainIdentity identity, IGrainRuntime runtime) + : base(identity, runtime) { Guard.NotNull(store, nameof(store)); @@ -194,9 +202,11 @@ namespace Squidex.Infrastructure.Commands } } - public Task> ExecuteAsync(J command) + public async Task> ExecuteAsync(J command) { - return ExecuteAsync(command.Value).ContinueWith(x => x.Result.AsJ()); + var result = await ExecuteAsync(command.Value); + + return result.AsJ(); } public abstract Task ExecuteAsync(IAggregateCommand command); diff --git a/src/Squidex.Infrastructure/Commands/IAggregateHandler.cs b/src/Squidex.Infrastructure/Commands/IAggregateHandler.cs deleted file mode 100644 index 7a68f39a6..000000000 --- a/src/Squidex.Infrastructure/Commands/IAggregateHandler.cs +++ /dev/null @@ -1,23 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; - -namespace Squidex.Infrastructure.Commands -{ - public interface IAggregateHandler - { - Task CreateAsync(CommandContext context, Func creator) where T : class, IDomainObject; - - Task CreateSyncedAsync(CommandContext context, Func creator) where T : class, IDomainObject; - - Task UpdateAsync(CommandContext context, Func updater) where T : class, IDomainObject; - - Task UpdateSyncedAsync(CommandContext context, Func updater) where T : class, IDomainObject; - } -} diff --git a/src/Squidex.Infrastructure/Commands/IDomainObject.cs b/src/Squidex.Infrastructure/Commands/IDomainObject.cs deleted file mode 100644 index 98d4521b1..000000000 --- a/src/Squidex.Infrastructure/Commands/IDomainObject.cs +++ /dev/null @@ -1,20 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Squidex.Infrastructure.States; - -namespace Squidex.Infrastructure.Commands -{ - public interface IDomainObject : IStatefulObject - { - long Version { get; } - - Task WriteAsync(); - } -} \ No newline at end of file diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs index abe33b21c..95429f6fa 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs @@ -49,6 +49,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains IGrainIdentity identity, IGrainRuntime runtime, ISemanticLog log) + : base(identity, runtime) { Guard.NotNull(log, nameof(log)); Guard.NotNull(store, nameof(store)); @@ -71,16 +72,11 @@ namespace Squidex.Infrastructure.EventSourcing.Grains eventConsumer = eventConsumerFactory(this.GetPrimaryKeyString()); - persistence = store.WithSnapshots(GetType(), this.GetPrimaryKeyString(), s => state = s); + persistence = store.WithSnapshots(GetType(), eventConsumer.Name, s => state = s); return persistence.ReadAsync(); } - protected virtual IEventSubscription CreateSubscription(IEventStore eventStore, string streamFilter, string position) - { - return new RetrySubscription(eventStore, new WrapperSubscription(this.AsReference(), scheduler), streamFilter, position); - } - public Task> GetStateAsync() { return Task.FromResult(state.ToInfo(this.eventConsumer.Name).AsImmutable()); @@ -121,13 +117,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains }); } - public Task WakeUpAsync() - { - currentSubscription?.WakeUp(); - - return TaskHelper.Done; - } - public Task ActivateAsync() { if (!state.IsStopped) @@ -276,6 +265,10 @@ namespace Squidex.Infrastructure.EventSourcing.Grains currentSubscription?.StopAsync().Forget(); currentSubscription = CreateSubscription(eventStore, eventConsumer.EventsFilter, position); } + else + { + currentSubscription.WakeUp(); + } } private Envelope ParseKnownEvent(StoredEvent message) @@ -296,5 +289,20 @@ namespace Squidex.Infrastructure.EventSourcing.Grains return null; } } + + protected virtual IEventConsumerGrain GetSelf() + { + return this.AsReference(); + } + + protected virtual IEventSubscription CreateSubscription(IEventStore eventStore, IEventSubscriber subscriber, string streamFilter, string position) + { + return new RetrySubscription(eventStore, subscriber, streamFilter, position); + } + + private IEventSubscription CreateSubscription(IEventStore eventStore, string streamFilter, string position) + { + return CreateSubscription(eventStore, new WrapperSubscription(GetSelf(), scheduler), streamFilter, position); + } } } \ No newline at end of file diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs index acf4ff420..97b3e93ca 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerManagerGrain.cs @@ -14,7 +14,6 @@ using Orleans; using Orleans.Concurrency; using Orleans.Core; using Orleans.Runtime; -using Squidex.Infrastructure.Tasks; namespace Squidex.Infrastructure.EventSourcing.Grains { @@ -43,28 +42,18 @@ namespace Squidex.Infrastructure.EventSourcing.Grains DelayDeactivation(TimeSpan.FromDays(1)); RegisterOrUpdateReminder("Default", TimeSpan.Zero, TimeSpan.FromMinutes(10)); - RegisterTimer(x => WakeUpAsync(null), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); + RegisterTimer(x => ActivateAsync(null), null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); return Task.FromResult(true); } - public Task ActivateAsync() - { - var tasks = - eventConsumers - .Select(c => GrainFactory.GetGrain(c.Name)) - .Select(c => c.ActivateAsync()); - - return Task.WhenAll(tasks); - } - - public Task WakeUpAsync(string streamName) + public Task ActivateAsync(string streamName) { var tasks = eventConsumers .Where(c => streamName == null || Regex.IsMatch(streamName, c.EventsFilter)) .Select(c => GrainFactory.GetGrain(c.Name)) - .Select(c => c.WakeUpAsync()); + .Select(c => c.ActivateAsync()); return Task.WhenAll(tasks); } @@ -102,9 +91,14 @@ namespace Squidex.Infrastructure.EventSourcing.Grains return eventConsumer.StopAsync(); } + public Task ActivateAsync() + { + return ActivateAsync(null); + } + public Task ReceiveReminder(string reminderName, TickStatus status) { - return TaskHelper.Done; + return ActivateAsync(null); } } } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs index 2044db8bb..ae94d398a 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs @@ -7,6 +7,7 @@ using System; using System.Threading.Tasks; +using Orleans; using Orleans.Concurrency; using Squidex.Infrastructure.Orleans; @@ -22,8 +23,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains Task ResetAsync(); - Task WakeUpAsync(); - Task OnEventAsync(Immutable subscription, Immutable storedEvent); Task OnErrorAsync(Immutable subscription, Immutable exception); diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs index eb3a0d6e7..1730b7b30 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerManagerGrain.cs @@ -14,7 +14,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains { public interface IEventConsumerManagerGrain : IBackgroundGrain { - Task WakeUpAsync(string streamName); + Task ActivateAsync(string streamName); Task StopAsync(string consumerName); diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs index b68abde53..0e97746e4 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/OrleansEventNotifier.cs @@ -29,7 +29,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains public void NotifyEventsStored(string streamName) { - eventConsumerManagerGrain?.WakeUpAsync(streamName); + eventConsumerManagerGrain?.ActivateAsync(streamName); } public IDisposable Subscribe(Action handler) diff --git a/src/Squidex.Infrastructure/EventSourcing/IEventNotifier.cs b/src/Squidex.Infrastructure/EventSourcing/IEventNotifier.cs index ce28bb491..6e5bbe94f 100644 --- a/src/Squidex.Infrastructure/EventSourcing/IEventNotifier.cs +++ b/src/Squidex.Infrastructure/EventSourcing/IEventNotifier.cs @@ -5,14 +5,10 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; - namespace Squidex.Infrastructure.EventSourcing { public interface IEventNotifier { void NotifyEventsStored(string streamName); - - IDisposable Subscribe(Action handler); } } diff --git a/src/Squidex.Infrastructure/Orleans/J{T}.cs b/src/Squidex.Infrastructure/Orleans/J{T}.cs index 7d7329998..00bb93f45 100644 --- a/src/Squidex.Infrastructure/Orleans/J{T}.cs +++ b/src/Squidex.Infrastructure/Orleans/J{T}.cs @@ -45,13 +45,13 @@ namespace Squidex.Infrastructure.Orleans } [CopierMethod] - private static object Copy(object input, ICopyContext context) + public static object Copy(object input, ICopyContext context) { return input; } [SerializerMethod] - private static void Serialize(object input, ISerializationContext context, Type expected) + public static void Serialize(object input, ISerializationContext context, Type expected) { var stream = new MemoryStream(); @@ -69,7 +69,7 @@ namespace Squidex.Infrastructure.Orleans } [DeserializerMethod] - private static object Deserialize(Type expected, IDeserializationContext context) + public static object Deserialize(Type expected, IDeserializationContext context) { var outLength = context.StreamReader.ReadInt(); var outBytes = context.StreamReader.ReadBytes(outLength); diff --git a/src/Squidex.Infrastructure/States/IStateFactory.cs b/src/Squidex.Infrastructure/States/IStateFactory.cs deleted file mode 100644 index cc10879ec..000000000 --- a/src/Squidex.Infrastructure/States/IStateFactory.cs +++ /dev/null @@ -1,31 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; - -namespace Squidex.Infrastructure.States -{ - public interface IStateFactory - { - Task GetSingleAsync(string key) where T : IStatefulObject; - - Task GetSingleAsync(Guid key) where T : IStatefulObject; - - Task GetSingleAsync(TKey key) where T : IStatefulObject; - - Task CreateAsync(string key) where T : IStatefulObject; - - Task CreateAsync(Guid key) where T : IStatefulObject; - - Task CreateAsync(TKey key) where T : IStatefulObject; - - void Remove(TKey key) where T : IStatefulObject; - - void Synchronize(TKey key) where T : IStatefulObject; - } -} diff --git a/src/Squidex.Infrastructure/States/IStatefulObject.cs b/src/Squidex.Infrastructure/States/IStatefulObject.cs deleted file mode 100644 index e90e84728..000000000 --- a/src/Squidex.Infrastructure/States/IStatefulObject.cs +++ /dev/null @@ -1,16 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Threading.Tasks; - -namespace Squidex.Infrastructure.States -{ - public interface IStatefulObject - { - Task ActivateAsync(TKey key, IStore store); - } -} diff --git a/src/Squidex.Infrastructure/States/InvalidateMessage.cs b/src/Squidex.Infrastructure/States/InvalidateMessage.cs deleted file mode 100644 index b55f77145..000000000 --- a/src/Squidex.Infrastructure/States/InvalidateMessage.cs +++ /dev/null @@ -1,14 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -namespace Squidex.Infrastructure.States -{ - public sealed class InvalidateMessage - { - public string Key { get; set; } - } -} \ No newline at end of file diff --git a/src/Squidex.Infrastructure/States/StateFactory.cs b/src/Squidex.Infrastructure/States/StateFactory.cs deleted file mode 100644 index 9aea78534..000000000 --- a/src/Squidex.Infrastructure/States/StateFactory.cs +++ /dev/null @@ -1,158 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Microsoft.Extensions.Caching.Memory; -using Squidex.Infrastructure.EventSourcing; - -#pragma warning disable RECS0096 // Type parameter is never used - -namespace Squidex.Infrastructure.States -{ - public sealed class StateFactory : DisposableObjectBase, IInitializable, IStateFactory - { - private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10); - private readonly IPubSub pubSub; - private readonly IMemoryCache statesCache; - private readonly IServiceProvider services; - private readonly IStreamNameResolver streamNameResolver; - private readonly IEventStore eventStore; - private readonly IEventDataFormatter eventDataFormatter; - private readonly object lockObject = new object(); - private IDisposable pubSubSubscription; - - public sealed class ObjectHolder where T : IStatefulObject - { - private readonly Task activationTask; - private readonly T obj; - - public ObjectHolder(T obj, TKey key, IStore store) - { - this.obj = obj; - - activationTask = obj.ActivateAsync(key, store); - } - - public async Task ActivateAsync() - { - await activationTask; - - return obj; - } - } - - public StateFactory( - IPubSub pubSub, - IMemoryCache statesCache, - IEventStore eventStore, - IEventDataFormatter eventDataFormatter, - IServiceProvider services, - IStreamNameResolver streamNameResolver) - { - Guard.NotNull(services, nameof(services)); - Guard.NotNull(eventStore, nameof(eventStore)); - Guard.NotNull(eventDataFormatter, nameof(eventDataFormatter)); - Guard.NotNull(pubSub, nameof(pubSub)); - Guard.NotNull(statesCache, nameof(statesCache)); - Guard.NotNull(streamNameResolver, nameof(streamNameResolver)); - - this.eventStore = eventStore; - this.eventDataFormatter = eventDataFormatter; - this.pubSub = pubSub; - this.services = services; - this.statesCache = statesCache; - this.streamNameResolver = streamNameResolver; - } - - public void Initialize() - { - pubSubSubscription = pubSub.Subscribe(m => - { - lock (lockObject) - { - statesCache.Remove(m.Key); - } - }); - } - - public Task CreateAsync(string key) where T : IStatefulObject - { - return CreateAsync(key); - } - - public Task CreateAsync(Guid key) where T : IStatefulObject - { - return CreateAsync(key); - } - - public async Task CreateAsync(TKey key) where T : IStatefulObject - { - Guard.NotNull(key, nameof(key)); - - var stateStore = new Store(eventStore, eventDataFormatter, services, streamNameResolver); - var state = (T)services.GetService(typeof(T)); - - await state.ActivateAsync(key, stateStore); - - return state; - } - - public Task GetSingleAsync(string key) where T : IStatefulObject - { - return GetSingleAsync(key); - } - - public Task GetSingleAsync(Guid key) where T : IStatefulObject - { - return GetSingleAsync(key); - } - - public Task GetSingleAsync(TKey key) where T : IStatefulObject - { - Guard.NotNull(key, nameof(key)); - - lock (lockObject) - { - if (statesCache.TryGetValue>(key, out var stateObj)) - { - return stateObj.ActivateAsync(); - } - - var state = (T)services.GetService(typeof(T)); - var stateStore = new Store(eventStore, eventDataFormatter, services, streamNameResolver); - - stateObj = new ObjectHolder(state, key, stateStore); - - statesCache.CreateEntry(key) - .SetValue(stateObj) - .SetAbsoluteExpiration(CacheDuration) - .Dispose(); - - return stateObj.ActivateAsync(); - } - } - - public void Remove(TKey key) where T : IStatefulObject - { - statesCache.Remove(key); - } - - public void Synchronize(TKey key) where T : IStatefulObject - { - pubSub.Publish(new InvalidateMessage { Key = key.ToString() }, false); - } - - protected override void DisposeObject(bool disposing) - { - if (disposing && pubSubSubscription != null) - { - pubSubSubscription.Dispose(); - } - } - } -} diff --git a/src/Squidex/Config/Domain/ReadServices.cs b/src/Squidex/Config/Domain/ReadServices.cs index 38708699e..9fadb3531 100644 --- a/src/Squidex/Config/Domain/ReadServices.cs +++ b/src/Squidex/Config/Domain/ReadServices.cs @@ -28,7 +28,6 @@ using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing.Grains; using Squidex.Infrastructure.Orleans; -using Squidex.Infrastructure.States; using Squidex.Pipeline; namespace Squidex.Config.Domain @@ -37,10 +36,6 @@ namespace Squidex.Config.Domain { public static void AddMyReadServices(this IServiceCollection services, IConfiguration config) { - services.AddSingletonAs() - .As() - .As(); - services.AddSingletonAs() .As() .As(); diff --git a/src/Squidex/Config/Domain/WriteServices.cs b/src/Squidex/Config/Domain/WriteServices.cs index 633695575..497a29e43 100644 --- a/src/Squidex/Config/Domain/WriteServices.cs +++ b/src/Squidex/Config/Domain/WriteServices.cs @@ -18,6 +18,7 @@ using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Templates; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Contents; +using Squidex.Domain.Apps.Entities.Contents.Commands; using Squidex.Domain.Apps.Entities.Rules; using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Schemas; @@ -56,10 +57,10 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() + services.AddSingletonAs>() .As(); - services.AddSingletonAs>() + services.AddSingletonAs>() .As(); services.AddSingletonAs>() @@ -95,7 +96,7 @@ namespace Squidex.Config.Domain services.AddTransientAs() .AsSelf(); - services.AddTransientAs() + services.AddTransientAs() .AsSelf(); services.AddSingleton(c => diff --git a/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithAppIdCommandMiddleware.cs b/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithAppIdCommandMiddleware.cs index 1a063c723..73d161006 100644 --- a/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithAppIdCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithAppIdCommandMiddleware.cs @@ -9,6 +9,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Squidex.Domain.Apps.Entities; +using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; @@ -32,17 +33,31 @@ namespace Squidex.Pipeline.CommandMiddlewares if (context.Command is IAppCommand appCommand && appCommand.AppId == null) { - var appFeature = httpContextAccessor.HttpContext.Features.Get(); + var appId = GetAppId(); - if (appFeature == null) - { - throw new InvalidOperationException("Cannot resolve app."); - } + appCommand.AppId = appId; + } + + if (context.Command is AppCommand appSelfCommand && appSelfCommand.AppId == Guid.Empty) + { + var appId = GetAppId(); - appCommand.AppId = new NamedId(appFeature.App.Id, appFeature.App.Name); + appSelfCommand.AppId = appId.Id; } return next(); } + + private NamedId GetAppId() + { + var appFeature = httpContextAccessor.HttpContext.Features.Get(); + + if (appFeature?.App == null) + { + throw new InvalidOperationException("Cannot resolve app."); + } + + return new NamedId(appFeature.App.Id, appFeature.App.Name); + } } } diff --git a/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs b/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs index 09b27c89d..8e976d316 100644 --- a/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandMiddlewares/EnrichWithSchemaIdCommandMiddleware.cs @@ -36,28 +36,42 @@ namespace Squidex.Pipeline.CommandMiddlewares if (context.Command is ISchemaCommand schemaCommand && schemaCommand.SchemaId == null) { - NamedId appId = null; + var schemaId = await GetSchemaIdAsync(context); - if (context.Command is IAppCommand appCommand) - { - appId = appCommand.AppId; - } + schemaCommand.SchemaId = schemaId; + } - if (appId == null) - { - var appFeature = actionContextAccessor.ActionContext.HttpContext.Features.Get(); + if (context.Command is SchemaCommand schemaSelfCommand && schemaSelfCommand.SchemaId == Guid.Empty) + { + var schemaId = await GetSchemaIdAsync(context); - if (appFeature != null && appFeature.App != null) - { - appId = new NamedId(appFeature.App.Id, appFeature.App.Name); - } - } + schemaSelfCommand.SchemaId = schemaId?.Id ?? Guid.Empty; + } + + await next(); + } + + private async Task> GetSchemaIdAsync(CommandContext context) + { + NamedId appId = null; + + if (context.Command is IAppCommand appCommand) + { + appId = appCommand.AppId; + } - if (appId == null) + if (appId == null) + { + var appFeature = actionContextAccessor.ActionContext.HttpContext.Features.Get(); + + if (appFeature != null && appFeature.App != null) { - return; + appId = new NamedId(appFeature.App.Id, appFeature.App.Name); } + } + if (appId != null) + { var routeValues = actionContextAccessor.ActionContext.RouteData.Values; if (routeValues.ContainsKey("name")) @@ -80,11 +94,11 @@ namespace Squidex.Pipeline.CommandMiddlewares throw new DomainObjectNotFoundException(schemaName, typeof(ISchemaEntity)); } - schemaCommand.SchemaId = new NamedId(schema.Id, schema.Name); + return new NamedId(schema.Id, schema.Name); } } - await next(); + return null; } } } diff --git a/tests/Squidex.Infrastructure.Tests/Commands/AggregateHandlerTests.cs b/tests/Squidex.Infrastructure.Tests/Commands/AggregateHandlerTests.cs deleted file mode 100644 index f1c9113d0..000000000 --- a/tests/Squidex.Infrastructure.Tests/Commands/AggregateHandlerTests.cs +++ /dev/null @@ -1,284 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using FakeItEasy; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.States; -using Squidex.Infrastructure.Tasks; -using Squidex.Infrastructure.TestHelpers; -using Xunit; - -namespace Squidex.Infrastructure.Commands -{ - public class AggregateHandlerTests - { - private readonly IServiceProvider serviceProvider = A.Fake(); - private readonly IStore store = A.Fake>(); - private readonly IStateFactory stateFactory = A.Fake(); - private readonly IPersistence persistence = A.Fake>(); - private readonly Envelope event1 = new Envelope(new MyEvent()); - private readonly Envelope event2 = new Envelope(new MyEvent()); - private readonly CommandContext context; - private readonly CommandContext invalidContext = new CommandContext(A.Dummy(), A.Dummy()); - private readonly Guid domainObjectId = Guid.NewGuid(); - private readonly MyCommand command; - private readonly MyDomainObject domainObject = new MyDomainObject(); - private readonly AggregateHandler sut; - - public AggregateHandlerTests() - { - command = new MyCommand { AggregateId = domainObjectId, ExpectedVersion = EtagVersion.Any }; - context = new CommandContext(command, A.Dummy()); - - A.CallTo(() => store.WithSnapshotsAndEventSourcing(domainObjectId, A>.Ignored, A, Task>>.Ignored)) - .Returns(persistence); - - A.CallTo(() => stateFactory.CreateAsync(domainObjectId)) - .Returns(Task.FromResult(domainObject)); - - A.CallTo(() => stateFactory.GetSingleAsync(domainObjectId)) - .Returns(Task.FromResult(domainObject)); - - sut = new AggregateHandler(stateFactory, serviceProvider); - - domainObject.ActivateAsync(domainObjectId, store).Wait(); - } - - [Fact] - public Task Create_with_task_should_throw_exception_if_not_aggregate_command() - { - return Assert.ThrowsAnyAsync(() => sut.CreateAsync(invalidContext, x => TaskHelper.False)); - } - - [Fact] - public Task Create_synced_with_task_should_throw_exception_if_not_aggregate_command() - { - return Assert.ThrowsAnyAsync(() => sut.CreateSyncedAsync(invalidContext, x => TaskHelper.False)); - } - - [Fact] - public Task Create_with_task_should_should_throw_exception_if_version_is_wrong() - { - command.ExpectedVersion = 2; - - return Assert.ThrowsAnyAsync(() => sut.CreateAsync(context, x => TaskHelper.False)); - } - - [Fact] - public Task Create_synced_with_task_should_should_throw_exception_if_version_is_wrong() - { - command.ExpectedVersion = 2; - - return Assert.ThrowsAnyAsync(() => sut.CreateSyncedAsync(context, x => TaskHelper.False)); - } - - [Fact] - public async Task Create_with_task_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.CreateAsync(context, async x => - { - x.RaiseEvent(new MyEvent()); - - await Task.Yield(); - - passedDomainObject = x; - }); - - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result>()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public async Task Create_synced_with_task_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.CreateSyncedAsync(context, async x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - await Task.Yield(); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result>()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public async Task Create_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.CreateAsync(context, x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result>()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public async Task Create_synced_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.CreateSyncedAsync(context, x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result>()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public Task Update_with_task_should_throw_exception_if_not_aggregate_command() - { - return Assert.ThrowsAnyAsync(() => sut.UpdateAsync(invalidContext, x => TaskHelper.False)); - } - - [Fact] - public Task Update_synced_with_task_should_throw_exception_if_not_aggregate_command() - { - return Assert.ThrowsAnyAsync(() => sut.UpdateSyncedAsync(invalidContext, x => TaskHelper.False)); - } - - [Fact] - public Task Update_with_task_should_should_throw_exception_if_version_is_wrong() - { - command.ExpectedVersion = 2; - - return Assert.ThrowsAnyAsync(() => sut.UpdateAsync(context, x => TaskHelper.False)); - } - - [Fact] - public Task Update_synced_with_task_should_should_throw_exception_if_version_is_wrong() - { - command.ExpectedVersion = 2; - - return Assert.ThrowsAnyAsync(() => sut.UpdateSyncedAsync(context, x => TaskHelper.False)); - } - - [Fact] - public async Task Update_with_task_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.UpdateAsync(context, async x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - await Task.Yield(); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public async Task Update_synced_with_task_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.UpdateSyncedAsync(context, async x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - await Task.Yield(); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public async Task Update_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.UpdateAsync(context, x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - - [Fact] - public async Task Update_synced_should_create_domain_object_and_save() - { - MyDomainObject passedDomainObject = null; - - await sut.UpdateSyncedAsync(context, x => - { - x.RaiseEvent(new MyEvent()); - x.RaiseEvent(new MyEvent()); - - passedDomainObject = x; - }); - - Assert.Equal(2, domainObject.Snapshot.Version); - Assert.Equal(domainObject, passedDomainObject); - Assert.NotNull(context.Result()); - - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .MustHaveHappened(); - } - } -} diff --git a/tests/Squidex.Infrastructure.Tests/Commands/DomainObjectBaseTests.cs b/tests/Squidex.Infrastructure.Tests/Commands/DomainObjectBaseTests.cs deleted file mode 100644 index 70e23f0b8..000000000 --- a/tests/Squidex.Infrastructure.Tests/Commands/DomainObjectBaseTests.cs +++ /dev/null @@ -1,88 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using FakeItEasy; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.States; -using Squidex.Infrastructure.TestHelpers; -using Xunit; - -namespace Squidex.Infrastructure.Commands -{ - public class DomainObjectBaseTests - { - private readonly IStore store = A.Fake>(); - private readonly IPersistence persistence = A.Fake>(); - private readonly Guid id = Guid.NewGuid(); - private readonly MyDomainObject sut = new MyDomainObject(); - - public DomainObjectBaseTests() - { - A.CallTo(() => store.WithSnapshotsAndEventSourcing(id, A>.Ignored, A, Task>>.Ignored)) - .Returns(persistence); - } - - [Fact] - public void Should_instantiate() - { - Assert.Equal(EtagVersion.Empty, sut.Version); - } - - [Fact] - public async Task Should_write_state_and_events_when_saved() - { - await sut.ActivateAsync(id, store); - - var event1 = new MyEvent(); - var event2 = new MyEvent(); - var newState = new MyDomainState(); - - sut.RaiseEvent(event1); - sut.RaiseEvent(event2); - sut.ApplySnapshot(newState); - - await sut.WriteAsync(); - - A.CallTo(() => persistence.WriteSnapshotAsync(newState)) - .MustHaveHappened(); - A.CallTo(() => persistence.WriteEventsAsync(A>>.That.Matches(x => x.Count() == 2))) - .MustHaveHappened(); - - Assert.Empty(sut.GetUncomittedEvents()); - } - - [Fact] - public async Task Should_not_ignore_exception_when_saving() - { - A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) - .Throws(new InvalidOperationException()); - - await sut.ActivateAsync(id, store); - - var event1 = new MyEvent(); - var event2 = new MyEvent(); - var newState = new MyDomainState(); - - sut.RaiseEvent(event1); - sut.RaiseEvent(event2); - sut.ApplySnapshot(newState); - - await Assert.ThrowsAsync(() => sut.WriteAsync()); - - A.CallTo(() => persistence.WriteSnapshotAsync(newState)) - .MustNotHaveHappened(); - A.CallTo(() => persistence.WriteEventsAsync(A>>.That.Matches(x => x.Count() == 2))) - .MustHaveHappened(); - - Assert.Empty(sut.GetUncomittedEvents()); - } - } -} diff --git a/tests/Squidex.Infrastructure.Tests/Commands/DomainObjectGrainTests.cs b/tests/Squidex.Infrastructure.Tests/Commands/DomainObjectGrainTests.cs new file mode 100644 index 000000000..15dbaa659 --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/Commands/DomainObjectGrainTests.cs @@ -0,0 +1,284 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using FakeItEasy; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; +using Squidex.Infrastructure.States; +using Squidex.Infrastructure.TestHelpers; +using Xunit; + +namespace Squidex.Infrastructure.Commands +{ + public sealed class DomainObjectGrainTests + { + private readonly IStore store = A.Fake>(); + private readonly IGrainIdentity identity = A.Fake(); + private readonly IPersistence persistence = A.Fake>(); + private readonly Guid id = Guid.NewGuid(); + private readonly MyDomainObject sut; + + public sealed class MyDomainState : IDomainState + { + public long Version { get; set; } + + public int Value { get; set; } + } + + public sealed class ValueChanged : IEvent + { + public int Value { get; set; } + } + + public sealed class CreateAuto : MyCommand + { + public int Value { get; set; } + } + + public sealed class CreateCustom : MyCommand + { + public int Value { get; set; } + } + + public sealed class UpdateAuto : MyCommand + { + public int Value { get; set; } + } + + public sealed class UpdateCustom : MyCommand + { + public int Value { get; set; } + } + + public sealed class MyDomainObject : DomainObjectGrain + { + public MyDomainObject(IStore store, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, identity, runtime) + { + } + + public override Task ExecuteAsync(IAggregateCommand command) + { + switch (command) + { + case CreateAuto createAuto: + return CreateAsync(createAuto, c => + { + RaiseEvent(new ValueChanged { Value = c.Value }); + }); + + case CreateCustom createCustom: + return CreateReturnAsync(createCustom, c => + { + RaiseEvent(new ValueChanged { Value = c.Value }); + + return "CREATED"; + }); + + case UpdateAuto updateAuto: + return UpdateAsync(updateAuto, c => + { + RaiseEvent(new ValueChanged { Value = c.Value }); + }); + + case UpdateCustom updateCustom: + return UpdateReturnAsync(updateCustom, c => + { + RaiseEvent(new ValueChanged { Value = c.Value }); + + return "UPDATED"; + }); + } + + return Task.FromResult(null); + } + + public override void ApplyEvent(Envelope @event) + { + if (@event.Payload is ValueChanged valueChanged) + { + ApplySnapshot(new MyDomainState { Value = valueChanged.Value }); + } + } + } + + public DomainObjectGrainTests() + { + A.CallTo(() => identity.PrimaryKey) + .Returns(id); + + A.CallTo(() => store.WithSnapshotsAndEventSourcing(typeof(MyDomainObject), id, A>.Ignored, A, Task>>.Ignored)) + .Returns(persistence); + + sut = new MyDomainObject(store, identity, A.Fake()); + } + + [Fact] + public void Should_instantiate() + { + Assert.Equal(EtagVersion.Empty, sut.Version); + } + + [Fact] + public async Task Should_write_state_and_events_when_created() + { + await SetupEmptyAsync(); + + var result = await sut.ExecuteAsync(C(new CreateAuto { Value = 5 })); + + A.CallTo(() => persistence.WriteSnapshotAsync(A.That.Matches(x => x.Value == 5))) + .MustHaveHappened(); + A.CallTo(() => persistence.WriteEventsAsync(A>>.That.Matches(x => x.Count() == 1))) + .MustHaveHappened(); + + Assert.True(result.Value is EntityCreatedResult); + + Assert.Empty(sut.GetUncomittedEvents()); + Assert.Equal(5, sut.Snapshot.Value); + } + + [Fact] + public async Task Should_write_state_and_events_when_updated() + { + await SetupCreatedAsync(); + + var result = await sut.ExecuteAsync(C(new UpdateAuto { Value = 5 })); + + A.CallTo(() => persistence.WriteSnapshotAsync(A.That.Matches(x => x.Value == 5))) + .MustHaveHappened(); + A.CallTo(() => persistence.WriteEventsAsync(A>>.That.Matches(x => x.Count() == 1))) + .MustHaveHappened(); + + Assert.True(result.Value is EntitySavedResult); + + Assert.Empty(sut.GetUncomittedEvents()); + Assert.Equal(5, sut.Snapshot.Value); + } + + [Fact] + public async Task Should_throw_exception_when_already_created() + { + await SetupCreatedAsync(); + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(C(new CreateAuto()))); + } + + [Fact] + public async Task Should_throw_exception_when_not_created() + { + await SetupEmptyAsync(); + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(C(new UpdateAuto()))); + } + + [Fact] + public async Task Should_return_custom_result_on_create() + { + await SetupEmptyAsync(); + + var result = await sut.ExecuteAsync(C(new CreateCustom())); + + Assert.Equal("CREATED", result.Value); + } + + [Fact] + public async Task Should_return_custom_result_on_update() + { + await SetupCreatedAsync(); + + var result = await sut.ExecuteAsync(C(new UpdateCustom())); + + Assert.Equal("UPDATED", result.Value); + } + + [Fact] + public async Task Should_throw_exception_when_other_verison_expected() + { + await SetupCreatedAsync(); + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(C(new UpdateCustom { ExpectedVersion = 3 }))); + } + + [Fact] + public async Task Should_reset_state_when_writing_snapshot_for_create_failed() + { + await SetupEmptyAsync(); + + A.CallTo(() => persistence.WriteSnapshotAsync(A.Ignored)) + .Throws(new InvalidOperationException()); + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(C(new CreateAuto()))); + + Assert.Empty(sut.GetUncomittedEvents()); + Assert.Equal(0, sut.Snapshot.Value); + } + + [Fact] + public async Task Should_reset_state_when_writing_snapshot_for_update_failed() + { + await SetupCreatedAsync(); + + A.CallTo(() => persistence.WriteSnapshotAsync(A.Ignored)) + .Throws(new InvalidOperationException()); + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(C(new UpdateAuto()))); + + Assert.Empty(sut.GetUncomittedEvents()); + Assert.Equal(0, sut.Snapshot.Value); + } + + /* + [Fact] + public async Task Should_not_ignore_exception_when_saving() + { + A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) + .Throws(new InvalidOperationException()); + + await sut.ActivateAsync(id, store); + + var event1 = new MyEvent(); + var event2 = new MyEvent(); + var newState = new MyDomainState(); + + sut.RaiseEvent(event1); + sut.RaiseEvent(event2); + sut.ApplySnapshot(newState); + + await Assert.ThrowsAsync(() => sut.WriteAsync()); + + A.CallTo(() => persistence.WriteSnapshotAsync(newState)) + .MustNotHaveHappened(); + A.CallTo(() => persistence.WriteEventsAsync(A>>.That.Matches(x => x.Count() == 2))) + .MustHaveHappened(); + + Assert.Empty(sut.GetUncomittedEvents()); + }*/ + + private async Task SetupCreatedAsync() + { + await sut.OnActivateAsync(); + + await sut.ExecuteAsync(C(new CreateAuto())); + } + + private static J C(IAggregateCommand command) + { + return command.AsJ(); + } + + private async Task SetupEmptyAsync() + { + await sut.OnActivateAsync(); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/DefaultEventNotifierTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/DefaultEventNotifierTests.cs deleted file mode 100644 index 5730499c2..000000000 --- a/tests/Squidex.Infrastructure.Tests/EventSourcing/DefaultEventNotifierTests.cs +++ /dev/null @@ -1,49 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Collections.Generic; -using Xunit; - -namespace Squidex.Infrastructure.EventSourcing -{ - public class DefaultEventNotifierTests - { - private readonly DefaultEventNotifier sut = new DefaultEventNotifier(new InMemoryPubSub()); - - [Fact] - public void Should_invalidate_all_actions() - { - var handler1Handled = 0; - var handler2Handled = 0; - - var streamNames = new List(); - - sut.Subscribe(x => - { - streamNames.Add(x); - - handler1Handled++; - }); - - sut.NotifyEventsStored("a"); - - sut.Subscribe(x => - { - streamNames.Add(x); - - handler2Handled++; - }); - - sut.NotifyEventsStored("b"); - - Assert.Equal(2, handler1Handled); - Assert.Equal(1, handler2Handled); - - Assert.Equal(streamNames.ToArray(), new[] { "a", "b", "b" }); - } - } -} diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerGrainTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerGrainTests.cs index bbd69a37f..efb8f090e 100644 --- a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerGrainTests.cs +++ b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerGrainTests.cs @@ -9,6 +9,9 @@ using System; using System.Threading.Tasks; using FakeItEasy; using FluentAssertions; +using Orleans.Concurrency; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Infrastructure.Log; using Squidex.Infrastructure.States; using Squidex.Infrastructure.TestHelpers; @@ -20,20 +23,31 @@ namespace Squidex.Infrastructure.EventSourcing.Grains { public sealed class MyEventConsumerGrain : EventConsumerGrain { - public MyEventConsumerGrain(IEventStore eventStore, IEventDataFormatter eventDataFormatter, ISemanticLog log) - : base(eventStore, eventDataFormatter, log) + public MyEventConsumerGrain( + EventConsumerFactory eventConsumerFactory, + IStore store, + IEventStore eventStore, + IEventDataFormatter eventDataFormatter, + IGrainIdentity identity, + IGrainRuntime runtime, + ISemanticLog log) + : base(eventConsumerFactory, store, eventStore, eventDataFormatter, identity, runtime, log) { } - protected override IEventSubscription CreateSubscription(IEventStore eventStore, string streamFilter, string position) + protected override IEventConsumerGrain GetSelf() { - return eventStore.CreateSubscription(this, streamFilter, position); + return this; + } + + protected override IEventSubscription CreateSubscription(IEventStore eventStore, IEventSubscriber subscriber, string streamFilter, string position) + { + return eventStore.CreateSubscription(subscriber, streamFilter, position); } } private readonly IEventConsumer eventConsumer = A.Fake(); private readonly IEventStore eventStore = A.Fake(); - private readonly IEventSubscriber sutSubscriber; private readonly IEventSubscription eventSubscription = A.Fake(); private readonly IPersistence persistence = A.Fake>(); private readonly ISemanticLog log = A.Fake(); @@ -53,8 +67,8 @@ namespace Squidex.Infrastructure.EventSourcing.Grains consumerName = eventConsumer.GetType().Name; - A.CallTo(() => store.WithSnapshots(consumerName, A>.Ignored)) - .Invokes(new Action>((key, a) => apply = a)) + A.CallTo(() => store.WithSnapshots(A.Ignored, consumerName, A>.Ignored)) + .Invokes(new Action>((t, key, a) => apply = a)) .Returns(persistence); A.CallTo(() => eventStore.CreateSubscription(A.Ignored, A.Ignored, A.Ignored)) @@ -71,18 +85,23 @@ namespace Squidex.Infrastructure.EventSourcing.Grains A.CallTo(() => formatter.Parse(eventData, true)).Returns(envelope); - sut = new MyEventConsumerGrain(eventStore, formatter, log); - sutSubscriber = sut; + sut = new MyEventConsumerGrain( + x => eventConsumer, + store, + eventStore, + formatter, + A.Fake(), + A.Fake(), + log); } [Fact] - public void Should_not_subscribe_to_event_store_when_stopped_in_db() + public async Task Should_not_subscribe_to_event_store_when_stopped_in_db() { state = state.Stopped(); - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - sut.Dispose(); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = true, Position = initialPosition, Error = null }); @@ -91,11 +110,10 @@ namespace Squidex.Infrastructure.EventSourcing.Grains } [Fact] - public void Should_subscribe_to_event_store_when_not_found_in_db() + public async Task Should_subscribe_to_event_store_when_not_found_in_db() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - sut.Dispose(); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); @@ -104,11 +122,10 @@ namespace Squidex.Infrastructure.EventSourcing.Grains } [Fact] - public void Should_subscribe_to_event_store_when_not_stopped_in_db() + public async Task Should_subscribe_to_event_store_when_not_stopped_in_db() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - sut.Dispose(); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); @@ -117,14 +134,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains } [Fact] - public void Should_stop_subscription_when_stopped() + public async Task Should_stop_subscription_when_stopped() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - sut.Stop(); - sut.Stop(); - - sut.Dispose(); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); + await sut.StopAsync(); + await sut.StopAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = true, Position = initialPosition, Error = null }); @@ -136,13 +151,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains } [Fact] - public void Should_reset_consumer_when_resetting() + public async Task Should_reset_consumer_when_resetting() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - sut.Stop(); - sut.Reset(); - sut.Dispose(); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); + await sut.StopAsync(); + await sut.ResetAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = null, Error = null }); @@ -165,14 +179,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_invoke_and_update_position_when_event_received() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData); - await OnEventAsync(eventSubscription, @event); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); - sut.Dispose(); + await OnEventAsync(eventSubscription, @event); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = @event.EventPosition, Error = null }); @@ -186,17 +198,15 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_ignore_old_events() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - A.CallTo(() => formatter.Parse(eventData, true)) .Throws(new TypeNameNotFoundException()); var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData); - await OnEventAsync(eventSubscription, @event); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); - sut.Dispose(); + await OnEventAsync(eventSubscription, @event); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = @event.EventPosition, Error = null }); @@ -210,14 +220,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_not_invoke_and_update_position_when_event_is_from_another_subscription() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData); - await OnEventAsync(A.Fake(), @event); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); - sut.Dispose(); + await OnEventAsync(A.Fake(), @event); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); @@ -228,15 +236,13 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_stop_if_consumer_failed() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); var ex = new InvalidOperationException(); await OnErrorAsync(eventSubscription, ex); - sut.Dispose(); - state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = true, Position = initialPosition, Error = ex.ToString() }); A.CallTo(() => persistence.WriteSnapshotAsync(A.Ignored)) @@ -249,14 +255,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_not_make_error_handling_when_exception_is_from_another_subscription() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - var ex = new InvalidOperationException(); - await OnErrorAsync(A.Fake(), ex); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); - sut.Dispose(); + await OnErrorAsync(A.Fake(), ex); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); @@ -265,18 +269,27 @@ namespace Squidex.Infrastructure.EventSourcing.Grains } [Fact] - public void Should_stop_if_resetting_failed() + public async Task Should_wakeup_when_already_subscribed() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); + await sut.ActivateAsync(); + + A.CallTo(() => eventSubscription.WakeUp()) + .MustHaveHappened(); + } + [Fact] + public async Task Should_stop_if_resetting_failed() + { var ex = new InvalidOperationException(); A.CallTo(() => eventConsumer.ClearAsync()) .Throws(ex); - sut.Reset(); - sut.Dispose(); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); + await sut.ResetAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = true, Position = initialPosition, Error = ex.ToString() }); @@ -290,9 +303,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_stop_if_handling_failed() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - var ex = new InvalidOperationException(); A.CallTo(() => eventConsumer.On(envelope)) @@ -300,9 +310,10 @@ namespace Squidex.Infrastructure.EventSourcing.Grains var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData); - await OnEventAsync(eventSubscription, @event); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); - sut.Dispose(); + await OnEventAsync(eventSubscription, @event); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = true, Position = initialPosition, Error = ex.ToString() }); @@ -314,16 +325,11 @@ namespace Squidex.Infrastructure.EventSourcing.Grains A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(Repeated.Exactly.Once); - - sut.GetState().ShouldBeEquivalentTo(new EventConsumerInfo { Name = consumerName, IsStopped = true, Position = initialPosition, Error = ex.ToString() }); } [Fact] public async Task Should_stop_if_deserialization_failed() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - var ex = new InvalidOperationException(); A.CallTo(() => formatter.Parse(eventData, true)) @@ -331,9 +337,10 @@ namespace Squidex.Infrastructure.EventSourcing.Grains var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData); - await OnEventAsync(eventSubscription, @event); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); - sut.Dispose(); + await OnEventAsync(eventSubscription, @event); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = true, Position = initialPosition, Error = ex.ToString() }); @@ -350,9 +357,6 @@ namespace Squidex.Infrastructure.EventSourcing.Grains [Fact] public async Task Should_start_after_stop_when_handling_failed() { - sut.ActivateAsync(consumerName, store).Wait(); - sut.Activate(eventConsumer); - var exception = new InvalidOperationException(); A.CallTo(() => eventConsumer.On(envelope)) @@ -360,11 +364,14 @@ namespace Squidex.Infrastructure.EventSourcing.Grains var @event = new StoredEvent(Guid.NewGuid().ToString(), 123, eventData); + await sut.OnActivateAsync(); + await sut.ActivateAsync(); + await OnEventAsync(eventSubscription, @event); - sut.Start(); - sut.Start(); - sut.Dispose(); + await sut.StopAsync(); + await sut.StartAsync(); + await sut.StartAsync(); state.ShouldBeEquivalentTo(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); @@ -383,12 +390,12 @@ namespace Squidex.Infrastructure.EventSourcing.Grains private Task OnErrorAsync(IEventSubscription subscriber, Exception ex) { - return sutSubscriber.OnErrorAsync(subscriber, ex); + return sut.OnErrorAsync(subscriber.AsImmutable(), ex.AsImmutable()); } private Task OnEventAsync(IEventSubscription subscriber, StoredEvent ev) { - return sutSubscriber.OnEventAsync(subscriber, ev); + return sut.OnEventAsync(subscriber.AsImmutable(), ev.AsImmutable()); } } } \ No newline at end of file diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerGrainTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerGrainTests.cs new file mode 100644 index 000000000..22433e7fa --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerGrainTests.cs @@ -0,0 +1,162 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Collections.Generic; +using System.Threading.Tasks; +using FakeItEasy; +using FluentAssertions; +using Orleans; +using Orleans.Concurrency; +using Orleans.Core; +using Orleans.Runtime; +using Xunit; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public class EventConsumerManagerGrainTests + { + public class MyEventConsumerManagerGrain : EventConsumerManagerGrain + { + public MyEventConsumerManagerGrain( + IEnumerable eventConsumers, + IGrainIdentity identity, + IGrainRuntime runtime) + : base(eventConsumers, identity, runtime) + { + } + } + + private readonly IEventConsumer consumerA = A.Fake(); + private readonly IEventConsumer consumerB = A.Fake(); + private readonly IEventConsumerGrain grainA = A.Fake(); + private readonly IEventConsumerGrain grainB = A.Fake(); + private readonly MyEventConsumerManagerGrain sut; + + public EventConsumerManagerGrainTests() + { + var grainRuntime = A.Fake(); + var grainFactory = A.Fake(); + + A.CallTo(() => grainFactory.GetGrain("a", null)).Returns(grainA); + A.CallTo(() => grainFactory.GetGrain("b", null)).Returns(grainB); + A.CallTo(() => grainRuntime.GrainFactory).Returns(grainFactory); + + A.CallTo(() => consumerA.Name).Returns("a"); + A.CallTo(() => consumerA.EventsFilter).Returns("^a-"); + + A.CallTo(() => consumerB.Name).Returns("b"); + A.CallTo(() => consumerB.EventsFilter).Returns("^b-"); + + sut = new MyEventConsumerManagerGrain(new[] { consumerA, consumerB }, A.Fake(), grainRuntime); + } + + [Fact] + public async Task Should_not_activate_all_grains_on_activate() + { + await sut.OnActivateAsync(); + + A.CallTo(() => grainA.ActivateAsync()) + .MustNotHaveHappened(); + + A.CallTo(() => grainB.ActivateAsync()) + .MustNotHaveHappened(); + } + + [Fact] + public async Task Should_activate_all_grains_on_reminder() + { + await sut.ReceiveReminder(null, default(TickStatus)); + + A.CallTo(() => grainA.ActivateAsync()) + .MustHaveHappened(); + + A.CallTo(() => grainB.ActivateAsync()) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_activate_all_grains_on_wakeup_with_null() + { + await sut.ActivateAsync(null); + + A.CallTo(() => grainA.ActivateAsync()) + .MustHaveHappened(); + + A.CallTo(() => grainB.ActivateAsync()) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_activate_matching_grains_when_stream_name_defined() + { + await sut.ActivateAsync("a-123"); + + A.CallTo(() => grainA.ActivateAsync()) + .MustHaveHappened(); + + A.CallTo(() => grainB.ActivateAsync()) + .MustNotHaveHappened(); + } + + [Fact] + public async Task Should_start_matching_grain() + { + await sut.StartAsync("a"); + + A.CallTo(() => grainA.StartAsync()) + .MustHaveHappened(); + + A.CallTo(() => grainB.StartAsync()) + .MustNotHaveHappened(); + } + + [Fact] + public async Task Should_stop_matching_grain() + { + await sut.StopAsync("b"); + + A.CallTo(() => grainA.StopAsync()) + .MustNotHaveHappened(); + + A.CallTo(() => grainB.StopAsync()) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_reset_matching_grain() + { + await sut.ResetAsync("b"); + + A.CallTo(() => grainA.ResetAsync()) + .MustNotHaveHappened(); + + A.CallTo(() => grainB.ResetAsync()) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_fetch_infos_from_all_grains() + { + A.CallTo(() => grainA.GetStateAsync()) + .Returns(new Immutable( + new EventConsumerInfo { Name = "A", Error = "A-Error", IsStopped = false, Position = "123" })); + + A.CallTo(() => grainB.GetStateAsync()) + .Returns(new Immutable( + new EventConsumerInfo { Name = "B", Error = "B-Error", IsStopped = false, Position = "456" })); + + var infos = await sut.GetConsumersAsync(); + + infos.Value.ShouldBeEquivalentTo( + new List + { + new EventConsumerInfo { Name = "A", Error = "A-Error", IsStopped = false, Position = "123" }, + new EventConsumerInfo { Name = "B", Error = "B-Error", IsStopped = false, Position = "456" } + }); + } + } +} \ No newline at end of file diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs deleted file mode 100644 index 1a35c41a2..000000000 --- a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/EventConsumerManagerTests.cs +++ /dev/null @@ -1,120 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using FakeItEasy; -using FluentAssertions; -using Squidex.Infrastructure.States; -using Xunit; - -namespace Squidex.Infrastructure.EventSourcing.Grains -{ - public class EventConsumerManagerTests - { - private readonly EventConsumerGrain actor1 = A.Fake(); - private readonly EventConsumerGrain actor2 = A.Fake(); - private readonly IStateFactory factory = A.Fake(); - private readonly IEventConsumer consumer1 = A.Fake(); - private readonly IEventConsumer consumer2 = A.Fake(); - private readonly IPubSub pubSub = new InMemoryPubSub(); - private readonly string consumerName1 = "Consumer1"; - private readonly string consumerName2 = "Consumer2"; - private readonly EventConsumerManagerGrain sut; - - public EventConsumerManagerTests() - { - A.CallTo(() => consumer1.Name).Returns(consumerName1); - A.CallTo(() => consumer2.Name).Returns(consumerName2); - - A.CallTo(() => factory.CreateAsync(consumerName1)).Returns(actor1); - A.CallTo(() => factory.CreateAsync(consumerName2)).Returns(actor2); - - sut = new EventConsumerManagerGrain(new IEventConsumer[] { consumer1, consumer2 }, pubSub, factory); - } - - [Fact] - public void Should_activate_all_actors() - { - sut.Run(); - - A.CallTo(() => actor1.Activate(consumer1)) - .MustHaveHappened(); - - A.CallTo(() => actor2.Activate(consumer2)) - .MustHaveHappened(); - } - - [Fact] - public void Should_start_correct_actor() - { - sut.Run(); - - pubSub.Publish(new StartConsumerMessage { ConsumerName = consumerName1 }, true); - - A.CallTo(() => actor1.Start()) - .MustHaveHappened(); - - A.CallTo(() => actor2.Start()) - .MustNotHaveHappened(); - } - - [Fact] - public void Should_stop_correct_actor() - { - sut.Run(); - - pubSub.Publish(new StopConsumerMessage { ConsumerName = consumerName1 }, true); - - A.CallTo(() => actor1.Stop()) - .MustHaveHappened(); - - A.CallTo(() => actor2.Stop()) - .MustNotHaveHappened(); - } - - [Fact] - public void Should_reset_correct_actor() - { - sut.Run(); - - pubSub.Publish(new ResetConsumerMessage { ConsumerName = consumerName2 }, true); - - A.CallTo(() => actor1.Reset()) - .MustNotHaveHappened(); - - A.CallTo(() => actor2.Reset()) - .MustHaveHappened(); - } - - [Fact] - public async Task Should_get_state_from_all_actors() - { - sut.Run(); - - A.CallTo(() => actor1.GetState()) - .Returns(new EventConsumerInfo { Name = consumerName1, Position = "123 " }); - - A.CallTo(() => actor2.GetState()) - .Returns(new EventConsumerInfo { Name = consumerName2, Position = "345 " }); - - var response = await pubSub.RequestAsync(new GetStatesRequest(), TimeSpan.FromSeconds(5), true); - - response.States.ShouldAllBeEquivalentTo(new EventConsumerInfo[] - { - new EventConsumerInfo { Name = consumerName1, Position = "123 " }, - new EventConsumerInfo { Name = consumerName2, Position = "345 " } - }); - } - - [Fact] - public void Should_not_dispose_actors() - { - sut.Dispose(); - } - } -} diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/OrleansEventNotifierTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/OrleansEventNotifierTests.cs new file mode 100644 index 000000000..536e8829f --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/EventSourcing/Grains/OrleansEventNotifierTests.cs @@ -0,0 +1,39 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using FakeItEasy; +using Orleans; +using Xunit; + +namespace Squidex.Infrastructure.EventSourcing.Grains +{ + public class OrleansEventNotifierTests + { + private readonly IEventConsumerManagerGrain manager = A.Fake(); + private readonly OrleansEventNotifier sut; + + public OrleansEventNotifierTests() + { + var factory = A.Fake(); + + A.CallTo(() => factory.GetGrain("Default", null)) + .Returns(manager); + + sut = new OrleansEventNotifier(factory); + } + + [Fact] + public void Should_wakeup_manager_with_stream_name() + { + sut.Initialize(); + sut.NotifyEventsStored("my-stream"); + + A.CallTo(() => manager.ActivateAsync("my-stream")) + .MustHaveHappened(); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/PollingSubscriptionTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/PollingSubscriptionTests.cs index 19baac3de..8f2e5ac6f 100644 --- a/tests/Squidex.Infrastructure.Tests/EventSourcing/PollingSubscriptionTests.cs +++ b/tests/Squidex.Infrastructure.Tests/EventSourcing/PollingSubscriptionTests.cs @@ -16,14 +16,13 @@ namespace Squidex.Infrastructure.EventSourcing public class PollingSubscriptionTests { private readonly IEventStore eventStore = A.Fake(); - private readonly IEventNotifier eventNotifier = new DefaultEventNotifier(new InMemoryPubSub()); private readonly IEventSubscriber eventSubscriber = A.Fake(); private readonly string position = Guid.NewGuid().ToString(); [Fact] public async Task Should_subscribe_on_start() { - var sut = new PollingSubscription(eventStore, eventNotifier, eventSubscriber, "^my-stream", position); + var sut = new PollingSubscription(eventStore, eventSubscriber, "^my-stream", position); await WaitAndStopAsync(sut); @@ -39,7 +38,7 @@ namespace Squidex.Infrastructure.EventSourcing A.CallTo(() => eventStore.QueryAsync(A>.Ignored, "^my-stream", position, A.Ignored)) .Throws(ex); - var sut = new PollingSubscription(eventStore, eventNotifier, eventSubscriber, "^my-stream", position); + var sut = new PollingSubscription(eventStore, eventSubscriber, "^my-stream", position); await WaitAndStopAsync(sut); @@ -55,7 +54,7 @@ namespace Squidex.Infrastructure.EventSourcing A.CallTo(() => eventStore.QueryAsync(A>.Ignored, "^my-stream", position, A.Ignored)) .Throws(ex); - var sut = new PollingSubscription(eventStore, eventNotifier, eventSubscriber, "^my-stream", position); + var sut = new PollingSubscription(eventStore, eventSubscriber, "^my-stream", position); await WaitAndStopAsync(sut); @@ -71,7 +70,7 @@ namespace Squidex.Infrastructure.EventSourcing A.CallTo(() => eventStore.QueryAsync(A>.Ignored, "^my-stream", position, A.Ignored)) .Throws(ex); - var sut = new PollingSubscription(eventStore, eventNotifier, eventSubscriber, "^my-stream", position); + var sut = new PollingSubscription(eventStore, eventSubscriber, "^my-stream", position); await WaitAndStopAsync(sut); @@ -80,24 +79,11 @@ namespace Squidex.Infrastructure.EventSourcing } [Fact] - public async Task Should_not_subscribe_on_notify_when_stream_matches() + public async Task Should_wake_up() { - var sut = new PollingSubscription(eventStore, eventNotifier, eventSubscriber, "^my-stream", position); + var sut = new PollingSubscription(eventStore, eventSubscriber, "^my-stream", position); - eventNotifier.NotifyEventsStored("other-stream-123"); - - await WaitAndStopAsync(sut); - - A.CallTo(() => eventStore.QueryAsync(A>.Ignored, "^my-stream", position, A.Ignored)) - .MustHaveHappened(Repeated.Exactly.Once); - } - - [Fact] - public async Task Should_subscribe_on_notify_when_stream_matches() - { - var sut = new PollingSubscription(eventStore, eventNotifier, eventSubscriber, "^my-stream", position); - - eventNotifier.NotifyEventsStored("my-stream-123"); + sut.WakeUp(); await WaitAndStopAsync(sut); diff --git a/tests/Squidex.Infrastructure.Tests/Orleans/BootstrapTests.cs b/tests/Squidex.Infrastructure.Tests/Orleans/BootstrapTests.cs new file mode 100644 index 000000000..fadfd0ba3 --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/Orleans/BootstrapTests.cs @@ -0,0 +1,39 @@ +// ========================================================================== +// EventConsumerBootstrapTests.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using FakeItEasy; +using Orleans; +using Xunit; + +namespace Squidex.Infrastructure.Orleans +{ + public sealed class BootstrapTests + { + private readonly IBackgroundGrain grain = A.Fake(); + private readonly Bootstrap sut; + + public BootstrapTests() + { + var factory = A.Fake(); + + sut = new Bootstrap(factory); + + A.CallTo(() => factory.GetGrain("Default", null)) + .Returns(grain); + } + + [Fact] + public void Should_activate_grain_on_run() + { + sut.Run(); + + A.CallTo(() => grain.ActivateAsync()) + .MustHaveHappened(); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs b/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs new file mode 100644 index 000000000..236e0c25b --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/Orleans/JsonExternalSerializerTests.cs @@ -0,0 +1,80 @@ +// ========================================================================== +// JsonExternalSerializerTests.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using System.Collections.Generic; +using FakeItEasy; +using Orleans.Serialization; +using Xunit; + +namespace Squidex.Infrastructure.Orleans +{ + public class JsonExternalSerializerTests + { + [Fact] + public void Should_not_copy_null() + { + var v = (string)null; + var c = J.Copy(v, null); + + Assert.Null(c); + } + + [Fact] + public void Should_copy_null_json() + { + var v = new J>(null); + var c = (J>)J.Copy(v, null); + + Assert.Null(c.Value); + } + + [Fact] + public void Should_not_copy_immutable_values() + { + var v = new List { 1, 2, 3 }.AsJ(); + var c = (J>)J.Copy(v, null); + + Assert.Same(v.Value, c.Value); + } + + [Fact] + public void Should_serialize_and_deserialize_value() + { + var value = new J>(new List { 1, 2, 3 }); + + var writtenLength = 0; + var writtenBuffer = (byte[])null; + + var writer = A.Fake(); + var writerContext = new SerializationContext(null) { StreamWriter = writer }; + + A.CallTo(() => writer.Write(A.Ignored)) + .Invokes(new Action(x => writtenLength = x)); + + A.CallTo(() => writer.Write(A.Ignored)) + .Invokes(new Action(x => writtenBuffer = x)); + + J.Serialize(value, writerContext, value.GetType()); + + var reader = A.Fake(); + var readerContext = new DeserializationContext(null) { StreamReader = reader }; + + A.CallTo(() => reader.ReadInt()) + .Returns(writtenLength); + + A.CallTo(() => reader.ReadBytes(writtenLength)) + .Returns(writtenBuffer); + + var copy = (J>)J.Deserialize(value.GetType(), readerContext); + + Assert.Equal(value.Value, copy.Value); + Assert.NotSame(value.Value, copy.Value); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/States/PersistenceEventSourcingTests.cs b/tests/Squidex.Infrastructure.Tests/States/PersistenceEventSourcingTests.cs index 9eed300b9..b305cab88 100644 --- a/tests/Squidex.Infrastructure.Tests/States/PersistenceEventSourcingTests.cs +++ b/tests/Squidex.Infrastructure.Tests/States/PersistenceEventSourcingTests.cs @@ -13,7 +13,6 @@ using FakeItEasy; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Options; using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Tasks; using Squidex.Infrastructure.TestHelpers; using Xunit; @@ -21,48 +20,7 @@ namespace Squidex.Infrastructure.States { public class PersistenceEventSourcingTests { - private class MyStatefulObject : IStatefulObject - { - private readonly List appliedEvents = new List(); - private IPersistence persistence; - - public long ExpectedVersion { get; set; } = EtagVersion.Any; - - public List AppliedEvents - { - get { return appliedEvents; } - } - - public Task ActivateAsync(string key, IStore store) - { - persistence = store.WithEventSourcing(key, e => appliedEvents.Add(e.Payload)); - - return persistence.ReadAsync(ExpectedVersion); - } - - public Task WriteEventsAsync(params IEvent[] events) - { - return persistence.WriteEventsAsync(events.Select(Envelope.Create).ToArray()); - } - } - - private class MyStatefulObjectWithSnapshot : IStatefulObject - { - private IPersistence persistence; - - public long ExpectedVersion { get; set; } = EtagVersion.Any; - - public Task ActivateAsync(string key, IStore store) - { - persistence = store.WithSnapshotsAndEventSourcing(key, s => TaskHelper.Done, s => TaskHelper.Done); - - return persistence.ReadAsync(ExpectedVersion); - } - } - private readonly string key = Guid.NewGuid().ToString(); - private readonly MyStatefulObject statefulObject = new MyStatefulObject(); - private readonly MyStatefulObjectWithSnapshot statefulObjectWithSnapShot = new MyStatefulObjectWithSnapshot(); private readonly IEventDataFormatter eventDataFormatter = A.Fake(); private readonly IEventStore eventStore = A.Fake(); private readonly IMemoryCache cache = new MemoryCache(Options.Create(new MemoryCacheOptions())); @@ -70,42 +28,53 @@ namespace Squidex.Infrastructure.States private readonly IServiceProvider services = A.Fake(); private readonly ISnapshotStore snapshotStore = A.Fake>(); private readonly IStreamNameResolver streamNameResolver = A.Fake(); - private readonly StateFactory sut; + private readonly IStore sut; public PersistenceEventSourcingTests() { - A.CallTo(() => services.GetService(typeof(MyStatefulObject))) - .Returns(statefulObject); - A.CallTo(() => services.GetService(typeof(MyStatefulObjectWithSnapshot))) - .Returns(statefulObjectWithSnapShot); A.CallTo(() => services.GetService(typeof(ISnapshotStore))) .Returns(snapshotStore); - A.CallTo(() => streamNameResolver.GetStreamName(typeof(MyStatefulObject), key)) - .Returns(key); - A.CallTo(() => streamNameResolver.GetStreamName(typeof(MyStatefulObjectWithSnapshot), key)) + A.CallTo(() => streamNameResolver.GetStreamName(typeof(object), key)) .Returns(key); - sut = new StateFactory(pubSub, cache, eventStore, eventDataFormatter, services, streamNameResolver); - sut.Initialize(); + sut = new Store(eventStore, eventDataFormatter, services, streamNameResolver); } [Fact] public async Task Should_read_from_store() { - statefulObject.ExpectedVersion = 1; - var event1 = new MyEvent(); var event2 = new MyEvent(); SetupEventStore(event1, event2); - var actualObject = await sut.GetSingleAsync(key); + var persistedEvents = new List(); + var persistence = sut.WithEventSourcing(key, x => persistedEvents.Add(x.Payload)); + + await persistence.ReadAsync(); + + Assert.Equal(persistedEvents.ToArray(), new[] { event1, event2 }); + } + + [Fact] + public async Task Should_ignore_old_events() + { + var storedEvent = new StoredEvent("1", 0, new EventData()); + + A.CallTo(() => eventStore.QueryAsync(key, 0)) + .Returns(new List { storedEvent }); + + A.CallTo(() => eventDataFormatter.Parse(storedEvent.Data, true)) + .Throws(new TypeNameNotFoundException()); + + var persistedEvents = new List(); + var persistence = sut.WithEventSourcing(key, x => persistedEvents.Add(x.Payload)); - Assert.Same(statefulObject, actualObject); - Assert.NotNull(cache.Get(key)); + await persistence.ReadAsync(); - Assert.Equal(actualObject.AppliedEvents, new[] { event1, event2 }); + Assert.Empty(persistedEvents); + Assert.Equal(0, persistence.Version); } [Fact] @@ -116,7 +85,11 @@ namespace Squidex.Infrastructure.States SetupEventStore(3, 2); - await sut.GetSingleAsync(key); + var persistedState = (object)null; + var persistedEvents = new List(); + var persistence = sut.WithSnapshotsAndEventSourcing(key, x => persistedState = x, x => persistedEvents.Add(x.Payload)); + + await persistence.ReadAsync(); A.CallTo(() => eventStore.QueryAsync(key, 3)) .MustHaveHappened(); @@ -130,7 +103,11 @@ namespace Squidex.Infrastructure.States SetupEventStore(3, 0, 3); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + var persistedState = (object)null; + var persistedEvents = new List(); + var persistence = sut.WithSnapshotsAndEventSourcing(key, x => persistedState = x, x => persistedEvents.Add(x.Payload)); + + await Assert.ThrowsAsync(() => persistence.ReadAsync()); } [Fact] @@ -141,50 +118,60 @@ namespace Squidex.Infrastructure.States SetupEventStore(3, 4, 3); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + var persistedState = (object)null; + var persistedEvents = new List(); + var persistence = sut.WithSnapshotsAndEventSourcing(key, x => persistedState = x, x => persistedEvents.Add(x.Payload)); + + await Assert.ThrowsAsync(() => persistence.ReadAsync()); } [Fact] public async Task Should_throw_exception_if_not_found() { - statefulObject.ExpectedVersion = 0; - SetupEventStore(0); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + var persistedEvents = new List(); + var persistence = sut.WithEventSourcing(key, x => persistedEvents.Add(x.Payload)); + + await Assert.ThrowsAsync(() => persistence.ReadAsync(1)); } [Fact] public async Task Should_throw_exception_if_other_version_found() { - statefulObject.ExpectedVersion = 1; - SetupEventStore(3); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + var persistedEvents = new List(); + var persistence = sut.WithEventSourcing(key, x => persistedEvents.Add(x.Payload)); + + await Assert.ThrowsAsync(() => persistence.ReadAsync(1)); } [Fact] public async Task Should_throw_exception_if_other_version_found_from_snapshot() { - statefulObjectWithSnapShot.ExpectedVersion = 1; - A.CallTo(() => snapshotStore.ReadAsync(key)) .Returns((2, 2L)); SetupEventStore(0); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + var persistedState = (object)null; + var persistedEvents = new List(); + var persistence = sut.WithSnapshotsAndEventSourcing(key, x => persistedState = x, x => persistedEvents.Add(x.Payload)); + + await Assert.ThrowsAsync(() => persistence.ReadAsync(1)); } [Fact] public async Task Should_not_throw_exception_if_nothing_expected() { - statefulObject.ExpectedVersion = EtagVersion.Any; - SetupEventStore(0); - await sut.GetSingleAsync(key); + var persistedState = (object)null; + var persistedEvents = new List(); + var persistence = sut.WithSnapshotsAndEventSourcing(key, x => persistedState = x, x => persistedEvents.Add(x.Payload)); + + await persistence.ReadAsync(); } [Fact] @@ -192,12 +179,13 @@ namespace Squidex.Infrastructure.States { SetupEventStore(3); - var actualObject = await sut.GetSingleAsync(key); + var persistedEvents = new List(); + var persistence = sut.WithEventSourcing(key, x => persistedEvents.Add(x.Payload)); - Assert.Same(statefulObject, actualObject); + await persistence.ReadAsync(); - await statefulObject.WriteEventsAsync(new MyEvent(), new MyEvent()); - await statefulObject.WriteEventsAsync(new MyEvent(), new MyEvent()); + await persistence.WriteEventsAsync(new[] { new MyEvent(), new MyEvent() }.Select(Envelope.Create)); + await persistence.WriteEventsAsync(new[] { new MyEvent(), new MyEvent() }.Select(Envelope.Create)); A.CallTo(() => eventStore.AppendAsync(A.Ignored, key, 2, A>.That.Matches(x => x.Count == 2))) .MustHaveHappened(); @@ -210,49 +198,15 @@ namespace Squidex.Infrastructure.States { SetupEventStore(3); - var actualObject = await sut.GetSingleAsync(key); + var persistedEvents = new List(); + var persistence = sut.WithEventSourcing(key, x => persistedEvents.Add(x.Payload)); + + await persistence.ReadAsync(); A.CallTo(() => eventStore.AppendAsync(A.Ignored, key, 2, A>.That.Matches(x => x.Count == 2))) .Throws(new WrongEventVersionException(1, 1)); - await Assert.ThrowsAsync(() => statefulObject.WriteEventsAsync(new MyEvent(), new MyEvent())); - } - - [Fact] - public async Task Should_not_remove_from_cache_when_write_failed() - { - A.CallTo(() => eventStore.AppendAsync(A.Ignored, A.Ignored, A.Ignored, A>.Ignored)) - .Throws(new InvalidOperationException()); - - var actualObject = await sut.GetSingleAsync(key); - - await Assert.ThrowsAsync(() => statefulObject.WriteEventsAsync(new MyEvent())); - - Assert.True(cache.TryGetValue(key, out var t)); - } - - [Fact] - public async Task Should_return_same_instance_for_parallel_requests() - { - A.CallTo(() => snapshotStore.ReadAsync(key)) - .ReturnsLazily(() => Task.Delay(1).ContinueWith(x => ((object)1, 1L))); - - var tasks = new List>(); - - for (var i = 0; i < 1000; i++) - { - tasks.Add(Task.Run(() => sut.GetSingleAsync(key))); - } - - var retrievedStates = await Task.WhenAll(tasks); - - foreach (var retrievedState in retrievedStates) - { - Assert.Same(retrievedStates[0], retrievedState); - } - - A.CallTo(() => eventStore.QueryAsync(key, 0)) - .MustHaveHappened(Repeated.Exactly.Once); + await Assert.ThrowsAsync(() => persistence.WriteEventsAsync(new[] { new MyEvent(), new MyEvent() }.Select(Envelope.Create))); } private void SetupEventStore(int count, int eventOffset = 0, int readPosition = 0) diff --git a/tests/Squidex.Infrastructure.Tests/States/PersistenceSnapshotTests.cs b/tests/Squidex.Infrastructure.Tests/States/PersistenceSnapshotTests.cs index c64720e89..b93e483f6 100644 --- a/tests/Squidex.Infrastructure.Tests/States/PersistenceSnapshotTests.cs +++ b/tests/Squidex.Infrastructure.Tests/States/PersistenceSnapshotTests.cs @@ -6,7 +6,6 @@ // ========================================================================== using System; -using System.Collections.Generic; using System.Threading.Tasks; using FakeItEasy; using Microsoft.Extensions.Caching.Memory; @@ -18,45 +17,9 @@ using Xunit; namespace Squidex.Infrastructure.States { - public class PersistenceSnapshotTests : IDisposable + public class PersistenceSnapshotTests { - private class MyStatefulObject : IStatefulObject - { - private IPersistence persistence; - private int state; - - public long ExpectedVersion { get; set; } = EtagVersion.Any; - - public long Version - { - get { return persistence.Version; } - } - - public int State - { - get { return state; } - } - - public Task ActivateAsync(string key, IStore store) - { - persistence = store.WithSnapshots(key, s => state = s); - - return persistence.ReadAsync(ExpectedVersion); - } - - public void SetState(int value) - { - state = value; - } - - public Task WriteStateAsync() - { - return persistence.WriteSnapshotAsync(state); - } - } - private readonly string key = Guid.NewGuid().ToString(); - private readonly MyStatefulObject statefulObject = new MyStatefulObject(); private readonly IEventDataFormatter eventDataFormatter = A.Fake(); private readonly IEventStore eventStore = A.Fake(); private readonly IMemoryCache cache = new MemoryCache(Options.Create(new MemoryCacheOptions())); @@ -64,99 +27,101 @@ namespace Squidex.Infrastructure.States private readonly IServiceProvider services = A.Fake(); private readonly ISnapshotStore snapshotStore = A.Fake>(); private readonly IStreamNameResolver streamNameResolver = A.Fake(); - private readonly StateFactory sut; + private readonly IStore sut; public PersistenceSnapshotTests() { - A.CallTo(() => services.GetService(typeof(MyStatefulObject))) - .Returns(statefulObject); A.CallTo(() => services.GetService(typeof(ISnapshotStore))) .Returns(snapshotStore); - sut = new StateFactory(pubSub, cache, eventStore, eventDataFormatter, services, streamNameResolver); - sut.Initialize(); - } - - public void Dispose() - { - sut.Dispose(); + sut = new Store(eventStore, eventDataFormatter, services, streamNameResolver); } [Fact] public async Task Should_read_from_store() { - statefulObject.ExpectedVersion = 1; - A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((123, 1)); + .Returns((20, 10)); - var actualObject = await sut.GetSingleAsync(key); + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); - Assert.Same(statefulObject, actualObject); - Assert.NotNull(cache.Get(key)); + await persistence.ReadAsync(); - Assert.Equal(123, statefulObject.State); + Assert.Equal(10, persistence.Version); + Assert.Equal(20, persistedState); } [Fact] - public async Task Should_set_to_empty_when_store_returns_not_found() + public async Task Should_return_empty_version_when_version_negative() { A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((123, EtagVersion.NotFound)); + .Returns((20, -10)); + + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); - var actualObject = await sut.GetSingleAsync(key); + await persistence.ReadAsync(); - Assert.Equal(-1, statefulObject.Version); - Assert.Equal( 0, statefulObject.State); + Assert.Equal(EtagVersion.Empty, persistence.Version); } [Fact] - public async Task Should_throw_exception_if_not_found() + public async Task Should_set_to_empty_when_store_returns_not_found() { - statefulObject.ExpectedVersion = 0; - A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((0, EtagVersion.Empty)); + .Returns((20, EtagVersion.Empty)); + + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + await persistence.ReadAsync(); + + Assert.Equal(-1, persistence.Version); + Assert.Equal( 0, persistedState); } [Fact] - public async Task Should_throw_exception_if_other_version_found() + public async Task Should_throw_exception_if_not_found_and_version_expected() { - statefulObject.ExpectedVersion = 1; - A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((2, 2)); + .Returns((123, EtagVersion.Empty)); + + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); - await Assert.ThrowsAsync(() => sut.GetSingleAsync(key)); + await Assert.ThrowsAsync(() => persistence.ReadAsync(1)); } [Fact] - public async Task Should_not_throw_exception_if_noting_expected() + public async Task Should_throw_exception_if_other_version_found() { A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((0, EtagVersion.Empty)); + .Returns((123, 2)); - await sut.GetSingleAsync(key); + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); + + await Assert.ThrowsAsync(() => persistence.ReadAsync(1)); } [Fact] public async Task Should_write_to_store_with_previous_version() { A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((123, 13)); + .Returns((20, 10)); - var actualObject = await sut.GetSingleAsync(key); + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); - Assert.Same(statefulObject, actualObject); - Assert.Equal(123, statefulObject.State); + await persistence.ReadAsync(); - statefulObject.SetState(456); + Assert.Equal(10, persistence.Version); + Assert.Equal(20, persistedState); - await statefulObject.WriteStateAsync(); + await persistence.WriteSnapshotAsync(100); - A.CallTo(() => snapshotStore.WriteAsync(key, 456, 13, 14)) + A.CallTo(() => snapshotStore.WriteAsync(key, 100, 10, 11)) .MustHaveHappened(); } @@ -164,51 +129,17 @@ namespace Squidex.Infrastructure.States public async Task Should_wrap_exception_when_writing_to_store_with_previous_version() { A.CallTo(() => snapshotStore.ReadAsync(key)) - .Returns((123, 13)); + .Returns((20, 10)); - A.CallTo(() => snapshotStore.WriteAsync(key, 123, 13, 14)) + A.CallTo(() => snapshotStore.WriteAsync(key, 100, 10, 11)) .Throws(new InconsistentStateException(1, 1, new InvalidOperationException())); - var actualObject = await sut.GetSingleAsync(key); + var persistedState = 0; + var persistence = sut.WithSnapshots(key, x => persistedState = x); - await Assert.ThrowsAsync(() => statefulObject.WriteStateAsync()); - } + await persistence.ReadAsync(); - [Fact] - public async Task Should_not_remove_from_cache_when_write_failed() - { - A.CallTo(() => snapshotStore.WriteAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) - .Throws(new InvalidOperationException()); - - var actualObject = await sut.GetSingleAsync(key); - - await Assert.ThrowsAsync(() => statefulObject.WriteStateAsync()); - - Assert.True(cache.TryGetValue(key, out var t)); - } - - [Fact] - public async Task Should_return_same_instance_for_parallel_requests() - { - A.CallTo(() => snapshotStore.ReadAsync(key)) - .ReturnsLazily(() => Task.Delay(1).ContinueWith(x => (1, 1L))); - - var tasks = new List>(); - - for (var i = 0; i < 1000; i++) - { - tasks.Add(Task.Run(() => sut.GetSingleAsync(key))); - } - - var retrievedStates = await Task.WhenAll(tasks); - - foreach (var retrievedState in retrievedStates) - { - Assert.Same(retrievedStates[0], retrievedState); - } - - A.CallTo(() => snapshotStore.ReadAsync(key)) - .MustHaveHappened(Repeated.Exactly.Once); + await Assert.ThrowsAsync(() => persistence.WriteSnapshotAsync(100)); } } } \ No newline at end of file diff --git a/tests/Squidex.Infrastructure.Tests/States/StateFactoryTests.cs b/tests/Squidex.Infrastructure.Tests/States/StateFactoryTests.cs deleted file mode 100644 index e772b3b7b..000000000 --- a/tests/Squidex.Infrastructure.Tests/States/StateFactoryTests.cs +++ /dev/null @@ -1,145 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using FakeItEasy; -using Microsoft.Extensions.Caching.Memory; -using Microsoft.Extensions.Options; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Tasks; -using Xunit; - -#pragma warning disable RECS0002 // Convert anonymous method to method group - -namespace Squidex.Infrastructure.States -{ - public class StateFactoryTests : IDisposable - { - private class MyStatefulObject : IStatefulObject - { - public Task ActivateAsync(string key, IStore store) - { - return TaskHelper.Done; - } - } - - private readonly string key = Guid.NewGuid().ToString(); - private readonly MyStatefulObject statefulObject = new MyStatefulObject(); - private readonly IEventDataFormatter eventDataFormatter = A.Fake(); - private readonly IEventStore eventStore = A.Fake(); - private readonly IMemoryCache cache = new MemoryCache(Options.Create(new MemoryCacheOptions())); - private readonly IPubSub pubSub = new InMemoryPubSub(true); - private readonly IServiceProvider services = A.Fake(); - private readonly ISnapshotStore snapshotStore = A.Fake>(); - private readonly IStreamNameResolver streamNameResolver = A.Fake(); - private readonly StateFactory sut; - - public StateFactoryTests() - { - A.CallTo(() => services.GetService(typeof(MyStatefulObject))) - .Returns(statefulObject); - A.CallTo(() => services.GetService(typeof(ISnapshotStore))) - .Returns(snapshotStore); - - sut = new StateFactory(pubSub, cache, eventStore, eventDataFormatter, services, streamNameResolver); - sut.Initialize(); - } - - public void Dispose() - { - sut.Dispose(); - } - - [Fact] - public async Task Should_provide_state_from_services_and_add_to_cache() - { - var actualObject = await sut.GetSingleAsync(key); - - Assert.Same(statefulObject, actualObject); - Assert.NotNull(cache.Get(key)); - } - - [Fact] - public async Task Should_serve_next_request_from_cache() - { - var actualObject1 = await sut.GetSingleAsync(key); - - Assert.Same(statefulObject, actualObject1); - Assert.NotNull(cache.Get(key)); - - var actualObject2 = await sut.GetSingleAsync(key); - - A.CallTo(() => services.GetService(typeof(MyStatefulObject))) - .MustHaveHappened(Repeated.Exactly.Once); - } - - [Fact] - public async Task Should_not_serve_next_request_from_cache_when_detached() - { - var actualObject1 = await sut.CreateAsync(key); - - Assert.Same(statefulObject, actualObject1); - Assert.Null(cache.Get(key)); - - var actualObject2 = await sut.CreateAsync(key); - - A.CallTo(() => services.GetService(typeof(MyStatefulObject))) - .MustHaveHappened(Repeated.Exactly.Twice); - } - - [Fact] - public async Task Should_remove_from_cache_when_invalidation_message_received() - { - var actualObject = await sut.GetSingleAsync(key); - - await InvalidateCacheAsync(); - - Assert.False(cache.TryGetValue(key, out var t)); - } - - [Fact] - public async Task Should_remove_from_cache_when_method_called() - { - var actualObject = await sut.GetSingleAsync(key); - - sut.Remove(key); - - Assert.False(cache.TryGetValue(key, out var t)); - } - - [Fact] - public void Should_send_invalidation_message_on_refresh() - { - InvalidateMessage message = null; - - pubSub.Subscribe(m => - { - message = m; - }); - - sut.Synchronize(key); - - Assert.NotNull(message); - Assert.Equal(key, message.Key); - } - - private async Task RemoveFromCacheAsync() - { - cache.Remove(key); - - await Task.Delay(400); - } - - private async Task InvalidateCacheAsync() - { - pubSub.Publish(new InvalidateMessage { Key = key }, true); - - await Task.Delay(400); - } - } -} \ No newline at end of file diff --git a/tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockPoolTests.cs b/tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockPoolTests.cs new file mode 100644 index 000000000..8253783e3 --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockPoolTests.cs @@ -0,0 +1,38 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Squidex.Infrastructure.Tasks +{ + public sealed class AsyncLockPoolTests + { + [Fact] + public async Task Should_lock() + { + var sut = new AsyncLockPool(1); + + var value = 0; + + await Task.WhenAll( + Enumerable.Repeat(0, 100).Select(x => new Func(async () => + { + using (await sut.LockAsync(1)) + { + await Task.Yield(); + + value++; + } + })())); + + Assert.Equal(100, value); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockTests.cs b/tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockTests.cs new file mode 100644 index 000000000..58765fb66 --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/Tasks/AsyncLockTests.cs @@ -0,0 +1,38 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Squidex.Infrastructure.Tasks +{ + public sealed class AsyncLockTests + { + [Fact] + public async Task Should_lock() + { + var sut = new AsyncLock(); + + var value = 0; + + await Task.WhenAll( + Enumerable.Repeat(0, 100).Select(x => new Func(async () => + { + using (await sut.LockAsync()) + { + await Task.Yield(); + + value++; + } + })())); + + Assert.Equal(100, value); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/TestHelpers/MyCommand.cs b/tests/Squidex.Infrastructure.Tests/TestHelpers/MyCommand.cs index fff8348a3..274d85baf 100644 --- a/tests/Squidex.Infrastructure.Tests/TestHelpers/MyCommand.cs +++ b/tests/Squidex.Infrastructure.Tests/TestHelpers/MyCommand.cs @@ -11,11 +11,11 @@ using Squidex.Infrastructure.Commands; namespace Squidex.Infrastructure.TestHelpers { - internal sealed class MyCommand : IAggregateCommand, ITimestampCommand + public class MyCommand : IAggregateCommand, ITimestampCommand { public Guid AggregateId { get; set; } - public long ExpectedVersion { get; set; } + public long ExpectedVersion { get; set; } = EtagVersion.Any; public Instant Timestamp { get; set; } } diff --git a/tools/Migrate_01/Migrations/AddPatterns.cs b/tools/Migrate_01/Migrations/AddPatterns.cs index ca06601ec..953131930 100644 --- a/tools/Migrate_01/Migrations/AddPatterns.cs +++ b/tools/Migrate_01/Migrations/AddPatterns.cs @@ -12,7 +12,6 @@ using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Repositories; using Squidex.Infrastructure.Migrations; -using Squidex.Infrastructure.States; namespace Migrate_01.Migrations { From 1a562da78232eb8cd71403956bee45bdc8ea671b Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 12 Feb 2018 23:55:37 +0100 Subject: [PATCH 07/28] RuleGrainTests --- .../Rules/RuleGrain.cs | 13 +- .../Apps/AppCommandMiddlewareTests.cs | 580 +++---- .../Apps/AppDomainObjectTests.cs | 798 +++++----- .../Assets/AssetCommandMiddlewareTests.cs | 290 ++-- .../Assets/AssetDomainObjectTests.cs | 440 +++--- .../Contents/ContentCommandMiddlewareTests.cs | 464 +++--- .../Contents/ContentDomainObjectTests.cs | 608 ++++---- .../Rules/RuleCommandMiddlewareTests.cs | 118 -- .../Rules/RuleDequeuerTests.cs | 2 - .../Rules/RuleDomainObjectTests.cs | 256 ---- .../Rules/RuleGrainTests.cs | 227 +++ .../Schemas/SchemaCommandMiddlewareTests.cs | 560 +++---- .../Schemas/SchemaDomainObjectTests.cs | 1330 ++++++++--------- .../TestHelpers/HandlerTestBase.cs | 136 +- 14 files changed, 2827 insertions(+), 2995 deletions(-) delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleCommandMiddlewareTests.cs delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDomainObjectTests.cs create mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs diff --git a/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs b/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs index d61214ace..d99c8086a 100644 --- a/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs @@ -7,6 +7,8 @@ using System; using System.Threading.Tasks; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Rules.Guards; using Squidex.Domain.Apps.Entities.Rules.State; @@ -21,12 +23,17 @@ using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities.Rules { - public sealed class RuleGrain : DomainObjectGrain, IRuleGrain + public class RuleGrain : DomainObjectGrain, IRuleGrain { private readonly IAppProvider appProvider; public RuleGrain(IStore store, IAppProvider appProvider) - : base(store) + : this(store, appProvider, null, null) + { + } + + protected RuleGrain(IStore store, IAppProvider appProvider, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, identity, runtime) { Guard.NotNull(appProvider, nameof(appProvider)); @@ -116,7 +123,7 @@ namespace Squidex.Domain.Apps.Entities.Rules private void VerifyNotDeleted() { - if (Snapshot.IsDeleted || Snapshot.RuleDef == null) + if (Snapshot.IsDeleted) { throw new DomainException("Webhook has already been deleted."); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs index 18ab306fa..655be3528 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs @@ -1,291 +1,291 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using FakeItEasy; -using Squidex.Domain.Apps.Entities.Apps.Commands; -using Squidex.Domain.Apps.Entities.Apps.Services; -using Squidex.Domain.Apps.Entities.Apps.Services.Implementations; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.States; -using Squidex.Shared.Users; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Apps -{ - public class AppCommandMiddlewareTests : HandlerTestBase - { - private readonly IAppProvider appProvider = A.Fake(); - private readonly IAppPlansProvider appPlansProvider = A.Fake(); - private readonly IAppPlanBillingManager appPlansBillingManager = A.Fake(); - private readonly IUserResolver userResolver = A.Fake(); - private readonly Language language = Language.DE; - private readonly string contributorId = Guid.NewGuid().ToString(); - private readonly string clientName = "client"; - private readonly Guid patternId = Guid.NewGuid(); - private readonly AppDomainObject app = new AppDomainObject(new InitialPatterns()); - private readonly AppCommandMiddleware sut; - - protected override Guid Id - { - get { return AppId; } - } - - public AppCommandMiddlewareTests() - { - A.CallTo(() => appProvider.GetAppAsync(AppName)) - .Returns((IAppEntity)null); - - A.CallTo(() => userResolver.FindByIdAsync(contributorId)) - .Returns(A.Fake()); - - sut = new AppCommandMiddleware(Handler, appProvider, appPlansProvider, appPlansBillingManager, userResolver); - - app.ActivateAsync(Id, A.Fake>()); - } - - [Fact] - public async Task Create_should_create_domain_object() - { - var context = CreateContextForCommand(new CreateApp { Name = AppName, AppId = AppId }); - - await TestCreate(app, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(AppId, context.Result>().IdOrValue); - } - - [Fact] - public async Task AssignContributor_should_update_domain_object_if_user_found() - { - A.CallTo(() => appPlansProvider.GetPlan(null)) - .Returns(new ConfigAppLimitsPlan { MaxContributors = -1 }); - - CreateApp(); - - var context = CreateContextForCommand(new AssignContributor { ContributorId = contributorId }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task RemoveContributor_should_update_domain_object() - { - CreateApp() - .AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId })); - - var context = CreateContextForCommand(new RemoveContributor { ContributorId = contributorId }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task AttachClient_should_update_domain_object() - { - CreateApp(); - - var context = CreateContextForCommand(new AttachClient { Id = clientName }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task RenameClient_should_update_domain_object() - { - CreateApp() - .AttachClient(CreateCommand(new AttachClient { Id = clientName })); - - var context = CreateContextForCommand(new UpdateClient { Id = clientName, Name = "New Name" }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task RevokeClient_should_update_domain_object() - { - CreateApp() - .AttachClient(CreateCommand(new AttachClient { Id = clientName })); - - var context = CreateContextForCommand(new RevokeClient { Id = clientName }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task ChangePlan_should_update_domain_object() - { - A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) - .Returns(true); - - CreateApp(); +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.Threading.Tasks; +//using FakeItEasy; +//using Squidex.Domain.Apps.Entities.Apps.Commands; +//using Squidex.Domain.Apps.Entities.Apps.Services; +//using Squidex.Domain.Apps.Entities.Apps.Services.Implementations; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.Commands; +//using Squidex.Infrastructure.States; +//using Squidex.Shared.Users; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Apps +//{ +// public class AppCommandMiddlewareTests : HandlerTestBase +// { +// private readonly IAppProvider appProvider = A.Fake(); +// private readonly IAppPlansProvider appPlansProvider = A.Fake(); +// private readonly IAppPlanBillingManager appPlansBillingManager = A.Fake(); +// private readonly IUserResolver userResolver = A.Fake(); +// private readonly Language language = Language.DE; +// private readonly string contributorId = Guid.NewGuid().ToString(); +// private readonly string clientName = "client"; +// private readonly Guid patternId = Guid.NewGuid(); +// private readonly AppDomainObject app = new AppDomainObject(new InitialPatterns()); +// private readonly AppCommandMiddleware sut; + +// protected override Guid Id +// { +// get { return AppId; } +// } + +// public AppCommandMiddlewareTests() +// { +// A.CallTo(() => appProvider.GetAppAsync(AppName)) +// .Returns((IAppEntity)null); + +// A.CallTo(() => userResolver.FindByIdAsync(contributorId)) +// .Returns(A.Fake()); + +// sut = new AppCommandMiddleware(Handler, appProvider, appPlansProvider, appPlansBillingManager, userResolver); + +// app.ActivateAsync(Id, A.Fake>()); +// } + +// [Fact] +// public async Task Create_should_create_domain_object() +// { +// var context = CreateContextForCommand(new CreateApp { Name = AppName, AppId = AppId }); + +// await TestCreate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Equal(AppId, context.Result>().IdOrValue); +// } + +// [Fact] +// public async Task AssignContributor_should_update_domain_object_if_user_found() +// { +// A.CallTo(() => appPlansProvider.GetPlan(null)) +// .Returns(new ConfigAppLimitsPlan { MaxContributors = -1 }); + +// CreateApp(); + +// var context = CreateContextForCommand(new AssignContributor { ContributorId = contributorId }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task RemoveContributor_should_update_domain_object() +// { +// CreateApp() +// .AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId })); + +// var context = CreateContextForCommand(new RemoveContributor { ContributorId = contributorId }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task AttachClient_should_update_domain_object() +// { +// CreateApp(); + +// var context = CreateContextForCommand(new AttachClient { Id = clientName }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task RenameClient_should_update_domain_object() +// { +// CreateApp() +// .AttachClient(CreateCommand(new AttachClient { Id = clientName })); + +// var context = CreateContextForCommand(new UpdateClient { Id = clientName, Name = "New Name" }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task RevokeClient_should_update_domain_object() +// { +// CreateApp() +// .AttachClient(CreateCommand(new AttachClient { Id = clientName })); + +// var context = CreateContextForCommand(new RevokeClient { Id = clientName }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task ChangePlan_should_update_domain_object() +// { +// A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) +// .Returns(true); + +// CreateApp(); - var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan" }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) - .MustHaveHappened(); - } - - [Fact] - public async Task ChangePlan_should_not_make_update_for_redirect_result() - { - A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) - .Returns(true); - - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) - .Returns(CreateRedirectResult()); - - CreateApp(); - - var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan" }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Null(app.Snapshot.Plan); - } - - [Fact] - public async Task ChangePlan_should_not_call_billing_manager_for_callback() - { - A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) - .Returns(true); - - CreateApp(); - - var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan", FromCallback = true }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - - A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) - .MustNotHaveHappened(); - } - - [Fact] - public async Task AddLanguage_should_update_domain_object() - { - CreateApp(); - - var context = CreateContextForCommand(new AddLanguage { Language = language }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task RemoveLanguage_should_update_domain_object() - { - CreateApp() - .AddLanguage(CreateCommand(new AddLanguage { Language = language })); - - var context = CreateContextForCommand(new RemoveLanguage { Language = language }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task UpdateLanguage_should_update_domain_object() - { - CreateApp() - .AddLanguage(CreateCommand(new AddLanguage { Language = language })); - - var context = CreateContextForCommand(new UpdateLanguage { Language = language }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task AddPattern_should_update_domain_object() - { - CreateApp(); - - var context = CreateContextForCommand(new AddPattern { Name = "Any", Pattern = ".*" }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task UpdatePattern_should_update_domain() - { - CreateApp() - .AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = "." })); - - var context = CreateContextForCommand(new UpdatePattern { PatternId = patternId, Name = "Number", Pattern = "[0-9]" }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task DeletePattern_should_update_domain_object() - { - CreateApp() - .AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = "." })); - - var context = CreateContextForCommand(new DeletePattern { PatternId = patternId }); - - await TestUpdate(app, async _ => - { - await sut.HandleAsync(context); - }); - } - - private AppDomainObject CreateApp() - { - app.Create(CreateCommand(new CreateApp { AppId = AppId, Name = AppName })); - - return app; - } - - private static Task CreateRedirectResult() - { - return Task.FromResult(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); - } - } -} +// var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan" }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) +// .MustHaveHappened(); +// } + +// [Fact] +// public async Task ChangePlan_should_not_make_update_for_redirect_result() +// { +// A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) +// .Returns(true); + +// A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) +// .Returns(CreateRedirectResult()); + +// CreateApp(); + +// var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan" }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Null(app.Snapshot.Plan); +// } + +// [Fact] +// public async Task ChangePlan_should_not_call_billing_manager_for_callback() +// { +// A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) +// .Returns(true); + +// CreateApp(); + +// var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan", FromCallback = true }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) +// .MustNotHaveHappened(); +// } + +// [Fact] +// public async Task AddLanguage_should_update_domain_object() +// { +// CreateApp(); + +// var context = CreateContextForCommand(new AddLanguage { Language = language }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task RemoveLanguage_should_update_domain_object() +// { +// CreateApp() +// .AddLanguage(CreateCommand(new AddLanguage { Language = language })); + +// var context = CreateContextForCommand(new RemoveLanguage { Language = language }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task UpdateLanguage_should_update_domain_object() +// { +// CreateApp() +// .AddLanguage(CreateCommand(new AddLanguage { Language = language })); + +// var context = CreateContextForCommand(new UpdateLanguage { Language = language }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task AddPattern_should_update_domain_object() +// { +// CreateApp(); + +// var context = CreateContextForCommand(new AddPattern { Name = "Any", Pattern = ".*" }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task UpdatePattern_should_update_domain() +// { +// CreateApp() +// .AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = "." })); + +// var context = CreateContextForCommand(new UpdatePattern { PatternId = patternId, Name = "Number", Pattern = "[0-9]" }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task DeletePattern_should_update_domain_object() +// { +// CreateApp() +// .AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = "." })); + +// var context = CreateContextForCommand(new DeletePattern { PatternId = patternId }); + +// await TestUpdate(app, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// private AppDomainObject CreateApp() +// { +// app.Create(CreateCommand(new CreateApp { AppId = AppId, Name = AppName })); + +// return app; +// } + +// private static Task CreateRedirectResult() +// { +// return Task.FromResult(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs index e49cf171e..7c93b7fe4 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs @@ -1,399 +1,399 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using FakeItEasy; -using Squidex.Domain.Apps.Core.Apps; -using Squidex.Domain.Apps.Entities.Apps.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Domain.Apps.Events.Apps; -using Squidex.Infrastructure; -using Squidex.Infrastructure.States; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Apps -{ - public class AppDomainObjectTests : HandlerTestBase - { - private readonly string contributorId = Guid.NewGuid().ToString(); - private readonly string clientId = "client"; - private readonly string clientNewName = "My Client"; - private readonly string planId = "premium"; - private readonly Guid patternId = Guid.NewGuid(); - private readonly AppDomainObject sut = new AppDomainObject(new InitialPatterns()); - - protected override Guid Id - { - get { return AppId; } - } - - public AppDomainObjectTests() - { - sut.ActivateAsync(Id, A.Fake>()); - } - - [Fact] - public void Create_should_throw_exception_if_created() - { - CreateApp(); - - Assert.Throws(() => - { - sut.Create(CreateCommand(new CreateApp { Name = AppName })); - }); - } - - [Fact] - public void Create_should_specify_name_and_owner() - { - var id1 = Guid.NewGuid(); - var id2 = Guid.NewGuid(); - - var initialPatterns = new InitialPatterns - { - { id1, new AppPattern("Number", "[0-9]") }, - { id2, new AppPattern("Numbers", "[0-9]*") } - }; - - var app = new AppDomainObject(initialPatterns); - - app.Create(CreateCommand(new CreateApp { Name = AppName, Actor = User, AppId = AppId })); - - Assert.Equal(AppName, app.Snapshot.Name); - - app.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppCreated { Name = AppName }), - CreateEvent(new AppContributorAssigned { ContributorId = User.Identifier, Permission = AppContributorPermission.Owner }), - CreateEvent(new AppLanguageAdded { Language = Language.EN }), - CreateEvent(new AppPatternAdded { PatternId = id1, Name = "Number", Pattern = "[0-9]" }), - CreateEvent(new AppPatternAdded { PatternId = id2, Name = "Numbers", Pattern = "[0-9]*" }) - ); - } - - [Fact] - public void ChangePlan_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.ChangePlan(CreateCommand(new ChangePlan { PlanId = planId })); - }); - } - - [Fact] - public void ChangePlan_should_create_events() - { - CreateApp(); - - sut.ChangePlan(CreateCommand(new ChangePlan { PlanId = planId })); - - Assert.Equal(planId, sut.Snapshot.Plan.PlanId); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppPlanChanged { PlanId = planId }) - ); - } - - [Fact] - public void AssignContributor_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId })); - }); - } - - [Fact] - public void AssignContributor_should_create_events() - { - CreateApp(); - - sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor })); - - Assert.Equal(AppContributorPermission.Editor, sut.Snapshot.Contributors[contributorId]); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppContributorAssigned { ContributorId = contributorId, Permission = AppContributorPermission.Editor }) - ); - } - - [Fact] - public void RemoveContributor_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId })); - }); - } - - [Fact] - public void RemoveContributor_should_create_events_and_remove_contributor() - { - CreateApp(); - - sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor })); - sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId })); - - Assert.False(sut.Snapshot.Contributors.ContainsKey(contributorId)); - - sut.GetUncomittedEvents().Skip(1) - .ShouldHaveSameEvents( - CreateEvent(new AppContributorRemoved { ContributorId = contributorId }) - ); - } - - [Fact] - public void AttachClient_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.AttachClient(CreateCommand(new AttachClient { Id = clientId })); - }); - } - - [Fact] - public void AttachClient_should_create_events() - { - var command = new AttachClient { Id = clientId }; - - CreateApp(); - - sut.AttachClient(CreateCommand(command)); - - Assert.True(sut.Snapshot.Clients.ContainsKey(clientId)); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppClientAttached { Id = clientId, Secret = command.Secret }) - ); - } - - [Fact] - public void RevokeClient_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.RevokeClient(CreateCommand(new RevokeClient { Id = "not-found" })); - }); - } - - [Fact] - public void RevokeClient_should_create_events() - { - CreateApp(); - CreateClient(); - - sut.RevokeClient(CreateCommand(new RevokeClient { Id = clientId })); - - Assert.False(sut.Snapshot.Clients.ContainsKey(clientId)); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppClientRevoked { Id = clientId }) - ); - } - - [Fact] - public void UpdateClient_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.UpdateClient(CreateCommand(new UpdateClient { Id = "not-found", Name = clientNewName })); - }); - } - - [Fact] - public void UpdateClient_should_create_events() - { - CreateApp(); - CreateClient(); - - sut.UpdateClient(CreateCommand(new UpdateClient { Id = clientId, Name = clientNewName, Permission = AppClientPermission.Developer })); - - Assert.Equal(clientNewName, sut.Snapshot.Clients[clientId].Name); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppClientRenamed { Id = clientId, Name = clientNewName }), - CreateEvent(new AppClientUpdated { Id = clientId, Permission = AppClientPermission.Developer }) - ); - } - - [Fact] - public void AddLanguage_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.AddLanguage(CreateCommand(new AddLanguage { Language = Language.DE })); - }); - } - - [Fact] - public void AddLanguage_should_create_events() - { - CreateApp(); - - sut.AddLanguage(CreateCommand(new AddLanguage { Language = Language.DE })); - - Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppLanguageAdded { Language = Language.DE }) - ); - } - - [Fact] - public void RemoveLanguage_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.RemoveLanguage(CreateCommand(new RemoveLanguage { Language = Language.EN })); - }); - } - - [Fact] - public void RemoveLanguage_should_create_events() - { - CreateApp(); - CreateLanguage(Language.DE); - - sut.RemoveLanguage(CreateCommand(new RemoveLanguage { Language = Language.DE })); - - Assert.False(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppLanguageRemoved { Language = Language.DE }) - ); - } - - [Fact] - public void UpdateLanguage_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.UpdateLanguage(CreateCommand(new UpdateLanguage { Language = Language.EN })); - }); - } - - [Fact] - public void UpdateLanguage_should_create_events() - { - CreateApp(); - CreateLanguage(Language.DE); - - sut.UpdateLanguage(CreateCommand(new UpdateLanguage { Language = Language.DE, Fallback = new List { Language.EN } })); - - Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppLanguageUpdated { Language = Language.DE, Fallback = new List { Language.EN } }) - ); - } - - [Fact] - public void AddPattern_should_throw_exception_if_app_not_created() - { - Assert.Throws(() => sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = ".*" }))); - } - - [Fact] - public void AddPattern_should_create_events() - { - CreateApp(); - - sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" })); - - Assert.Single(sut.Snapshot.Patterns); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppPatternAdded { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" }) - ); - } - - [Fact] - public void DeletePattern_should_throw_exception_if_app_not_created() - { - Assert.Throws(() => - { - sut.DeletePattern(CreateCommand(new DeletePattern - { - PatternId = Guid.NewGuid() - })); - }); - } - - [Fact] - public void DeletePattern_should_create_events() - { - CreateApp(); - CreatePattern(); - - sut.DeletePattern(CreateCommand(new DeletePattern { PatternId = patternId })); - - Assert.Empty(sut.Snapshot.Patterns); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppPatternDeleted { PatternId = patternId }) - ); - } - - [Fact] - public void UpdatePattern_should_throw_exception_if_app_not_created() - { - Assert.Throws(() => sut.UpdatePattern(CreateCommand(new UpdatePattern { PatternId = patternId, Name = "Any", Pattern = ".*" }))); - } - - [Fact] - public void UpdatePattern_should_create_events() - { - CreateApp(); - CreatePattern(); - - sut.UpdatePattern(CreateCommand(new UpdatePattern { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" })); - - Assert.Single(sut.Snapshot.Patterns); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new AppPatternUpdated { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" }) - ); - } - - private void CreatePattern() - { - sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Name", Pattern = ".*" })); - sut.ClearUncommittedEvents(); - } - - private void CreateApp() - { - sut.Create(CreateCommand(new CreateApp { Name = AppName })); - sut.ClearUncommittedEvents(); - } - - private void CreateClient() - { - sut.AttachClient(CreateCommand(new AttachClient { Id = clientId })); - sut.ClearUncommittedEvents(); - } - - private void CreateLanguage(Language language) - { - sut.AddLanguage(CreateCommand(new AddLanguage { Language = language })); - sut.ClearUncommittedEvents(); - } - } -} +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using FakeItEasy; +//using Squidex.Domain.Apps.Core.Apps; +//using Squidex.Domain.Apps.Entities.Apps.Commands; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Domain.Apps.Events.Apps; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.States; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Apps +//{ +// public class AppDomainObjectTests : HandlerTestBase +// { +// private readonly string contributorId = Guid.NewGuid().ToString(); +// private readonly string clientId = "client"; +// private readonly string clientNewName = "My Client"; +// private readonly string planId = "premium"; +// private readonly Guid patternId = Guid.NewGuid(); +// private readonly AppDomainObject sut = new AppDomainObject(new InitialPatterns()); + +// protected override Guid Id +// { +// get { return AppId; } +// } + +// public AppDomainObjectTests() +// { +// sut.ActivateAsync(Id, A.Fake>()); +// } + +// [Fact] +// public void Create_should_throw_exception_if_created() +// { +// CreateApp(); + +// Assert.Throws(() => +// { +// sut.Create(CreateCommand(new CreateApp { Name = AppName })); +// }); +// } + +// [Fact] +// public void Create_should_specify_name_and_owner() +// { +// var id1 = Guid.NewGuid(); +// var id2 = Guid.NewGuid(); + +// var initialPatterns = new InitialPatterns +// { +// { id1, new AppPattern("Number", "[0-9]") }, +// { id2, new AppPattern("Numbers", "[0-9]*") } +// }; + +// var app = new AppDomainObject(initialPatterns); + +// app.Create(CreateCommand(new CreateApp { Name = AppName, Actor = User, AppId = AppId })); + +// Assert.Equal(AppName, app.Snapshot.Name); + +// app.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppCreated { Name = AppName }), +// CreateEvent(new AppContributorAssigned { ContributorId = User.Identifier, Permission = AppContributorPermission.Owner }), +// CreateEvent(new AppLanguageAdded { Language = Language.EN }), +// CreateEvent(new AppPatternAdded { PatternId = id1, Name = "Number", Pattern = "[0-9]" }), +// CreateEvent(new AppPatternAdded { PatternId = id2, Name = "Numbers", Pattern = "[0-9]*" }) +// ); +// } + +// [Fact] +// public void ChangePlan_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.ChangePlan(CreateCommand(new ChangePlan { PlanId = planId })); +// }); +// } + +// [Fact] +// public void ChangePlan_should_create_events() +// { +// CreateApp(); + +// sut.ChangePlan(CreateCommand(new ChangePlan { PlanId = planId })); + +// Assert.Equal(planId, sut.Snapshot.Plan.PlanId); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppPlanChanged { PlanId = planId }) +// ); +// } + +// [Fact] +// public void AssignContributor_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId })); +// }); +// } + +// [Fact] +// public void AssignContributor_should_create_events() +// { +// CreateApp(); + +// sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor })); + +// Assert.Equal(AppContributorPermission.Editor, sut.Snapshot.Contributors[contributorId]); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppContributorAssigned { ContributorId = contributorId, Permission = AppContributorPermission.Editor }) +// ); +// } + +// [Fact] +// public void RemoveContributor_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId })); +// }); +// } + +// [Fact] +// public void RemoveContributor_should_create_events_and_remove_contributor() +// { +// CreateApp(); + +// sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor })); +// sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId })); + +// Assert.False(sut.Snapshot.Contributors.ContainsKey(contributorId)); + +// sut.GetUncomittedEvents().Skip(1) +// .ShouldHaveSameEvents( +// CreateEvent(new AppContributorRemoved { ContributorId = contributorId }) +// ); +// } + +// [Fact] +// public void AttachClient_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.AttachClient(CreateCommand(new AttachClient { Id = clientId })); +// }); +// } + +// [Fact] +// public void AttachClient_should_create_events() +// { +// var command = new AttachClient { Id = clientId }; + +// CreateApp(); + +// sut.AttachClient(CreateCommand(command)); + +// Assert.True(sut.Snapshot.Clients.ContainsKey(clientId)); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppClientAttached { Id = clientId, Secret = command.Secret }) +// ); +// } + +// [Fact] +// public void RevokeClient_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.RevokeClient(CreateCommand(new RevokeClient { Id = "not-found" })); +// }); +// } + +// [Fact] +// public void RevokeClient_should_create_events() +// { +// CreateApp(); +// CreateClient(); + +// sut.RevokeClient(CreateCommand(new RevokeClient { Id = clientId })); + +// Assert.False(sut.Snapshot.Clients.ContainsKey(clientId)); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppClientRevoked { Id = clientId }) +// ); +// } + +// [Fact] +// public void UpdateClient_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.UpdateClient(CreateCommand(new UpdateClient { Id = "not-found", Name = clientNewName })); +// }); +// } + +// [Fact] +// public void UpdateClient_should_create_events() +// { +// CreateApp(); +// CreateClient(); + +// sut.UpdateClient(CreateCommand(new UpdateClient { Id = clientId, Name = clientNewName, Permission = AppClientPermission.Developer })); + +// Assert.Equal(clientNewName, sut.Snapshot.Clients[clientId].Name); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppClientRenamed { Id = clientId, Name = clientNewName }), +// CreateEvent(new AppClientUpdated { Id = clientId, Permission = AppClientPermission.Developer }) +// ); +// } + +// [Fact] +// public void AddLanguage_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.AddLanguage(CreateCommand(new AddLanguage { Language = Language.DE })); +// }); +// } + +// [Fact] +// public void AddLanguage_should_create_events() +// { +// CreateApp(); + +// sut.AddLanguage(CreateCommand(new AddLanguage { Language = Language.DE })); + +// Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppLanguageAdded { Language = Language.DE }) +// ); +// } + +// [Fact] +// public void RemoveLanguage_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.RemoveLanguage(CreateCommand(new RemoveLanguage { Language = Language.EN })); +// }); +// } + +// [Fact] +// public void RemoveLanguage_should_create_events() +// { +// CreateApp(); +// CreateLanguage(Language.DE); + +// sut.RemoveLanguage(CreateCommand(new RemoveLanguage { Language = Language.DE })); + +// Assert.False(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppLanguageRemoved { Language = Language.DE }) +// ); +// } + +// [Fact] +// public void UpdateLanguage_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.UpdateLanguage(CreateCommand(new UpdateLanguage { Language = Language.EN })); +// }); +// } + +// [Fact] +// public void UpdateLanguage_should_create_events() +// { +// CreateApp(); +// CreateLanguage(Language.DE); + +// sut.UpdateLanguage(CreateCommand(new UpdateLanguage { Language = Language.DE, Fallback = new List { Language.EN } })); + +// Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppLanguageUpdated { Language = Language.DE, Fallback = new List { Language.EN } }) +// ); +// } + +// [Fact] +// public void AddPattern_should_throw_exception_if_app_not_created() +// { +// Assert.Throws(() => sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = ".*" }))); +// } + +// [Fact] +// public void AddPattern_should_create_events() +// { +// CreateApp(); + +// sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" })); + +// Assert.Single(sut.Snapshot.Patterns); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppPatternAdded { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" }) +// ); +// } + +// [Fact] +// public void DeletePattern_should_throw_exception_if_app_not_created() +// { +// Assert.Throws(() => +// { +// sut.DeletePattern(CreateCommand(new DeletePattern +// { +// PatternId = Guid.NewGuid() +// })); +// }); +// } + +// [Fact] +// public void DeletePattern_should_create_events() +// { +// CreateApp(); +// CreatePattern(); + +// sut.DeletePattern(CreateCommand(new DeletePattern { PatternId = patternId })); + +// Assert.Empty(sut.Snapshot.Patterns); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppPatternDeleted { PatternId = patternId }) +// ); +// } + +// [Fact] +// public void UpdatePattern_should_throw_exception_if_app_not_created() +// { +// Assert.Throws(() => sut.UpdatePattern(CreateCommand(new UpdatePattern { PatternId = patternId, Name = "Any", Pattern = ".*" }))); +// } + +// [Fact] +// public void UpdatePattern_should_create_events() +// { +// CreateApp(); +// CreatePattern(); + +// sut.UpdatePattern(CreateCommand(new UpdatePattern { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" })); + +// Assert.Single(sut.Snapshot.Patterns); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new AppPatternUpdated { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" }) +// ); +// } + +// private void CreatePattern() +// { +// sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Name", Pattern = ".*" })); +// sut.ClearUncommittedEvents(); +// } + +// private void CreateApp() +// { +// sut.Create(CreateCommand(new CreateApp { Name = AppName })); +// sut.ClearUncommittedEvents(); +// } + +// private void CreateClient() +// { +// sut.AttachClient(CreateCommand(new AttachClient { Id = clientId })); +// sut.ClearUncommittedEvents(); +// } + +// private void CreateLanguage(Language language) +// { +// sut.AddLanguage(CreateCommand(new AddLanguage { Language = language })); +// sut.ClearUncommittedEvents(); +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs index 599eaa005..44a1a36ca 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs @@ -1,145 +1,145 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.IO; -using System.Threading.Tasks; -using FakeItEasy; -using Squidex.Domain.Apps.Entities.Assets.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Infrastructure.Assets; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.Tasks; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Assets -{ - public class AssetCommandMiddlewareTests : HandlerTestBase - { - private readonly IAssetThumbnailGenerator assetThumbnailGenerator = A.Fake(); - private readonly IAssetStore assetStore = A.Fake(); - private readonly Guid assetId = Guid.NewGuid(); - private readonly Stream stream = new MemoryStream(); - private readonly ImageInfo image = new ImageInfo(2048, 2048); - private readonly AssetDomainObject asset = new AssetDomainObject(); - private readonly AssetFile file; - private readonly AssetCommandMiddleware sut; - - protected override Guid Id - { - get { return assetId; } - } - - public AssetCommandMiddlewareTests() - { - file = new AssetFile("my-image.png", "image/png", 1024, () => stream); - - sut = new AssetCommandMiddleware(Handler, assetStore, assetThumbnailGenerator); - } - - [Fact] - public async Task Create_should_create_domain_object() - { - var context = CreateContextForCommand(new CreateAsset { AssetId = assetId, File = file }); - - SetupStore(0, context.ContextId); - SetupImageInfo(); - - await TestCreate(asset, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(assetId, context.Result>().IdOrValue); - - AssertAssetHasBeenUploaded(0, context.ContextId); - AssertAssetImageChecked(); - } - - [Fact] - public async Task Update_should_update_domain_object() - { - var context = CreateContextForCommand(new UpdateAsset { AssetId = assetId, File = file }); - - SetupStore(1, context.ContextId); - SetupImageInfo(); - - CreateAsset(); - - await TestUpdate(asset, async _ => - { - await sut.HandleAsync(context); - }); - - AssertAssetHasBeenUploaded(1, context.ContextId); - AssertAssetImageChecked(); - } - - [Fact] - public async Task Rename_should_update_domain_object() - { - CreateAsset(); - - var context = CreateContextForCommand(new RenameAsset { AssetId = assetId, FileName = "my-new-image.png" }); - - await TestUpdate(asset, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task Delete_should_update_domain_object() - { - CreateAsset(); - - var command = CreateContextForCommand(new DeleteAsset { AssetId = assetId }); - - await TestUpdate(asset, async _ => - { - await sut.HandleAsync(command); - }); - } - - private void CreateAsset() - { - asset.Create(CreateCommand(new CreateAsset { File = file })); - } - - private void SetupImageInfo() - { - A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) - .Returns(image); - } - - private void SetupStore(long version, Guid commitId) - { - A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) - .Returns(TaskHelper.Done); - A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) - .Returns(TaskHelper.Done); - A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) - .Returns(TaskHelper.Done); - } - - private void AssertAssetImageChecked() - { - A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) - .MustHaveHappened(); - } - - private void AssertAssetHasBeenUploaded(long version, Guid commitId) - { - A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) - .MustHaveHappened(); - A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) - .MustHaveHappened(); - A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) - .MustHaveHappened(); - } - } -} +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.IO; +//using System.Threading.Tasks; +//using FakeItEasy; +//using Squidex.Domain.Apps.Entities.Assets.Commands; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Infrastructure.Assets; +//using Squidex.Infrastructure.Commands; +//using Squidex.Infrastructure.Tasks; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Assets +//{ +// public class AssetCommandMiddlewareTests : HandlerTestBase +// { +// private readonly IAssetThumbnailGenerator assetThumbnailGenerator = A.Fake(); +// private readonly IAssetStore assetStore = A.Fake(); +// private readonly Guid assetId = Guid.NewGuid(); +// private readonly Stream stream = new MemoryStream(); +// private readonly ImageInfo image = new ImageInfo(2048, 2048); +// private readonly AssetDomainObject asset = new AssetDomainObject(); +// private readonly AssetFile file; +// private readonly AssetCommandMiddleware sut; + +// protected override Guid Id +// { +// get { return assetId; } +// } + +// public AssetCommandMiddlewareTests() +// { +// file = new AssetFile("my-image.png", "image/png", 1024, () => stream); + +// sut = new AssetCommandMiddleware(Handler, assetStore, assetThumbnailGenerator); +// } + +// [Fact] +// public async Task Create_should_create_domain_object() +// { +// var context = CreateContextForCommand(new CreateAsset { AssetId = assetId, File = file }); + +// SetupStore(0, context.ContextId); +// SetupImageInfo(); + +// await TestCreate(asset, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Equal(assetId, context.Result>().IdOrValue); + +// AssertAssetHasBeenUploaded(0, context.ContextId); +// AssertAssetImageChecked(); +// } + +// [Fact] +// public async Task Update_should_update_domain_object() +// { +// var context = CreateContextForCommand(new UpdateAsset { AssetId = assetId, File = file }); + +// SetupStore(1, context.ContextId); +// SetupImageInfo(); + +// CreateAsset(); + +// await TestUpdate(asset, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// AssertAssetHasBeenUploaded(1, context.ContextId); +// AssertAssetImageChecked(); +// } + +// [Fact] +// public async Task Rename_should_update_domain_object() +// { +// CreateAsset(); + +// var context = CreateContextForCommand(new RenameAsset { AssetId = assetId, FileName = "my-new-image.png" }); + +// await TestUpdate(asset, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task Delete_should_update_domain_object() +// { +// CreateAsset(); + +// var command = CreateContextForCommand(new DeleteAsset { AssetId = assetId }); + +// await TestUpdate(asset, async _ => +// { +// await sut.HandleAsync(command); +// }); +// } + +// private void CreateAsset() +// { +// asset.Create(CreateCommand(new CreateAsset { File = file })); +// } + +// private void SetupImageInfo() +// { +// A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) +// .Returns(image); +// } + +// private void SetupStore(long version, Guid commitId) +// { +// A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) +// .Returns(TaskHelper.Done); +// A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) +// .Returns(TaskHelper.Done); +// A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) +// .Returns(TaskHelper.Done); +// } + +// private void AssertAssetImageChecked() +// { +// A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) +// .MustHaveHappened(); +// } + +// private void AssertAssetHasBeenUploaded(long version, Guid commitId) +// { +// A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) +// .MustHaveHappened(); +// A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) +// .MustHaveHappened(); +// A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) +// .MustHaveHappened(); +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs index b1c057749..d1c8aeae4 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs @@ -1,220 +1,220 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.IO; -using FakeItEasy; -using Squidex.Domain.Apps.Entities.Assets.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Domain.Apps.Events.Assets; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Assets; -using Squidex.Infrastructure.States; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Assets -{ - public class AssetDomainObjectTests : HandlerTestBase - { - private readonly ImageInfo image = new ImageInfo(2048, 2048); - private readonly Guid assetId = Guid.NewGuid(); - private readonly AssetFile file = new AssetFile("my-image.png", "image/png", 1024, () => new MemoryStream()); - private readonly AssetDomainObject sut = new AssetDomainObject(); - - protected override Guid Id - { - get { return assetId; } - } - - public AssetDomainObjectTests() - { - sut.ActivateAsync(Id, A.Fake>()); - } - - [Fact] - public void Create_should_throw_exception_if_created() - { - CreateAsset(); - - Assert.Throws(() => - { - sut.Create(CreateAssetCommand(new CreateAsset { File = file })); - }); - } - - [Fact] - public void Create_should_create_events() - { - sut.Create(CreateAssetCommand(new CreateAsset { File = file, ImageInfo = image })); - - Assert.Equal(0, sut.Snapshot.FileVersion); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateAssetEvent(new AssetCreated - { - IsImage = true, - FileName = file.FileName, - FileSize = file.FileSize, - FileVersion = 0, - MimeType = file.MimeType, - PixelWidth = image.PixelWidth, - PixelHeight = image.PixelHeight - }) - ); - } - - [Fact] - public void Update_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Update(CreateAssetCommand(new UpdateAsset { File = file })); - }); - } - - [Fact] - public void Update_should_throw_exception_if_asset_is_deleted() - { - CreateAsset(); - DeleteAsset(); - - Assert.Throws(() => - { - sut.Update(CreateAssetCommand(new UpdateAsset())); - }); - } - - [Fact] - public void Update_should_create_events() - { - CreateAsset(); - - sut.Update(CreateAssetCommand(new UpdateAsset { File = file, ImageInfo = image })); - - Assert.Equal(1, sut.Snapshot.FileVersion); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateAssetEvent(new AssetUpdated - { - IsImage = true, - FileSize = file.FileSize, - FileVersion = 1, - MimeType = file.MimeType, - PixelWidth = image.PixelWidth, - PixelHeight = image.PixelHeight - }) - ); - } - - [Fact] - public void Rename_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Rename(CreateAssetCommand(new RenameAsset { FileName = "new-file.png" })); - }); - } - - [Fact] - public void Rename_should_throw_exception_if_asset_is_deleted() - { - CreateAsset(); - DeleteAsset(); - - Assert.Throws(() => - { - sut.Update(CreateAssetCommand(new UpdateAsset())); - }); - } - - [Fact] - public void Rename_should_create_events() - { - CreateAsset(); - - sut.Rename(CreateAssetCommand(new RenameAsset { FileName = "my-new-image.png" })); - - Assert.Equal("my-new-image.png", sut.Snapshot.FileName); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateAssetEvent(new AssetRenamed { FileName = "my-new-image.png" }) - ); - } - - [Fact] - public void Delete_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Delete(CreateAssetCommand(new DeleteAsset())); - }); - } - - [Fact] - public void Delete_should_throw_exception_if_already_deleted() - { - CreateAsset(); - DeleteAsset(); - - Assert.Throws(() => - { - sut.Delete(CreateAssetCommand(new DeleteAsset())); - }); - } - - [Fact] - public void Delete_should_create_events_with_total_file_size() - { - CreateAsset(); - UpdateAsset(); - - sut.Delete(CreateAssetCommand(new DeleteAsset())); - - Assert.True(sut.Snapshot.IsDeleted); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateAssetEvent(new AssetDeleted { DeletedSize = 2048 }) - ); - } - - private void CreateAsset() - { - sut.Create(CreateAssetCommand(new CreateAsset { File = file })); - sut.ClearUncommittedEvents(); - } - - private void UpdateAsset() - { - sut.Update(CreateAssetCommand(new UpdateAsset { File = file })); - sut.ClearUncommittedEvents(); - } - - private void DeleteAsset() - { - sut.Delete(CreateAssetCommand(new DeleteAsset())); - sut.ClearUncommittedEvents(); - } - - protected T CreateAssetEvent(T @event) where T : AssetEvent - { - @event.AssetId = assetId; - - return CreateEvent(@event); - } - - protected T CreateAssetCommand(T command) where T : AssetCommand - { - command.AssetId = assetId; - - return CreateCommand(command); - } - } -} +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.IO; +//using FakeItEasy; +//using Squidex.Domain.Apps.Entities.Assets.Commands; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Domain.Apps.Events.Assets; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.Assets; +//using Squidex.Infrastructure.States; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Assets +//{ +// public class AssetDomainObjectTests : HandlerTestBase +// { +// private readonly ImageInfo image = new ImageInfo(2048, 2048); +// private readonly Guid assetId = Guid.NewGuid(); +// private readonly AssetFile file = new AssetFile("my-image.png", "image/png", 1024, () => new MemoryStream()); +// private readonly AssetDomainObject sut = new AssetDomainObject(); + +// protected override Guid Id +// { +// get { return assetId; } +// } + +// public AssetDomainObjectTests() +// { +// sut.ActivateAsync(Id, A.Fake>()); +// } + +// [Fact] +// public void Create_should_throw_exception_if_created() +// { +// CreateAsset(); + +// Assert.Throws(() => +// { +// sut.Create(CreateAssetCommand(new CreateAsset { File = file })); +// }); +// } + +// [Fact] +// public void Create_should_create_events() +// { +// sut.Create(CreateAssetCommand(new CreateAsset { File = file, ImageInfo = image })); + +// Assert.Equal(0, sut.Snapshot.FileVersion); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateAssetEvent(new AssetCreated +// { +// IsImage = true, +// FileName = file.FileName, +// FileSize = file.FileSize, +// FileVersion = 0, +// MimeType = file.MimeType, +// PixelWidth = image.PixelWidth, +// PixelHeight = image.PixelHeight +// }) +// ); +// } + +// [Fact] +// public void Update_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Update(CreateAssetCommand(new UpdateAsset { File = file })); +// }); +// } + +// [Fact] +// public void Update_should_throw_exception_if_asset_is_deleted() +// { +// CreateAsset(); +// DeleteAsset(); + +// Assert.Throws(() => +// { +// sut.Update(CreateAssetCommand(new UpdateAsset())); +// }); +// } + +// [Fact] +// public void Update_should_create_events() +// { +// CreateAsset(); + +// sut.Update(CreateAssetCommand(new UpdateAsset { File = file, ImageInfo = image })); + +// Assert.Equal(1, sut.Snapshot.FileVersion); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateAssetEvent(new AssetUpdated +// { +// IsImage = true, +// FileSize = file.FileSize, +// FileVersion = 1, +// MimeType = file.MimeType, +// PixelWidth = image.PixelWidth, +// PixelHeight = image.PixelHeight +// }) +// ); +// } + +// [Fact] +// public void Rename_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Rename(CreateAssetCommand(new RenameAsset { FileName = "new-file.png" })); +// }); +// } + +// [Fact] +// public void Rename_should_throw_exception_if_asset_is_deleted() +// { +// CreateAsset(); +// DeleteAsset(); + +// Assert.Throws(() => +// { +// sut.Update(CreateAssetCommand(new UpdateAsset())); +// }); +// } + +// [Fact] +// public void Rename_should_create_events() +// { +// CreateAsset(); + +// sut.Rename(CreateAssetCommand(new RenameAsset { FileName = "my-new-image.png" })); + +// Assert.Equal("my-new-image.png", sut.Snapshot.FileName); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateAssetEvent(new AssetRenamed { FileName = "my-new-image.png" }) +// ); +// } + +// [Fact] +// public void Delete_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Delete(CreateAssetCommand(new DeleteAsset())); +// }); +// } + +// [Fact] +// public void Delete_should_throw_exception_if_already_deleted() +// { +// CreateAsset(); +// DeleteAsset(); + +// Assert.Throws(() => +// { +// sut.Delete(CreateAssetCommand(new DeleteAsset())); +// }); +// } + +// [Fact] +// public void Delete_should_create_events_with_total_file_size() +// { +// CreateAsset(); +// UpdateAsset(); + +// sut.Delete(CreateAssetCommand(new DeleteAsset())); + +// Assert.True(sut.Snapshot.IsDeleted); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateAssetEvent(new AssetDeleted { DeletedSize = 2048 }) +// ); +// } + +// private void CreateAsset() +// { +// sut.Create(CreateAssetCommand(new CreateAsset { File = file })); +// sut.ClearUncommittedEvents(); +// } + +// private void UpdateAsset() +// { +// sut.Update(CreateAssetCommand(new UpdateAsset { File = file })); +// sut.ClearUncommittedEvents(); +// } + +// private void DeleteAsset() +// { +// sut.Delete(CreateAssetCommand(new DeleteAsset())); +// sut.ClearUncommittedEvents(); +// } + +// protected T CreateAssetEvent(T @event) where T : AssetEvent +// { +// @event.AssetId = assetId; + +// return CreateEvent(@event); +// } + +// protected T CreateAssetCommand(T command) where T : AssetCommand +// { +// command.AssetId = assetId; + +// return CreateCommand(command); +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs index 113b574da..1ef316155 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs @@ -1,264 +1,264 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Security.Claims; -using System.Threading.Tasks; -using FakeItEasy; -using NodaTime; -using Squidex.Domain.Apps.Core; -using Squidex.Domain.Apps.Core.Apps; -using Squidex.Domain.Apps.Core.Contents; -using Squidex.Domain.Apps.Core.Schemas; -using Squidex.Domain.Apps.Core.Scripting; -using Squidex.Domain.Apps.Entities.Apps; -using Squidex.Domain.Apps.Entities.Assets.Repositories; -using Squidex.Domain.Apps.Entities.Contents.Commands; -using Squidex.Domain.Apps.Entities.Contents.Repositories; -using Squidex.Domain.Apps.Entities.Schemas; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Contents -{ - public class ContentCommandMiddlewareTests : HandlerTestBase - { - private readonly ISchemaEntity schema = A.Fake(); - private readonly IScriptEngine scriptEngine = A.Fake(); - private readonly IAppProvider appProvider = A.Fake(); - private readonly IAppEntity app = A.Fake(); - private readonly ClaimsPrincipal user = new ClaimsPrincipal(); - private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.DE); - private readonly Guid contentId = Guid.NewGuid(); - private readonly ContentDomainObject content = new ContentDomainObject(); - private readonly ContentCommandMiddleware sut; - - protected override Guid Id - { - get { return contentId; } - } - - private readonly NamedContentData invalidData = - new NamedContentData() - .AddField("my-field1", new ContentFieldData() - .AddValue(null)) - .AddField("my-field2", new ContentFieldData() - .AddValue(1)); - private readonly NamedContentData data = - new NamedContentData() - .AddField("my-field1", new ContentFieldData() - .AddValue(1)) - .AddField("my-field2", new ContentFieldData() - .AddValue(1)); - private readonly NamedContentData patch = - new NamedContentData() - .AddField("my-field1", new ContentFieldData() - .AddValue(1)); - - public ContentCommandMiddlewareTests() - { - var schemaDef = - new Schema("my-schema") - .AddField(new NumberField(1, "my-field1", Partitioning.Invariant, - new NumberFieldProperties { IsRequired = true })) - .AddField(new NumberField(2, "my-field2", Partitioning.Invariant, - new NumberFieldProperties { IsRequired = false })); - - sut = new ContentCommandMiddleware(Handler, appProvider, A.Dummy(), scriptEngine, A.Dummy()); - - A.CallTo(() => app.LanguagesConfig).Returns(languagesConfig); - - A.CallTo(() => appProvider.GetAppAsync(AppName)).Returns(app); - - A.CallTo(() => schema.SchemaDef).Returns(schemaDef); - A.CallTo(() => schema.ScriptCreate).Returns(""); - A.CallTo(() => schema.ScriptChange).Returns(""); - A.CallTo(() => schema.ScriptUpdate).Returns(""); - A.CallTo(() => schema.ScriptDelete).Returns(""); - - A.CallTo(() => appProvider.GetAppWithSchemaAsync(AppId, SchemaId)).Returns((app, schema)); - } - - [Fact] - public async Task Create_should_throw_exception_if_data_is_not_valid() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(invalidData); - - var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = invalidData, User = user }); - - await TestCreate(content, async _ => - { - await Assert.ThrowsAsync(() => sut.HandleAsync(context)); - }, false); - } - - [Fact] - public async Task Create_should_create_content() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(data); - - var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = data, User = user }); - - await TestCreate(content, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(data, context.Result>().IdOrValue); - - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); - A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustNotHaveHappened(); - } - - [Fact] - public async Task Create_should_also_invoke_publish_script_when_publishing() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(data); - - var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = data, User = user, Publish = true }); - - await TestCreate(content, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(data, context.Result>().IdOrValue); - - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); - A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); - } - - [Fact] - public async Task Update_should_throw_exception_if_data_is_not_valid() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(invalidData); +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.Security.Claims; +//using System.Threading.Tasks; +//using FakeItEasy; +//using NodaTime; +//using Squidex.Domain.Apps.Core; +//using Squidex.Domain.Apps.Core.Apps; +//using Squidex.Domain.Apps.Core.Contents; +//using Squidex.Domain.Apps.Core.Schemas; +//using Squidex.Domain.Apps.Core.Scripting; +//using Squidex.Domain.Apps.Entities.Apps; +//using Squidex.Domain.Apps.Entities.Assets.Repositories; +//using Squidex.Domain.Apps.Entities.Contents.Commands; +//using Squidex.Domain.Apps.Entities.Contents.Repositories; +//using Squidex.Domain.Apps.Entities.Schemas; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.Commands; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Contents +//{ +// public class ContentCommandMiddlewareTests : HandlerTestBase +// { +// private readonly ISchemaEntity schema = A.Fake(); +// private readonly IScriptEngine scriptEngine = A.Fake(); +// private readonly IAppProvider appProvider = A.Fake(); +// private readonly IAppEntity app = A.Fake(); +// private readonly ClaimsPrincipal user = new ClaimsPrincipal(); +// private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.DE); +// private readonly Guid contentId = Guid.NewGuid(); +// private readonly ContentDomainObject content = new ContentDomainObject(); +// private readonly ContentCommandMiddleware sut; + +// protected override Guid Id +// { +// get { return contentId; } +// } + +// private readonly NamedContentData invalidData = +// new NamedContentData() +// .AddField("my-field1", new ContentFieldData() +// .AddValue(null)) +// .AddField("my-field2", new ContentFieldData() +// .AddValue(1)); +// private readonly NamedContentData data = +// new NamedContentData() +// .AddField("my-field1", new ContentFieldData() +// .AddValue(1)) +// .AddField("my-field2", new ContentFieldData() +// .AddValue(1)); +// private readonly NamedContentData patch = +// new NamedContentData() +// .AddField("my-field1", new ContentFieldData() +// .AddValue(1)); + +// public ContentCommandMiddlewareTests() +// { +// var schemaDef = +// new Schema("my-schema") +// .AddField(new NumberField(1, "my-field1", Partitioning.Invariant, +// new NumberFieldProperties { IsRequired = true })) +// .AddField(new NumberField(2, "my-field2", Partitioning.Invariant, +// new NumberFieldProperties { IsRequired = false })); + +// sut = new ContentCommandMiddleware(Handler, appProvider, A.Dummy(), scriptEngine, A.Dummy()); + +// A.CallTo(() => app.LanguagesConfig).Returns(languagesConfig); + +// A.CallTo(() => appProvider.GetAppAsync(AppName)).Returns(app); + +// A.CallTo(() => schema.SchemaDef).Returns(schemaDef); +// A.CallTo(() => schema.ScriptCreate).Returns(""); +// A.CallTo(() => schema.ScriptChange).Returns(""); +// A.CallTo(() => schema.ScriptUpdate).Returns(""); +// A.CallTo(() => schema.ScriptDelete).Returns(""); + +// A.CallTo(() => appProvider.GetAppWithSchemaAsync(AppId, SchemaId)).Returns((app, schema)); +// } + +// [Fact] +// public async Task Create_should_throw_exception_if_data_is_not_valid() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(invalidData); + +// var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = invalidData, User = user }); + +// await TestCreate(content, async _ => +// { +// await Assert.ThrowsAsync(() => sut.HandleAsync(context)); +// }, false); +// } + +// [Fact] +// public async Task Create_should_create_content() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(data); + +// var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = data, User = user }); + +// await TestCreate(content, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Equal(data, context.Result>().IdOrValue); + +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); +// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustNotHaveHappened(); +// } + +// [Fact] +// public async Task Create_should_also_invoke_publish_script_when_publishing() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(data); + +// var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = data, User = user, Publish = true }); + +// await TestCreate(content, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Equal(data, context.Result>().IdOrValue); + +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); +// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); +// } + +// [Fact] +// public async Task Update_should_throw_exception_if_data_is_not_valid() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(invalidData); - CreateContent(); - - var context = CreateContextForCommand(new UpdateContent { ContentId = contentId, Data = invalidData, User = user }); +// CreateContent(); + +// var context = CreateContextForCommand(new UpdateContent { ContentId = contentId, Data = invalidData, User = user }); - await TestUpdate(content, async _ => - { - await Assert.ThrowsAsync(() => sut.HandleAsync(context)); - }, false); - } +// await TestUpdate(content, async _ => +// { +// await Assert.ThrowsAsync(() => sut.HandleAsync(context)); +// }, false); +// } - [Fact] - public async Task Update_should_update_domain_object() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(data); +// [Fact] +// public async Task Update_should_update_domain_object() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(data); - CreateContent(); +// CreateContent(); - var context = CreateContextForCommand(new UpdateContent { ContentId = contentId, Data = data, User = user }); +// var context = CreateContextForCommand(new UpdateContent { ContentId = contentId, Data = data, User = user }); - await TestUpdate(content, async _ => - { - await sut.HandleAsync(context); - }); +// await TestUpdate(content, async _ => +// { +// await sut.HandleAsync(context); +// }); - Assert.Equal(data, context.Result().Data); +// Assert.Equal(data, context.Result().Data); - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); - } +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); +// } - [Fact] - public async Task Patch_should_throw_exception_if_data_is_not_valid() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(invalidData); +// [Fact] +// public async Task Patch_should_throw_exception_if_data_is_not_valid() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(invalidData); - CreateContent(); +// CreateContent(); - var context = CreateContextForCommand(new PatchContent { ContentId = contentId, Data = invalidData, User = user }); +// var context = CreateContextForCommand(new PatchContent { ContentId = contentId, Data = invalidData, User = user }); - await TestUpdate(content, async _ => - { - await Assert.ThrowsAsync(() => sut.HandleAsync(context)); - }, false); - } +// await TestUpdate(content, async _ => +// { +// await Assert.ThrowsAsync(() => sut.HandleAsync(context)); +// }, false); +// } - [Fact] - public async Task Patch_should_update_domain_object() - { - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) - .Returns(data); +// [Fact] +// public async Task Patch_should_update_domain_object() +// { +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) +// .Returns(data); - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)).Returns(patch); +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)).Returns(patch); - CreateContent(); +// CreateContent(); - var context = CreateContextForCommand(new PatchContent { ContentId = contentId, Data = patch, User = user }); +// var context = CreateContextForCommand(new PatchContent { ContentId = contentId, Data = patch, User = user }); - await TestUpdate(content, async _ => - { - await sut.HandleAsync(context); - }); +// await TestUpdate(content, async _ => +// { +// await sut.HandleAsync(context); +// }); - Assert.NotNull(context.Result().Data); +// Assert.NotNull(context.Result().Data); - A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); - } +// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); +// } - [Fact] - public async Task ChangeStatus_should_publish_domain_object() - { - CreateContent(); +// [Fact] +// public async Task ChangeStatus_should_publish_domain_object() +// { +// CreateContent(); - var context = CreateContextForCommand(new ChangeContentStatus { ContentId = contentId, User = user, Status = Status.Published }); +// var context = CreateContextForCommand(new ChangeContentStatus { ContentId = contentId, User = user, Status = Status.Published }); - await TestUpdate(content, async _ => - { - await sut.HandleAsync(context); - }); +// await TestUpdate(content, async _ => +// { +// await sut.HandleAsync(context); +// }); - A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); - } +// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); +// } - [Fact] - public async Task ChangeStatus_should_not_invoke_scripts_when_scheduled() - { - CreateContent(); +// [Fact] +// public async Task ChangeStatus_should_not_invoke_scripts_when_scheduled() +// { +// CreateContent(); - var context = CreateContextForCommand(new ChangeContentStatus { ContentId = contentId, User = user, Status = Status.Published, DueTime = Instant.MaxValue }); +// var context = CreateContextForCommand(new ChangeContentStatus { ContentId = contentId, User = user, Status = Status.Published, DueTime = Instant.MaxValue }); - await TestUpdate(content, async _ => - { - await sut.HandleAsync(context); - }); +// await TestUpdate(content, async _ => +// { +// await sut.HandleAsync(context); +// }); - A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustNotHaveHappened(); - } +// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustNotHaveHappened(); +// } - [Fact] - public async Task Delete_should_update_domain_object() - { - CreateContent(); +// [Fact] +// public async Task Delete_should_update_domain_object() +// { +// CreateContent(); - var command = CreateContextForCommand(new DeleteContent { ContentId = contentId, User = user }); +// var command = CreateContextForCommand(new DeleteContent { ContentId = contentId, User = user }); - await TestUpdate(content, async _ => - { - await sut.HandleAsync(command); - }); +// await TestUpdate(content, async _ => +// { +// await sut.HandleAsync(command); +// }); - A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); - } +// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); +// } - private void CreateContent() - { - content.Create(CreateCommand(new CreateContent { Data = data })); - } - } -} +// private void CreateContent() +// { +// content.Create(CreateCommand(new CreateContent { Data = data })); +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs index 59e7e0213..b6d428fdf 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs @@ -1,304 +1,304 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using FakeItEasy; -using FluentAssertions; -using NodaTime; -using Squidex.Domain.Apps.Core.Contents; -using Squidex.Domain.Apps.Entities.Contents.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Domain.Apps.Events.Contents; -using Squidex.Infrastructure; -using Squidex.Infrastructure.States; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Contents -{ - public class ContentDomainObjectTests : HandlerTestBase - { - private readonly NamedContentData data = - new NamedContentData() - .AddField("field1", - new ContentFieldData() - .AddValue("iv", 1)); - private readonly NamedContentData otherData = - new NamedContentData() - .AddField("field2", - new ContentFieldData() - .AddValue("iv", 2)); - private readonly NamedContentData patched; - private readonly Guid contentId = Guid.NewGuid(); - private readonly ContentDomainObject sut = new ContentDomainObject(); - - protected override Guid Id - { - get { return contentId; } - } - - public ContentDomainObjectTests() - { - patched = otherData.MergeInto(data); - - sut.ActivateAsync(Id, A.Fake>()); - } - - [Fact] - public void Create_should_throw_exception_if_created() - { - sut.Create(CreateCommand(new CreateContent { Data = data })); - - Assert.Throws(() => - { - sut.Create(CreateContentCommand(new CreateContent { Data = data })); - }); - } - - [Fact] - public void Create_should_create_events() - { - sut.Create(CreateContentCommand(new CreateContent { Data = data })); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentCreated { Data = data }) - ); - } - - [Fact] - public void Create_should_also_publish_if_set_to_true() - { - sut.Create(CreateContentCommand(new CreateContent { Data = data, Publish = true })); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentCreated { Data = data }), - CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) - ); - } - - [Fact] - public void Update_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Update(CreateContentCommand(new UpdateContent { Data = data })); - }); - } - - [Fact] - public void Update_should_throw_exception_if_content_is_deleted() - { - CreateContent(); - DeleteContent(); - - Assert.Throws(() => - { - sut.Update(CreateContentCommand(new UpdateContent())); - }); - } - - [Fact] - public void Update_should_create_events() - { - CreateContent(); - - sut.Update(CreateContentCommand(new UpdateContent { Data = otherData })); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentUpdated { Data = otherData }) - ); - } - - [Fact] - public void Update_should_not_create_event_for_same_data() - { - CreateContent(); - UpdateContent(); - - sut.Update(CreateContentCommand(new UpdateContent { Data = data })); - - sut.GetUncomittedEvents().Should().BeEmpty(); - } - - [Fact] - public void Patch_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Patch(CreateContentCommand(new PatchContent { Data = data })); - }); - } - - [Fact] - public void Patch_should_throw_exception_if_content_is_deleted() - { - CreateContent(); - DeleteContent(); - - Assert.Throws(() => - { - sut.Patch(CreateContentCommand(new PatchContent())); - }); - } - - [Fact] - public void Patch_should_create_events() - { - CreateContent(); - UpdateContent(); - - sut.Patch(CreateContentCommand(new PatchContent { Data = otherData })); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentUpdated { Data = patched }) - ); - } - - [Fact] - public void Patch_should_not_create_event_for_same_data() - { - CreateContent(); - UpdateContent(); - - sut.Patch(CreateContentCommand(new PatchContent { Data = data })); - - sut.GetUncomittedEvents().Should().BeEmpty(); - } - - [Fact] - public void ChangeStatus_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus())); - }); - } - - [Fact] - public void ChangeStatus_should_throw_exception_if_content_is_deleted() - { - CreateContent(); - DeleteContent(); - - Assert.Throws(() => - { - sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus())); - }); - } - - [Fact] - public void ChangeStatus_should_refresh_properties_and_create_events() - { - CreateContent(); - - sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = Status.Published })); - - Assert.Equal(Status.Published, sut.Snapshot.Status); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) - ); - } - - [Fact] - public void ChangeStatus_should_refresh_properties_and_create_scheduled_events_when_command_has_due_time() - { - CreateContent(); - - var dueTime = Instant.MaxValue; - - sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = Status.Published, DueTime = dueTime })); - - Assert.Equal(Status.Draft, sut.Snapshot.Status); - Assert.Equal(Status.Published, sut.Snapshot.ScheduledTo); - Assert.Equal(dueTime, sut.Snapshot.ScheduledAt); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentStatusScheduled { Status = Status.Published, DueTime = dueTime }) - ); - } - - [Fact] - public void Delete_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Delete(CreateContentCommand(new DeleteContent())); - }); - } - - [Fact] - public void Delete_should_throw_exception_if_already_deleted() - { - CreateContent(); - DeleteContent(); - - Assert.Throws(() => - { - sut.Delete(CreateContentCommand(new DeleteContent())); - }); - } - - [Fact] - public void Delete_should_update_properties_and_create_events() - { - CreateContent(); - - sut.Delete(CreateContentCommand(new DeleteContent())); - - Assert.True(sut.Snapshot.IsDeleted); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateContentEvent(new ContentDeleted()) - ); - } - - private void CreateContent() - { - sut.Create(CreateContentCommand(new CreateContent { Data = data })); - sut.ClearUncommittedEvents(); - } - - private void UpdateContent() - { - sut.Update(CreateContentCommand(new UpdateContent { Data = data })); - sut.ClearUncommittedEvents(); - } - - private void ChangeStatus(Status status) - { - sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = status })); - sut.ClearUncommittedEvents(); - } - - private void DeleteContent() - { - sut.Delete(CreateContentCommand(new DeleteContent())); - sut.ClearUncommittedEvents(); - } - - protected T CreateContentEvent(T @event) where T : ContentEvent - { - @event.ContentId = contentId; - - return CreateEvent(@event); - } - - protected T CreateContentCommand(T command) where T : ContentCommand - { - command.ContentId = contentId; - - return CreateCommand(command); - } - } -} +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using FakeItEasy; +//using FluentAssertions; +//using NodaTime; +//using Squidex.Domain.Apps.Core.Contents; +//using Squidex.Domain.Apps.Entities.Contents.Commands; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Domain.Apps.Events.Contents; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.States; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Contents +//{ +// public class ContentDomainObjectTests : HandlerTestBase +// { +// private readonly NamedContentData data = +// new NamedContentData() +// .AddField("field1", +// new ContentFieldData() +// .AddValue("iv", 1)); +// private readonly NamedContentData otherData = +// new NamedContentData() +// .AddField("field2", +// new ContentFieldData() +// .AddValue("iv", 2)); +// private readonly NamedContentData patched; +// private readonly Guid contentId = Guid.NewGuid(); +// private readonly ContentDomainObject sut = new ContentDomainObject(); + +// protected override Guid Id +// { +// get { return contentId; } +// } + +// public ContentDomainObjectTests() +// { +// patched = otherData.MergeInto(data); + +// sut.ActivateAsync(Id, A.Fake>()); +// } + +// [Fact] +// public void Create_should_throw_exception_if_created() +// { +// sut.Create(CreateCommand(new CreateContent { Data = data })); + +// Assert.Throws(() => +// { +// sut.Create(CreateContentCommand(new CreateContent { Data = data })); +// }); +// } + +// [Fact] +// public void Create_should_create_events() +// { +// sut.Create(CreateContentCommand(new CreateContent { Data = data })); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentCreated { Data = data }) +// ); +// } + +// [Fact] +// public void Create_should_also_publish_if_set_to_true() +// { +// sut.Create(CreateContentCommand(new CreateContent { Data = data, Publish = true })); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentCreated { Data = data }), +// CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) +// ); +// } + +// [Fact] +// public void Update_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Update(CreateContentCommand(new UpdateContent { Data = data })); +// }); +// } + +// [Fact] +// public void Update_should_throw_exception_if_content_is_deleted() +// { +// CreateContent(); +// DeleteContent(); + +// Assert.Throws(() => +// { +// sut.Update(CreateContentCommand(new UpdateContent())); +// }); +// } + +// [Fact] +// public void Update_should_create_events() +// { +// CreateContent(); + +// sut.Update(CreateContentCommand(new UpdateContent { Data = otherData })); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentUpdated { Data = otherData }) +// ); +// } + +// [Fact] +// public void Update_should_not_create_event_for_same_data() +// { +// CreateContent(); +// UpdateContent(); + +// sut.Update(CreateContentCommand(new UpdateContent { Data = data })); + +// sut.GetUncomittedEvents().Should().BeEmpty(); +// } + +// [Fact] +// public void Patch_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Patch(CreateContentCommand(new PatchContent { Data = data })); +// }); +// } + +// [Fact] +// public void Patch_should_throw_exception_if_content_is_deleted() +// { +// CreateContent(); +// DeleteContent(); + +// Assert.Throws(() => +// { +// sut.Patch(CreateContentCommand(new PatchContent())); +// }); +// } + +// [Fact] +// public void Patch_should_create_events() +// { +// CreateContent(); +// UpdateContent(); + +// sut.Patch(CreateContentCommand(new PatchContent { Data = otherData })); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentUpdated { Data = patched }) +// ); +// } + +// [Fact] +// public void Patch_should_not_create_event_for_same_data() +// { +// CreateContent(); +// UpdateContent(); + +// sut.Patch(CreateContentCommand(new PatchContent { Data = data })); + +// sut.GetUncomittedEvents().Should().BeEmpty(); +// } + +// [Fact] +// public void ChangeStatus_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus())); +// }); +// } + +// [Fact] +// public void ChangeStatus_should_throw_exception_if_content_is_deleted() +// { +// CreateContent(); +// DeleteContent(); + +// Assert.Throws(() => +// { +// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus())); +// }); +// } + +// [Fact] +// public void ChangeStatus_should_refresh_properties_and_create_events() +// { +// CreateContent(); + +// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = Status.Published })); + +// Assert.Equal(Status.Published, sut.Snapshot.Status); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) +// ); +// } + +// [Fact] +// public void ChangeStatus_should_refresh_properties_and_create_scheduled_events_when_command_has_due_time() +// { +// CreateContent(); + +// var dueTime = Instant.MaxValue; + +// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = Status.Published, DueTime = dueTime })); + +// Assert.Equal(Status.Draft, sut.Snapshot.Status); +// Assert.Equal(Status.Published, sut.Snapshot.ScheduledTo); +// Assert.Equal(dueTime, sut.Snapshot.ScheduledAt); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentStatusScheduled { Status = Status.Published, DueTime = dueTime }) +// ); +// } + +// [Fact] +// public void Delete_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Delete(CreateContentCommand(new DeleteContent())); +// }); +// } + +// [Fact] +// public void Delete_should_throw_exception_if_already_deleted() +// { +// CreateContent(); +// DeleteContent(); + +// Assert.Throws(() => +// { +// sut.Delete(CreateContentCommand(new DeleteContent())); +// }); +// } + +// [Fact] +// public void Delete_should_update_properties_and_create_events() +// { +// CreateContent(); + +// sut.Delete(CreateContentCommand(new DeleteContent())); + +// Assert.True(sut.Snapshot.IsDeleted); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateContentEvent(new ContentDeleted()) +// ); +// } + +// private void CreateContent() +// { +// sut.Create(CreateContentCommand(new CreateContent { Data = data })); +// sut.ClearUncommittedEvents(); +// } + +// private void UpdateContent() +// { +// sut.Update(CreateContentCommand(new UpdateContent { Data = data })); +// sut.ClearUncommittedEvents(); +// } + +// private void ChangeStatus(Status status) +// { +// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = status })); +// sut.ClearUncommittedEvents(); +// } + +// private void DeleteContent() +// { +// sut.Delete(CreateContentCommand(new DeleteContent())); +// sut.ClearUncommittedEvents(); +// } + +// protected T CreateContentEvent(T @event) where T : ContentEvent +// { +// @event.ContentId = contentId; + +// return CreateEvent(@event); +// } + +// protected T CreateContentCommand(T command) where T : ContentCommand +// { +// command.ContentId = contentId; + +// return CreateCommand(command); +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleCommandMiddlewareTests.cs deleted file mode 100644 index 863bd6d97..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleCommandMiddlewareTests.cs +++ /dev/null @@ -1,118 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using FakeItEasy; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Domain.Apps.Core.Rules.Triggers; -using Squidex.Domain.Apps.Entities.Rules.Commands; -using Squidex.Domain.Apps.Entities.Schemas; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Infrastructure.Commands; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Rules -{ - public class RuleCommandMiddlewareTests : HandlerTestBase - { - private readonly IAppProvider appProvider = A.Fake(); - private readonly RuleDomainObject rule = new RuleDomainObject(); - private readonly RuleTrigger ruleTrigger = new ContentChangedTrigger(); - private readonly RuleAction ruleAction = new WebhookAction { Url = new Uri("https://squidex.io") }; - private readonly Guid ruleId = Guid.NewGuid(); - private readonly RuleCommandMiddleware sut; - - protected override Guid Id - { - get { return ruleId; } - } - - public RuleCommandMiddlewareTests() - { - A.CallTo(() => appProvider.GetSchemaAsync(A.Ignored, A.Ignored, false)) - .Returns(A.Fake()); - - sut = new RuleCommandMiddleware(Handler, appProvider); - } - - [Fact] - public async Task Create_should_create_domain_object() - { - var context = CreateContextForCommand(new CreateRule { Trigger = ruleTrigger, Action = ruleAction }); - - await TestCreate(rule, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task Update_should_update_domain_object() - { - var context = CreateContextForCommand(new UpdateRule { Trigger = ruleTrigger, Action = ruleAction }); - - CreateRule(); - - await TestUpdate(rule, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task Enable_should_update_domain_object() - { - CreateRule(); - DisableRule(); - - var command = CreateContextForCommand(new EnableRule { RuleId = ruleId }); - - await TestUpdate(rule, async _ => - { - await sut.HandleAsync(command); - }); - } - - [Fact] - public async Task Disable_should_update_domain_object() - { - CreateRule(); - - var command = CreateContextForCommand(new DisableRule { RuleId = ruleId }); - - await TestUpdate(rule, async _ => - { - await sut.HandleAsync(command); - }); - } - - [Fact] - public async Task Delete_should_update_domain_object() - { - CreateRule(); - - var command = CreateContextForCommand(new DeleteRule { RuleId = ruleId }); - - await TestUpdate(rule, async _ => - { - await sut.HandleAsync(command); - }); - } - - private void DisableRule() - { - rule.Disable(CreateCommand(new DisableRule())); - } - - private void CreateRule() - { - rule.Create(CreateCommand(new CreateRule { Trigger = ruleTrigger, Action = ruleAction })); - } - } -} \ No newline at end of file diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs index 6fa74a242..c7303a074 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs @@ -69,8 +69,6 @@ namespace Squidex.Domain.Apps.Entities.Rules await sut.HandleAsync(@event); - sut.Dispose(); - A.CallTo(() => ruleEventRepository.MarkSentAsync(@event.Id, requestDump, result, jobResult, requestElapsed, nextCall)) .MustHaveHappened(); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDomainObjectTests.cs deleted file mode 100644 index 0afbaab17..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDomainObjectTests.cs +++ /dev/null @@ -1,256 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Immutable; -using FakeItEasy; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Domain.Apps.Core.Rules.Triggers; -using Squidex.Domain.Apps.Entities.Rules.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Domain.Apps.Events.Rules; -using Squidex.Infrastructure; -using Squidex.Infrastructure.States; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Rules -{ - public class RuleDomainObjectTests : HandlerTestBase - { - private readonly Guid ruleId = Guid.NewGuid(); - private readonly RuleTrigger ruleTrigger = new ContentChangedTrigger(); - private readonly RuleAction ruleAction = new WebhookAction { Url = new Uri("https://squidex.io") }; - private readonly RuleDomainObject sut = new RuleDomainObject(); - - protected override Guid Id - { - get { return ruleId; } - } - - public RuleDomainObjectTests() - { - sut.ActivateAsync(Id, A.Fake>()); - } - - [Fact] - public void Create_should_throw_exception_if_created() - { - sut.Create(CreateRuleCommand(new CreateRule { Trigger = ruleTrigger, Action = ruleAction })); - - Assert.Throws(() => - { - sut.Create(CreateRuleCommand(new CreateRule { Trigger = ruleTrigger, Action = ruleAction })); - }); - } - - [Fact] - public void Create_should_create_events() - { - var command = new CreateRule { Trigger = ruleTrigger, Action = ruleAction }; - - sut.Create(CreateRuleCommand(command)); - - Assert.Equal(AppId, sut.Snapshot.AppId.Id); - - Assert.Same(ruleTrigger, sut.Snapshot.RuleDef.Trigger); - Assert.Same(ruleAction, sut.Snapshot.RuleDef.Action); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateRuleEvent(new RuleCreated { Trigger = ruleTrigger, Action = ruleAction }) - ); - } - - [Fact] - public void Update_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Update(CreateRuleCommand(new UpdateRule { Trigger = ruleTrigger, Action = ruleAction })); - }); - } - - [Fact] - public void Update_should_throw_exception_if_rule_is_deleted() - { - CreateRule(); - DeleteRule(); - - Assert.Throws(() => - { - sut.Update(CreateRuleCommand(new UpdateRule { Trigger = ruleTrigger, Action = ruleAction })); - }); - } - - [Fact] - public void Update_should_create_events() - { - var newTrigger = new ContentChangedTrigger - { - Schemas = ImmutableList.Empty - }; - - var newAction = new WebhookAction - { - Url = new Uri("https://squidex.io/v2") - }; - - CreateRule(); - - var command = new UpdateRule { Trigger = newTrigger, Action = newAction }; - - sut.Update(CreateRuleCommand(command)); - - Assert.Same(newTrigger, sut.Snapshot.RuleDef.Trigger); - Assert.Same(newAction, sut.Snapshot.RuleDef.Action); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateRuleEvent(new RuleUpdated { Trigger = newTrigger, Action = newAction }) - ); - } - - [Fact] - public void Enable_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Enable(CreateRuleCommand(new EnableRule())); - }); - } - - [Fact] - public void Enable_should_throw_exception_if_rule_is_deleted() - { - CreateRule(); - DeleteRule(); - - Assert.Throws(() => - { - sut.Enable(CreateRuleCommand(new EnableRule())); - }); - } - - [Fact] - public void Enable_should_create_events() - { - CreateRule(); - - var command = new EnableRule(); - - sut.Enable(CreateRuleCommand(command)); - - Assert.True(sut.Snapshot.RuleDef.IsEnabled); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateRuleEvent(new RuleEnabled()) - ); - } - - [Fact] - public void Disable_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Disable(CreateRuleCommand(new DisableRule())); - }); - } - - [Fact] - public void Disable_should_throw_exception_if_rule_is_deleted() - { - CreateRule(); - DeleteRule(); - - Assert.Throws(() => - { - sut.Disable(CreateRuleCommand(new DisableRule())); - }); - } - - [Fact] - public void Disable_should_create_events() - { - CreateRule(); - - var command = new DisableRule(); - - sut.Disable(CreateRuleCommand(command)); - - Assert.False(sut.Snapshot.RuleDef.IsEnabled); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateRuleEvent(new RuleDisabled()) - ); - } - - [Fact] - public void Delete_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Delete(CreateRuleCommand(new DeleteRule())); - }); - } - - [Fact] - public void Delete_should_throw_exception_if_already_deleted() - { - CreateRule(); - DeleteRule(); - - Assert.Throws(() => - { - sut.Delete(CreateRuleCommand(new DeleteRule())); - }); - } - - [Fact] - public void Delete_should_update_create_events() - { - CreateRule(); - - sut.Delete(CreateRuleCommand(new DeleteRule())); - - Assert.True(sut.Snapshot.IsDeleted); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateRuleEvent(new RuleDeleted()) - ); - } - - private void CreateRule() - { - sut.Create(CreateRuleCommand(new CreateRule { Trigger = ruleTrigger, Action = ruleAction })); - sut.ClearUncommittedEvents(); - } - - private void DeleteRule() - { - sut.Delete(CreateRuleCommand(new DeleteRule())); - sut.ClearUncommittedEvents(); - } - - protected T CreateRuleEvent(T @event) where T : RuleEvent - { - @event.RuleId = ruleId; - - return CreateEvent(@event); - } - - protected T CreateRuleCommand(T command) where T : RuleCommand - { - command.RuleId = ruleId; - - return CreateCommand(command); - } - } -} \ No newline at end of file diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs new file mode 100644 index 000000000..aa1c9be31 --- /dev/null +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs @@ -0,0 +1,227 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Immutable; +using System.Threading.Tasks; +using FakeItEasy; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Core.Rules.Triggers; +using Squidex.Domain.Apps.Entities.Rules.Commands; +using Squidex.Domain.Apps.Entities.Rules.State; +using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Domain.Apps.Events.Rules; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.States; +using Xunit; + +namespace Squidex.Domain.Apps.Entities.Rules +{ + public class RuleDomainObjectTests : HandlerTestBase + { + private readonly IAppProvider appProvider = A.Fake(); + private readonly Guid ruleId = Guid.NewGuid(); + private readonly RuleGrain sut; + + public sealed class MyRuleGrain : RuleGrain + { + public MyRuleGrain(IStore store, IAppProvider appProvider, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, appProvider, identity, runtime) + { + } + } + + protected override Guid Id + { + get { return ruleId; } + } + + public RuleDomainObjectTests() + { + sut = new MyRuleGrain(Store, appProvider, Identity, Runtime); + sut.OnActivateAsync().Wait(); + } + + [Fact] + public async Task Command_should_throw_exception_if_rule_is_deleted() + { + await CreateAsync(); + await DeleteAsync(); + + await Assert.ThrowsAsync(() => + { + return sut.ExecuteAsync(J(CreateRuleCommand(MakeUpdateCommand()))); + }); + } + + [Fact] + public async Task Create_should_create_events() + { + var command = MakeCreateCommand(); + + var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); + + Assert.True(result.Value is EntityCreatedResult); + + Assert.Equal(AppId, sut.Snapshot.AppId.Id); + + Assert.Same(command.Trigger, sut.Snapshot.RuleDef.Trigger); + Assert.Same(command.Action, sut.Snapshot.RuleDef.Action); + + LastEvents + .ShouldHaveSameEvents( + CreateRuleEvent(new RuleCreated { Trigger = command.Trigger, Action = command.Action }) + ); + } + + [Fact] + public async Task Update_should_handle_command() + { + await sut.ExecuteAsync(J(CreateRuleCommand(MakeCreateCommand()))); + + var result = await sut.ExecuteAsync(J(CreateRuleCommand(MakeUpdateCommand()))); + + Assert.True(result.Value is EntitySavedResult); + } + + [Fact] + public async Task Update_should_create_events() + { + var command = MakeUpdateCommand(); + + await CreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); + + Assert.True(result.Value is EntitySavedResult); + + Assert.Same(command.Trigger, sut.Snapshot.RuleDef.Trigger); + Assert.Same(command.Action, sut.Snapshot.RuleDef.Action); + + LastEvents + .ShouldHaveSameEvents( + CreateRuleEvent(new RuleUpdated { Trigger = command.Trigger, Action = command.Action }) + ); + } + + [Fact] + public async Task Enable_should_handle_command() + { + await sut.ExecuteAsync(J(CreateRuleCommand(MakeCreateCommand()))); + await sut.ExecuteAsync(J(CreateRuleCommand(new DisableRule()))); + } + + [Fact] + public async Task Enable_should_create_events() + { + await CreateAsync(); + await sut.ExecuteAsync(J(CreateRuleCommand(new DisableRule()))); + + var result = await sut.ExecuteAsync(J(CreateRuleCommand(new EnableRule()))); + + Assert.True(result.Value is EntitySavedResult); + + Assert.True(sut.Snapshot.RuleDef.IsEnabled); + + LastEvents + .ShouldHaveSameEvents( + CreateRuleEvent(new RuleEnabled()) + ); + } + + [Fact] + public async Task Disable_should_create_events() + { + await CreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateRuleCommand(new DisableRule()))); + + Assert.True(result.Value is EntitySavedResult); + + Assert.False(sut.Snapshot.RuleDef.IsEnabled); + + LastEvents + .ShouldHaveSameEvents( + CreateRuleEvent(new RuleDisabled()) + ); + } + + [Fact] + public async Task Delete_should_update_create_events() + { + await CreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateRuleCommand(new DeleteRule()))); + + Assert.True(result.Value is EntitySavedResult); + + Assert.True(sut.Snapshot.IsDeleted); + + LastEvents + .ShouldHaveSameEvents( + CreateRuleEvent(new RuleDeleted()) + ); + } + + private Task CreateAsync() + { + return sut.ExecuteAsync(J(CreateRuleCommand(MakeCreateCommand()))); + } + + private Task DeleteAsync() + { + return sut.ExecuteAsync(J(CreateRuleCommand(new DeleteRule()))); + } + + protected T CreateRuleEvent(T @event) where T : RuleEvent + { + @event.RuleId = ruleId; + + return CreateEvent(@event); + } + + protected T CreateRuleCommand(T command) where T : RuleCommand + { + command.RuleId = ruleId; + + return CreateCommand(command); + } + + private CreateRule MakeCreateCommand() + { + var newTrigger = new ContentChangedTrigger + { + Schemas = ImmutableList.Empty + }; + + var newAction = new WebhookAction + { + Url = new Uri("https://squidex.io/v2") + }; + + return new CreateRule { Trigger = newTrigger, Action = newAction }; + } + + private static UpdateRule MakeUpdateCommand() + { + var newTrigger = new ContentChangedTrigger + { + Schemas = ImmutableList.Empty + }; + + var newAction = new WebhookAction + { + Url = new Uri("https://squidex.io/v2") + }; + + return new UpdateRule { Trigger = newTrigger, Action = newAction }; + } + } +} \ No newline at end of file diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs index f6e5c4c43..54a4dfcb5 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs @@ -1,280 +1,280 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using FakeItEasy; -using Squidex.Domain.Apps.Core.Schemas; -using Squidex.Domain.Apps.Entities.Schemas.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Commands; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Schemas -{ - public class SchemaCommandMiddlewareTests : HandlerTestBase - { - private readonly IAppProvider appProvider = A.Fake(); - private readonly SchemaCommandMiddleware sut; - private readonly SchemaDomainObject schema; - private readonly FieldRegistry registry = new FieldRegistry(new TypeNameRegistry()); - private readonly string fieldName = "age"; - - protected override Guid Id - { - get { return SchemaId; } - } - - public SchemaCommandMiddlewareTests() - { - schema = new SchemaDomainObject(registry); - - sut = new SchemaCommandMiddleware(Handler, appProvider); - - A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)) - .Returns((ISchemaEntity)null); - } - - [Fact] - public async Task Create_should_create_schema_domain_object() - { - var context = CreateContextForCommand(new CreateSchema { Name = SchemaName, SchemaId = SchemaId }); - - await TestCreate(schema, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(SchemaId, context.Result>().IdOrValue); - - A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)).MustHaveHappened(); - } - - [Fact] - public async Task UpdateSchema_should_update_domain_object() - { - CreateSchema(); - - var context = CreateContextForCommand(new UpdateSchema { Properties = new SchemaProperties() }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task ReorderSchema_should_update_domain_object() - { - CreateSchema(); - - var context = CreateContextForCommand(new ReorderFields { FieldIds = new List() }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task PublishSchema_should_update_domain_object() - { - CreateSchema(); - - var context = CreateContextForCommand(new PublishSchema()); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task UnpublishSchema_should_update_domain_object() - { - CreateSchema(); - PublishSchema(); - - var context = CreateContextForCommand(new UnpublishSchema()); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task ConfigureScripts_should_update_domain_object() - { - CreateSchema(); - - var context = CreateContextForCommand(new ConfigureScripts()); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task DeleteSchema_should_update_domain_object() - { - CreateSchema(); - - var context = CreateContextForCommand(new DeleteSchema()); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task Add_should_update_domain_object() - { - CreateSchema(); - - var context = CreateContextForCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - - Assert.Equal(1, context.Result>().IdOrValue); - } - - [Fact] - public async Task UpdateField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - var context = CreateContextForCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task LockField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - var context = CreateContextForCommand(new LockField { FieldId = 1 }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task HideField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - var context = CreateContextForCommand(new HideField { FieldId = 1 }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task ShowField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - HideField(); - - var context = CreateContextForCommand(new ShowField { FieldId = 1 }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task DisableField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - var context = CreateContextForCommand(new DisableField { FieldId = 1 }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task EnableField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - DisableField(); - - var context = CreateContextForCommand(new EnableField { FieldId = 1 }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - [Fact] - public async Task DeleteField_should_update_domain_object() - { - CreateSchema(); - CreateField(); - - var context = CreateContextForCommand(new DeleteField { FieldId = 1 }); - - await TestUpdate(schema, async _ => - { - await sut.HandleAsync(context); - }); - } - - private void CreateSchema() - { - schema.Create(CreateCommand(new CreateSchema { Name = SchemaName })); - } - - private void PublishSchema() - { - schema.Publish(CreateCommand(new PublishSchema())); - } - - private void CreateField() - { - schema.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); - } - - private void HideField() - { - schema.HideField(CreateCommand(new HideField { FieldId = 1 })); - } - - private void DisableField() - { - schema.DisableField(CreateCommand(new DisableField { FieldId = 1 })); - } - } -} \ No newline at end of file +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.Collections.Generic; +//using System.Threading.Tasks; +//using FakeItEasy; +//using Squidex.Domain.Apps.Core.Schemas; +//using Squidex.Domain.Apps.Entities.Schemas.Commands; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.Commands; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Schemas +//{ +// public class SchemaCommandMiddlewareTests : HandlerTestBase +// { +// private readonly IAppProvider appProvider = A.Fake(); +// private readonly SchemaCommandMiddleware sut; +// private readonly SchemaDomainObject schema; +// private readonly FieldRegistry registry = new FieldRegistry(new TypeNameRegistry()); +// private readonly string fieldName = "age"; + +// protected override Guid Id +// { +// get { return SchemaId; } +// } + +// public SchemaCommandMiddlewareTests() +// { +// schema = new SchemaDomainObject(registry); + +// sut = new SchemaCommandMiddleware(Handler, appProvider); + +// A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)) +// .Returns((ISchemaEntity)null); +// } + +// [Fact] +// public async Task Create_should_create_schema_domain_object() +// { +// var context = CreateContextForCommand(new CreateSchema { Name = SchemaName, SchemaId = SchemaId }); + +// await TestCreate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Equal(SchemaId, context.Result>().IdOrValue); + +// A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)).MustHaveHappened(); +// } + +// [Fact] +// public async Task UpdateSchema_should_update_domain_object() +// { +// CreateSchema(); + +// var context = CreateContextForCommand(new UpdateSchema { Properties = new SchemaProperties() }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task ReorderSchema_should_update_domain_object() +// { +// CreateSchema(); + +// var context = CreateContextForCommand(new ReorderFields { FieldIds = new List() }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task PublishSchema_should_update_domain_object() +// { +// CreateSchema(); + +// var context = CreateContextForCommand(new PublishSchema()); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task UnpublishSchema_should_update_domain_object() +// { +// CreateSchema(); +// PublishSchema(); + +// var context = CreateContextForCommand(new UnpublishSchema()); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task ConfigureScripts_should_update_domain_object() +// { +// CreateSchema(); + +// var context = CreateContextForCommand(new ConfigureScripts()); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task DeleteSchema_should_update_domain_object() +// { +// CreateSchema(); + +// var context = CreateContextForCommand(new DeleteSchema()); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task Add_should_update_domain_object() +// { +// CreateSchema(); + +// var context = CreateContextForCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); + +// Assert.Equal(1, context.Result>().IdOrValue); +// } + +// [Fact] +// public async Task UpdateField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// var context = CreateContextForCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task LockField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// var context = CreateContextForCommand(new LockField { FieldId = 1 }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task HideField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// var context = CreateContextForCommand(new HideField { FieldId = 1 }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task ShowField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// HideField(); + +// var context = CreateContextForCommand(new ShowField { FieldId = 1 }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task DisableField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// var context = CreateContextForCommand(new DisableField { FieldId = 1 }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task EnableField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// DisableField(); + +// var context = CreateContextForCommand(new EnableField { FieldId = 1 }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// [Fact] +// public async Task DeleteField_should_update_domain_object() +// { +// CreateSchema(); +// CreateField(); + +// var context = CreateContextForCommand(new DeleteField { FieldId = 1 }); + +// await TestUpdate(schema, async _ => +// { +// await sut.HandleAsync(context); +// }); +// } + +// private void CreateSchema() +// { +// schema.Create(CreateCommand(new CreateSchema { Name = SchemaName })); +// } + +// private void PublishSchema() +// { +// schema.Publish(CreateCommand(new PublishSchema())); +// } + +// private void CreateField() +// { +// schema.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); +// } + +// private void HideField() +// { +// schema.HideField(CreateCommand(new HideField { FieldId = 1 })); +// } + +// private void DisableField() +// { +// schema.DisableField(CreateCommand(new DisableField { FieldId = 1 })); +// } +// } +//} \ No newline at end of file diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs index 71922b093..d4ffa9186 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs @@ -1,665 +1,665 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using FakeItEasy; -using Squidex.Domain.Apps.Core.Schemas; -using Squidex.Domain.Apps.Entities.Schemas.Commands; -using Squidex.Domain.Apps.Entities.TestHelpers; -using Squidex.Domain.Apps.Events.Schemas; -using Squidex.Infrastructure; -using Squidex.Infrastructure.States; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Schemas -{ - public class SchemaDomainObjectTests : HandlerTestBase - { - private readonly string fieldName = "age"; - private readonly NamedId fieldId; - private readonly SchemaDomainObject sut; - - protected override Guid Id - { - get { return SchemaId; } - } - - public SchemaDomainObjectTests() - { - fieldId = new NamedId(1, fieldName); - - var fieldRegistry = new FieldRegistry(new TypeNameRegistry()); - - sut = new SchemaDomainObject(fieldRegistry); - sut.ActivateAsync(Id, A.Fake>()); - } - - [Fact] - public void Create_should_throw_exception_if_created() - { - sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); - - Assert.Throws(() => - { - sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); - }); - } - - [Fact] - public void Create_should_create_schema_and_create_events() - { - var properties = new SchemaProperties(); - - sut.Create(CreateCommand(new CreateSchema { Name = SchemaName, SchemaId = SchemaId, Properties = properties })); - - Assert.Equal(AppId, sut.Snapshot.AppId.Id); - - Assert.Equal(SchemaName, sut.Snapshot.Name); - Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new SchemaCreated { Name = SchemaName, Properties = properties }) - ); - } - - [Fact] - public void Create_should_create_schema_with_initial_fields() - { - var properties = new SchemaProperties(); - - var fields = new List - { - new CreateSchemaField { Name = "field1", Properties = ValidProperties() }, - new CreateSchemaField { Name = "field2", Properties = ValidProperties() } - }; - - sut.Create(CreateCommand(new CreateSchema { Name = SchemaName, Properties = properties, Fields = fields })); - - var @event = (SchemaCreated)sut.GetUncomittedEvents().Single().Payload; - - Assert.Equal(AppId, sut.Snapshot.AppId.Id); - Assert.Equal(SchemaName, sut.Snapshot.Name); - Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); - - Assert.Equal(2, @event.Fields.Count); - } - - [Fact] - public void Update_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Update(CreateCommand(new UpdateSchema { Properties = new SchemaProperties() })); - }); - } - - [Fact] - public void Update_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.Update(CreateCommand(new UpdateSchema { Properties = new SchemaProperties() })); - }); - } - - [Fact] - public void Update_should_refresh_properties_and_create_events() - { - var properties = new SchemaProperties(); - - CreateSchema(); - - sut.Update(CreateCommand(new UpdateSchema { Properties = properties })); - - Assert.Equal(properties, sut.Snapshot.SchemaDef.Properties); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new SchemaUpdated { Properties = properties }) - ); - } - - [Fact] - public void ConfigureScripts_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.ConfigureScripts(CreateCommand(new ConfigureScripts())); - }); - } - - [Fact] - public void ConfigureScripts_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.ConfigureScripts(CreateCommand(new ConfigureScripts())); - }); - } - - [Fact] - public void ConfigureScripts_should_create_events() - { - CreateSchema(); - - sut.ConfigureScripts(CreateCommand(new ConfigureScripts - { - ScriptQuery = "", - ScriptCreate = "", - ScriptUpdate = "", - ScriptDelete = "", - ScriptChange = "" - })); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new ScriptsConfigured - { - ScriptQuery = "", - ScriptCreate = "", - ScriptUpdate = "", - ScriptDelete = "", - ScriptChange = "" - }) - ); - } - - [Fact] - public void Reorder_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Reorder(CreateCommand(new ReorderFields { FieldIds = new List() })); - }); - } - - [Fact] - public void Reorder_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.Reorder(CreateCommand(new ReorderFields { FieldIds = new List() })); - }); - } - - [Fact] - public void Reorder_should_refresh_properties_and_create_events() - { - var fieldIds = new List { 1, 2 }; - - CreateSchema(); - - sut.Add(CreateCommand(new AddField { Name = "field1", Properties = ValidProperties() })); - sut.Add(CreateCommand(new AddField { Name = "field2", Properties = ValidProperties() })); - - sut.ClearUncommittedEvents(); - - sut.Reorder(CreateCommand(new ReorderFields { FieldIds = fieldIds })); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new SchemaFieldsReordered { FieldIds = fieldIds }) - ); - } - - [Fact] - public void Publish_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Publish(CreateCommand(new PublishSchema())); - }); - } - - [Fact] - public void Publish_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.Publish(CreateCommand(new PublishSchema())); - }); - } - - [Fact] - public void Publish_should_refresh_properties_and_create_events() - { - CreateSchema(); - - sut.Publish(CreateCommand(new PublishSchema())); - - Assert.True(sut.Snapshot.SchemaDef.IsPublished); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new SchemaPublished()) - ); - } - - [Fact] - public void Unpublish_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Unpublish(CreateCommand(new UnpublishSchema())); - }); - } - - [Fact] - public void Unpublish_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.Unpublish(CreateCommand(new UnpublishSchema())); - }); - } - - [Fact] - public void Unpublish_should_refresh_properties_and_create_events() - { - CreateSchema(); - PublishSchema(); - - sut.Unpublish(CreateCommand(new UnpublishSchema())); - - Assert.False(sut.Snapshot.SchemaDef.IsPublished); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new SchemaUnpublished()) - ); - } - - [Fact] - public void Delete_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Delete(CreateCommand(new DeleteSchema())); - }); - } - - [Fact] - public void Delete_should_throw_exception_if_already_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.Delete(CreateCommand(new DeleteSchema())); - }); - } - - [Fact] - public void Delete_should_refresh_properties_and_create_events() - { - CreateSchema(); - - sut.Delete(CreateCommand(new DeleteSchema())); - - Assert.True(sut.Snapshot.IsDeleted); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new SchemaDeleted()) - ); - } - - [Fact] - public void AddField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = ValidProperties() })); - }); - } - - [Fact] - public void AddField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); - }); - } - - [Fact] - public void Add_should_update_schema_and_create_events() - { - var properties = new NumberFieldProperties(); - - CreateSchema(); - - sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = properties })); - - Assert.Equal(properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new FieldAdded { Name = fieldName, FieldId = fieldId, Properties = properties }) - ); - } - - [Fact] - public void UpdateField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() })); - }); - } - - [Fact] - public void UpdateField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() })); - }); - } - - [Fact] - public void UpdateField_should_update_schema_and_create_events() - { - var properties = new NumberFieldProperties(); - - CreateSchema(); - CreateField(); - - sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = properties })); - - Assert.Equal(properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new FieldUpdated { FieldId = fieldId, Properties = properties }) - ); - } - - [Fact] - public void LockField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.LockField(CreateCommand(new LockField { FieldId = 1 })); - }); - } - - [Fact] - public void LockField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.LockField(CreateCommand(new LockField { FieldId = 1 })); - }); - } - - [Fact] - public void LockField_should_update_schema_and_create_events() - { - CreateSchema(); - CreateField(); - - sut.LockField(CreateCommand(new LockField { FieldId = 1 })); - - Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new FieldLocked { FieldId = fieldId }) - ); - } - - [Fact] - public void HideField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.HideField(CreateCommand(new HideField { FieldId = 1 })); - }); - } - - [Fact] - public void HideField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.HideField(CreateCommand(new HideField { FieldId = 1 })); - }); - } - - [Fact] - public void HideField_should_update_schema_and_create_events() - { - CreateSchema(); - CreateField(); - - sut.HideField(CreateCommand(new HideField { FieldId = 1 })); - - Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new FieldHidden { FieldId = fieldId }) - ); - } - - [Fact] - public void ShowField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); - }); - } - - [Fact] - public void ShowField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); - }); - } - - [Fact] - public void ShowField_should_update_schema_and_create_events() - { - CreateSchema(); - CreateField(); - - sut.HideField(CreateCommand(new HideField { FieldId = 1 })); - sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); - - Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); - - sut.GetUncomittedEvents().Skip(1) - .ShouldHaveSameEvents( - CreateEvent(new FieldShown { FieldId = fieldId }) - ); - } - - [Fact] - public void DisableField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); - }); - } - - [Fact] - public void DisableField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); - }); - } - - [Fact] - public void DisableField_should_update_schema_and_create_events() - { - CreateSchema(); - CreateField(); - - sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); - - Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new FieldDisabled { FieldId = fieldId }) - ); - } - - [Fact] - public void EnableField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); - }); - } - - [Fact] - public void EnableField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); - }); - } - - [Fact] - public void EnableField_should_update_schema_and_create_events() - { - CreateSchema(); - CreateField(); - - sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); - sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); - - Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); - - sut.GetUncomittedEvents().Skip(1) - .ShouldHaveSameEvents( - CreateEvent(new FieldEnabled { FieldId = fieldId }) - ); - } - - [Fact] - public void DeleteField_should_throw_exception_if_not_created() - { - Assert.Throws(() => - { - sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); - }); - } - - [Fact] - public void DeleteField_should_throw_exception_if_schema_is_deleted() - { - CreateSchema(); - DeleteSchema(); - - Assert.Throws(() => - { - sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); - }); - } - - [Fact] - public void DeleteField_should_update_schema_and_create_events() - { - CreateSchema(); - CreateField(); - - sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); - - Assert.False(sut.Snapshot.SchemaDef.FieldsById.ContainsKey(1)); - - sut.GetUncomittedEvents() - .ShouldHaveSameEvents( - CreateEvent(new FieldDeleted { FieldId = fieldId }) - ); - } - - private void CreateField() - { - sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); - sut.ClearUncommittedEvents(); - } - - private void CreateSchema() - { - sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); - sut.ClearUncommittedEvents(); - } - - private void PublishSchema() - { - sut.Publish(CreateCommand(new PublishSchema())); - sut.ClearUncommittedEvents(); - } - - private void DeleteSchema() - { - sut.Delete(CreateCommand(new DeleteSchema())); - sut.ClearUncommittedEvents(); - } - - private static StringFieldProperties ValidProperties() - { - return new StringFieldProperties { MinLength = 10, MaxLength = 20 }; - } - - private static StringFieldProperties InvalidProperties() - { - return new StringFieldProperties { MinLength = 20, MaxLength = 10 }; - } - } -} +//// ========================================================================== +//// Squidex Headless CMS +//// ========================================================================== +//// Copyright (c) Squidex UG (haftungsbeschränkt) +//// All rights reserved. Licensed under the MIT license. +//// ========================================================================== + +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using FakeItEasy; +//using Squidex.Domain.Apps.Core.Schemas; +//using Squidex.Domain.Apps.Entities.Schemas.Commands; +//using Squidex.Domain.Apps.Entities.TestHelpers; +//using Squidex.Domain.Apps.Events.Schemas; +//using Squidex.Infrastructure; +//using Squidex.Infrastructure.States; +//using Xunit; + +//namespace Squidex.Domain.Apps.Entities.Schemas +//{ +// public class SchemaDomainObjectTests : HandlerTestBase +// { +// private readonly string fieldName = "age"; +// private readonly NamedId fieldId; +// private readonly SchemaDomainObject sut; + +// protected override Guid Id +// { +// get { return SchemaId; } +// } + +// public SchemaDomainObjectTests() +// { +// fieldId = new NamedId(1, fieldName); + +// var fieldRegistry = new FieldRegistry(new TypeNameRegistry()); + +// sut = new SchemaDomainObject(fieldRegistry); +// sut.ActivateAsync(Id, A.Fake>()); +// } + +// [Fact] +// public void Create_should_throw_exception_if_created() +// { +// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); + +// Assert.Throws(() => +// { +// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); +// }); +// } + +// [Fact] +// public void Create_should_create_schema_and_create_events() +// { +// var properties = new SchemaProperties(); + +// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName, SchemaId = SchemaId, Properties = properties })); + +// Assert.Equal(AppId, sut.Snapshot.AppId.Id); + +// Assert.Equal(SchemaName, sut.Snapshot.Name); +// Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new SchemaCreated { Name = SchemaName, Properties = properties }) +// ); +// } + +// [Fact] +// public void Create_should_create_schema_with_initial_fields() +// { +// var properties = new SchemaProperties(); + +// var fields = new List +// { +// new CreateSchemaField { Name = "field1", Properties = ValidProperties() }, +// new CreateSchemaField { Name = "field2", Properties = ValidProperties() } +// }; + +// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName, Properties = properties, Fields = fields })); + +// var @event = (SchemaCreated)sut.GetUncomittedEvents().Single().Payload; + +// Assert.Equal(AppId, sut.Snapshot.AppId.Id); +// Assert.Equal(SchemaName, sut.Snapshot.Name); +// Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); + +// Assert.Equal(2, @event.Fields.Count); +// } + +// [Fact] +// public void Update_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Update(CreateCommand(new UpdateSchema { Properties = new SchemaProperties() })); +// }); +// } + +// [Fact] +// public void Update_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.Update(CreateCommand(new UpdateSchema { Properties = new SchemaProperties() })); +// }); +// } + +// [Fact] +// public void Update_should_refresh_properties_and_create_events() +// { +// var properties = new SchemaProperties(); + +// CreateSchema(); + +// sut.Update(CreateCommand(new UpdateSchema { Properties = properties })); + +// Assert.Equal(properties, sut.Snapshot.SchemaDef.Properties); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new SchemaUpdated { Properties = properties }) +// ); +// } + +// [Fact] +// public void ConfigureScripts_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.ConfigureScripts(CreateCommand(new ConfigureScripts())); +// }); +// } + +// [Fact] +// public void ConfigureScripts_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.ConfigureScripts(CreateCommand(new ConfigureScripts())); +// }); +// } + +// [Fact] +// public void ConfigureScripts_should_create_events() +// { +// CreateSchema(); + +// sut.ConfigureScripts(CreateCommand(new ConfigureScripts +// { +// ScriptQuery = "", +// ScriptCreate = "", +// ScriptUpdate = "", +// ScriptDelete = "", +// ScriptChange = "" +// })); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new ScriptsConfigured +// { +// ScriptQuery = "", +// ScriptCreate = "", +// ScriptUpdate = "", +// ScriptDelete = "", +// ScriptChange = "" +// }) +// ); +// } + +// [Fact] +// public void Reorder_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Reorder(CreateCommand(new ReorderFields { FieldIds = new List() })); +// }); +// } + +// [Fact] +// public void Reorder_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.Reorder(CreateCommand(new ReorderFields { FieldIds = new List() })); +// }); +// } + +// [Fact] +// public void Reorder_should_refresh_properties_and_create_events() +// { +// var fieldIds = new List { 1, 2 }; + +// CreateSchema(); + +// sut.Add(CreateCommand(new AddField { Name = "field1", Properties = ValidProperties() })); +// sut.Add(CreateCommand(new AddField { Name = "field2", Properties = ValidProperties() })); + +// sut.ClearUncommittedEvents(); + +// sut.Reorder(CreateCommand(new ReorderFields { FieldIds = fieldIds })); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new SchemaFieldsReordered { FieldIds = fieldIds }) +// ); +// } + +// [Fact] +// public void Publish_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Publish(CreateCommand(new PublishSchema())); +// }); +// } + +// [Fact] +// public void Publish_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.Publish(CreateCommand(new PublishSchema())); +// }); +// } + +// [Fact] +// public void Publish_should_refresh_properties_and_create_events() +// { +// CreateSchema(); + +// sut.Publish(CreateCommand(new PublishSchema())); + +// Assert.True(sut.Snapshot.SchemaDef.IsPublished); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new SchemaPublished()) +// ); +// } + +// [Fact] +// public void Unpublish_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Unpublish(CreateCommand(new UnpublishSchema())); +// }); +// } + +// [Fact] +// public void Unpublish_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.Unpublish(CreateCommand(new UnpublishSchema())); +// }); +// } + +// [Fact] +// public void Unpublish_should_refresh_properties_and_create_events() +// { +// CreateSchema(); +// PublishSchema(); + +// sut.Unpublish(CreateCommand(new UnpublishSchema())); + +// Assert.False(sut.Snapshot.SchemaDef.IsPublished); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new SchemaUnpublished()) +// ); +// } + +// [Fact] +// public void Delete_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Delete(CreateCommand(new DeleteSchema())); +// }); +// } + +// [Fact] +// public void Delete_should_throw_exception_if_already_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.Delete(CreateCommand(new DeleteSchema())); +// }); +// } + +// [Fact] +// public void Delete_should_refresh_properties_and_create_events() +// { +// CreateSchema(); + +// sut.Delete(CreateCommand(new DeleteSchema())); + +// Assert.True(sut.Snapshot.IsDeleted); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new SchemaDeleted()) +// ); +// } + +// [Fact] +// public void AddField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = ValidProperties() })); +// }); +// } + +// [Fact] +// public void AddField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); +// }); +// } + +// [Fact] +// public void Add_should_update_schema_and_create_events() +// { +// var properties = new NumberFieldProperties(); + +// CreateSchema(); + +// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = properties })); + +// Assert.Equal(properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new FieldAdded { Name = fieldName, FieldId = fieldId, Properties = properties }) +// ); +// } + +// [Fact] +// public void UpdateField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() })); +// }); +// } + +// [Fact] +// public void UpdateField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() })); +// }); +// } + +// [Fact] +// public void UpdateField_should_update_schema_and_create_events() +// { +// var properties = new NumberFieldProperties(); + +// CreateSchema(); +// CreateField(); + +// sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = properties })); + +// Assert.Equal(properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new FieldUpdated { FieldId = fieldId, Properties = properties }) +// ); +// } + +// [Fact] +// public void LockField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.LockField(CreateCommand(new LockField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void LockField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.LockField(CreateCommand(new LockField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void LockField_should_update_schema_and_create_events() +// { +// CreateSchema(); +// CreateField(); + +// sut.LockField(CreateCommand(new LockField { FieldId = 1 })); + +// Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new FieldLocked { FieldId = fieldId }) +// ); +// } + +// [Fact] +// public void HideField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void HideField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void HideField_should_update_schema_and_create_events() +// { +// CreateSchema(); +// CreateField(); + +// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); + +// Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new FieldHidden { FieldId = fieldId }) +// ); +// } + +// [Fact] +// public void ShowField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void ShowField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void ShowField_should_update_schema_and_create_events() +// { +// CreateSchema(); +// CreateField(); + +// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); +// sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); + +// Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); + +// sut.GetUncomittedEvents().Skip(1) +// .ShouldHaveSameEvents( +// CreateEvent(new FieldShown { FieldId = fieldId }) +// ); +// } + +// [Fact] +// public void DisableField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void DisableField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void DisableField_should_update_schema_and_create_events() +// { +// CreateSchema(); +// CreateField(); + +// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); + +// Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new FieldDisabled { FieldId = fieldId }) +// ); +// } + +// [Fact] +// public void EnableField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void EnableField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void EnableField_should_update_schema_and_create_events() +// { +// CreateSchema(); +// CreateField(); + +// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); +// sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); + +// Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); + +// sut.GetUncomittedEvents().Skip(1) +// .ShouldHaveSameEvents( +// CreateEvent(new FieldEnabled { FieldId = fieldId }) +// ); +// } + +// [Fact] +// public void DeleteField_should_throw_exception_if_not_created() +// { +// Assert.Throws(() => +// { +// sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void DeleteField_should_throw_exception_if_schema_is_deleted() +// { +// CreateSchema(); +// DeleteSchema(); + +// Assert.Throws(() => +// { +// sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); +// }); +// } + +// [Fact] +// public void DeleteField_should_update_schema_and_create_events() +// { +// CreateSchema(); +// CreateField(); + +// sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); + +// Assert.False(sut.Snapshot.SchemaDef.FieldsById.ContainsKey(1)); + +// sut.GetUncomittedEvents() +// .ShouldHaveSameEvents( +// CreateEvent(new FieldDeleted { FieldId = fieldId }) +// ); +// } + +// private void CreateField() +// { +// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); +// sut.ClearUncommittedEvents(); +// } + +// private void CreateSchema() +// { +// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); +// sut.ClearUncommittedEvents(); +// } + +// private void PublishSchema() +// { +// sut.Publish(CreateCommand(new PublishSchema())); +// sut.ClearUncommittedEvents(); +// } + +// private void DeleteSchema() +// { +// sut.Delete(CreateCommand(new DeleteSchema())); +// sut.ClearUncommittedEvents(); +// } + +// private static StringFieldProperties ValidProperties() +// { +// return new StringFieldProperties { MinLength = 10, MaxLength = 20 }; +// } + +// private static StringFieldProperties InvalidProperties() +// { +// return new StringFieldProperties { MinLength = 20, MaxLength = 10 }; +// } +// } +//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs b/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs index 0822c2f2c..82adf32de 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs @@ -6,68 +6,29 @@ // ========================================================================== using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using FakeItEasy; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Domain.Apps.Events; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.States; #pragma warning disable IDE0019 // Use pattern matching namespace Squidex.Domain.Apps.Entities.TestHelpers { - public abstract class HandlerTestBase where T : IDomainObject + public abstract class HandlerTestBase where T : IDomainObjectGrain { - private sealed class MockupHandler : IAggregateHandler - { - private T domainObject; - - public bool IsCreated { get; private set; } - public bool IsUpdated { get; private set; } - - public void Init(T newDomainObject) - { - domainObject = newDomainObject; - - IsCreated = false; - IsUpdated = false; - } - - public Task CreateSyncedAsync(CommandContext context, Func creator) where V : class, IDomainObject - { - return CreateAsync(context, creator); - } - - public Task UpdateSyncedAsync(CommandContext context, Func creator) where V : class, IDomainObject - { - return UpdateAsync(context, creator); - } - - public async Task CreateAsync(CommandContext context, Func creator) where V : class, IDomainObject - { - IsCreated = true; - - var @do = domainObject as V; - - await creator(domainObject as V); - - return @do; - } - - public async Task UpdateAsync(CommandContext context, Func updater) where V : class, IDomainObject - { - IsUpdated = true; - - var @do = domainObject as V; - - await updater(domainObject as V); - - return @do; - } - } - - private readonly MockupHandler handler = new MockupHandler(); + private readonly IGrainIdentity identity = A.Fake(); + private readonly IGrainRuntime runtime = A.Fake(); + private readonly IStore store = A.Fake>(); + private readonly IPersistence persistence = A.Fake>(); protected RefToken User { get; } = new RefToken("subject", Guid.NewGuid().ToString()); @@ -75,8 +36,6 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers protected Guid SchemaId { get; } = Guid.NewGuid(); - protected abstract Guid Id { get; } - protected string AppName { get; } = "my-app"; protected string SchemaName { get; } = "my-schema"; @@ -91,44 +50,49 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers get { return new NamedId(SchemaId, SchemaName); } } - protected IAggregateHandler Handler + protected abstract Guid Id { get; } + + public IGrainIdentity Identity { - get { return handler; } + get { return identity; } } - protected CommandContext CreateContextForCommand(TCommand command) where TCommand : SquidexCommand + public IGrainRuntime Runtime { - return new CommandContext(CreateCommand(command), A.Dummy()); + get { return runtime; } } - protected async Task TestCreate(T domainObject, Func action, bool shouldCreate = true) + public IStore Store { - handler.Init(domainObject); - - await domainObject.ActivateAsync(Id, A.Fake>()); - await action(domainObject); - - if (!handler.IsCreated && shouldCreate) - { - throw new InvalidOperationException("Create not called."); - } + get { return store; } } - protected async Task TestUpdate(T domainObject, Func action, bool shouldUpdate = true) + public IEnumerable> LastEvents { get; private set; } = Enumerable.Empty>(); + + protected HandlerTestBase() { - handler.Init(domainObject); + A.CallTo(() => identity.PrimaryKey) + .Returns(Id); - await domainObject.ActivateAsync(Id, A.Fake>()); - await action(domainObject); + A.CallTo(() => store.WithSnapshotsAndEventSourcing(A.Ignored, Id, A>.Ignored, A, Task>>.Ignored)) + .Returns(persistence); - if (!handler.IsUpdated && shouldUpdate) - { - throw new InvalidOperationException("Update not called."); - } + A.CallTo(() => persistence.WriteEventsAsync(A>>.Ignored)) + .Invokes(new Action>>(events => + { + LastEvents = events; + })); + } + + protected CommandContext CreateContextForCommand(TCommand command) where TCommand : SquidexCommand + { + return new CommandContext(CreateCommand(command), A.Dummy()); } protected TCommand CreateCommand(TCommand command) where TCommand : SquidexCommand { + command.ExpectedVersion = EtagVersion.Any; + if (command.Actor == null) { command.Actor = User; @@ -147,25 +111,35 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers return command; } + protected static J J(IAggregateCommand command) + { + return command.AsJ(); + } + protected TEvent CreateEvent(TEvent @event) where TEvent : SquidexEvent { @event.Actor = User; - var appEvent = @event as AppEvent; + EnrichAppInfo(@event); + EnrichSchemaInfo(@event); + + return @event; + } - if (appEvent != null) + private void EnrichAppInfo(IEvent @event) + { + if (@event is AppEvent appEvent) { appEvent.AppId = AppNamedId; } + } - var schemaEvent = @event as SchemaEvent; - - if (schemaEvent != null) + private void EnrichSchemaInfo(IEvent @event) + { + if (@event is SchemaEvent schemaEvent) { schemaEvent.SchemaId = SchemaNamedId; } - - return @event; } } } From de99ac3579464499a27d190c3df3bd36dbe7227f Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 10:36:14 +0100 Subject: [PATCH 08/28] Asset grain tests --- .../Assets/AssetGrain.cs | 11 +- .../Schemas/SchemaGrain.cs | 13 +- .../Assets/AssetCommandMiddlewareTests.cs | 278 ++++---- .../Assets/AssetDomainObjectTests.cs | 220 ------ .../Assets/AssetGrainTests.cs | 182 +++++ .../Rules/RuleGrainTests.cs | 72 +- .../Schemas/SchemaCommandMiddlewareTests.cs | 280 -------- .../Schemas/SchemaDomainObjectTests.cs | 665 ------------------ .../Schemas/SchemaGrainTests.cs | 439 ++++++++++++ .../TestHelpers/AssertHelper.cs | 6 + 10 files changed, 814 insertions(+), 1352 deletions(-) delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs create mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs create mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs index 1aa3bfdc3..e790b3842 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs @@ -7,6 +7,8 @@ using System; using System.Threading.Tasks; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Domain.Apps.Entities.Assets.Commands; using Squidex.Domain.Apps.Entities.Assets.Guards; using Squidex.Domain.Apps.Entities.Assets.State; @@ -20,10 +22,15 @@ using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities.Assets { - public sealed class AssetGrain : DomainObjectGrain, IAssetGrain + public class AssetGrain : DomainObjectGrain, IAssetGrain { public AssetGrain(IStore store) - : base(store) + : this(store, null, null) + { + } + + protected AssetGrain(IStore store, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, identity, runtime) { } diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs index 219c42c42..c09dc825a 100644 --- a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs @@ -9,6 +9,8 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Entities.Schemas.Commands; using Squidex.Domain.Apps.Entities.Schemas.Guards; @@ -24,13 +26,18 @@ using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities.Schemas { - public sealed class SchemaGrain : DomainObjectGrain, ISchemaGrain + public class SchemaGrain : DomainObjectGrain, ISchemaGrain { private readonly IAppProvider appProvider; private readonly FieldRegistry registry; public SchemaGrain(IStore store, IAppProvider appProvider, FieldRegistry registry) - : base(store) + : this(store, appProvider, registry, null, null) + { + } + + protected SchemaGrain(IStore store, IAppProvider appProvider, FieldRegistry registry, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, identity, runtime) { Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(registry, nameof(registry)); @@ -61,7 +68,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas Add(c); - return EntityCreatedResult.Create(Snapshot.SchemaDef.FieldsById.Values.First(x => x.Name == addField.Name).Id, Version); + return EntityCreatedResult.Create(Snapshot.SchemaDef.FieldsById.Values.First(x => x.Name == addField.Name).Id, NewVersion); }); case DeleteField deleteField: diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs index 44a1a36ca..d785419e6 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs @@ -1,145 +1,133 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.IO; -//using System.Threading.Tasks; -//using FakeItEasy; -//using Squidex.Domain.Apps.Entities.Assets.Commands; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Infrastructure.Assets; -//using Squidex.Infrastructure.Commands; -//using Squidex.Infrastructure.Tasks; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Assets -//{ -// public class AssetCommandMiddlewareTests : HandlerTestBase -// { -// private readonly IAssetThumbnailGenerator assetThumbnailGenerator = A.Fake(); -// private readonly IAssetStore assetStore = A.Fake(); -// private readonly Guid assetId = Guid.NewGuid(); -// private readonly Stream stream = new MemoryStream(); -// private readonly ImageInfo image = new ImageInfo(2048, 2048); -// private readonly AssetDomainObject asset = new AssetDomainObject(); -// private readonly AssetFile file; -// private readonly AssetCommandMiddleware sut; - -// protected override Guid Id -// { -// get { return assetId; } -// } - -// public AssetCommandMiddlewareTests() -// { -// file = new AssetFile("my-image.png", "image/png", 1024, () => stream); - -// sut = new AssetCommandMiddleware(Handler, assetStore, assetThumbnailGenerator); -// } - -// [Fact] -// public async Task Create_should_create_domain_object() -// { -// var context = CreateContextForCommand(new CreateAsset { AssetId = assetId, File = file }); - -// SetupStore(0, context.ContextId); -// SetupImageInfo(); - -// await TestCreate(asset, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(assetId, context.Result>().IdOrValue); - -// AssertAssetHasBeenUploaded(0, context.ContextId); -// AssertAssetImageChecked(); -// } - -// [Fact] -// public async Task Update_should_update_domain_object() -// { -// var context = CreateContextForCommand(new UpdateAsset { AssetId = assetId, File = file }); - -// SetupStore(1, context.ContextId); -// SetupImageInfo(); - -// CreateAsset(); - -// await TestUpdate(asset, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// AssertAssetHasBeenUploaded(1, context.ContextId); -// AssertAssetImageChecked(); -// } - -// [Fact] -// public async Task Rename_should_update_domain_object() -// { -// CreateAsset(); - -// var context = CreateContextForCommand(new RenameAsset { AssetId = assetId, FileName = "my-new-image.png" }); - -// await TestUpdate(asset, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task Delete_should_update_domain_object() -// { -// CreateAsset(); - -// var command = CreateContextForCommand(new DeleteAsset { AssetId = assetId }); - -// await TestUpdate(asset, async _ => -// { -// await sut.HandleAsync(command); -// }); -// } - -// private void CreateAsset() -// { -// asset.Create(CreateCommand(new CreateAsset { File = file })); -// } - -// private void SetupImageInfo() -// { -// A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) -// .Returns(image); -// } - -// private void SetupStore(long version, Guid commitId) -// { -// A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) -// .Returns(TaskHelper.Done); -// A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) -// .Returns(TaskHelper.Done); -// A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) -// .Returns(TaskHelper.Done); -// } - -// private void AssertAssetImageChecked() -// { -// A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) -// .MustHaveHappened(); -// } - -// private void AssertAssetHasBeenUploaded(long version, Guid commitId) -// { -// A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) -// .MustHaveHappened(); -// A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) -// .MustHaveHappened(); -// A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) -// .MustHaveHappened(); -// } -// } -//} +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.IO; +using System.Threading.Tasks; +using FakeItEasy; +using Orleans; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Domain.Apps.Entities.Assets.Commands; +using Squidex.Domain.Apps.Entities.Assets.State; +using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Infrastructure.Assets; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.States; +using Squidex.Infrastructure.Tasks; +using Xunit; + +namespace Squidex.Domain.Apps.Entities.Assets +{ + public class AssetCommandMiddlewareTests : HandlerTestBase + { + private readonly IAssetThumbnailGenerator assetThumbnailGenerator = A.Fake(); + private readonly IAssetStore assetStore = A.Fake(); + private readonly IGrainFactory grainFactory = A.Fake(); + private readonly Guid assetId = Guid.NewGuid(); + private readonly Stream stream = new MemoryStream(); + private readonly ImageInfo image = new ImageInfo(2048, 2048); + private readonly AssetGrain asset; + private readonly AssetFile file; + private readonly AssetCommandMiddleware sut; + + public class MyAssetGrain : AssetGrain + { + public MyAssetGrain(IStore store, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, identity, runtime) + { + } + } + + protected override Guid Id + { + get { return assetId; } + } + + public AssetCommandMiddlewareTests() + { + file = new AssetFile("my-image.png", "image/png", 1024, () => stream); + + asset = new MyAssetGrain(Store, Identity, Runtime); + asset.OnActivateAsync(); + + A.CallTo(() => grainFactory.GetGrain(Id, null)) + .Returns(asset); + + sut = new AssetCommandMiddleware(grainFactory, assetStore, assetThumbnailGenerator); + } + + [Fact] + public async Task Create_should_create_domain_object() + { + var context = CreateContextForCommand(new CreateAsset { AssetId = assetId, File = file }); + + SetupStore(0, context.ContextId); + SetupImageInfo(); + + await sut.HandleAsync(context); + + Assert.Equal(assetId, context.Result>().IdOrValue); + + AssertAssetHasBeenUploaded(0, context.ContextId); + AssertAssetImageChecked(); + } + + [Fact] + public async Task Update_should_update_domain_object() + { + var context = CreateContextForCommand(new UpdateAsset { AssetId = assetId, File = file }); + + SetupStore(1, context.ContextId); + SetupImageInfo(); + + await ExecuteCreateAsync(); + + await sut.HandleAsync(context); + + AssertAssetHasBeenUploaded(1, context.ContextId); + AssertAssetImageChecked(); + } + + private Task ExecuteCreateAsync() + { + return asset.ExecuteAsync(J(CreateCommand(new CreateAsset { AssetId = Id, File = file }))); + } + + private void SetupStore(long version, Guid commitId) + { + A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) + .Returns(TaskHelper.Done); + A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) + .Returns(TaskHelper.Done); + A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) + .Returns(TaskHelper.Done); + } + + private void AssertAssetHasBeenUploaded(long version, Guid commitId) + { + A.CallTo(() => assetStore.UploadTemporaryAsync(commitId.ToString(), stream)) + .MustHaveHappened(); + A.CallTo(() => assetStore.CopyTemporaryAsync(commitId.ToString(), assetId.ToString(), version, null)) + .MustHaveHappened(); + A.CallTo(() => assetStore.DeleteTemporaryAsync(commitId.ToString())) + .MustHaveHappened(); + } + + private void SetupImageInfo() + { + A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) + .Returns(image); + } + + private void AssertAssetImageChecked() + { + A.CallTo(() => assetThumbnailGenerator.GetImageInfoAsync(stream)) + .MustHaveHappened(); + } + } +} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs deleted file mode 100644 index d1c8aeae4..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetDomainObjectTests.cs +++ /dev/null @@ -1,220 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.IO; -//using FakeItEasy; -//using Squidex.Domain.Apps.Entities.Assets.Commands; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Domain.Apps.Events.Assets; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.Assets; -//using Squidex.Infrastructure.States; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Assets -//{ -// public class AssetDomainObjectTests : HandlerTestBase -// { -// private readonly ImageInfo image = new ImageInfo(2048, 2048); -// private readonly Guid assetId = Guid.NewGuid(); -// private readonly AssetFile file = new AssetFile("my-image.png", "image/png", 1024, () => new MemoryStream()); -// private readonly AssetDomainObject sut = new AssetDomainObject(); - -// protected override Guid Id -// { -// get { return assetId; } -// } - -// public AssetDomainObjectTests() -// { -// sut.ActivateAsync(Id, A.Fake>()); -// } - -// [Fact] -// public void Create_should_throw_exception_if_created() -// { -// CreateAsset(); - -// Assert.Throws(() => -// { -// sut.Create(CreateAssetCommand(new CreateAsset { File = file })); -// }); -// } - -// [Fact] -// public void Create_should_create_events() -// { -// sut.Create(CreateAssetCommand(new CreateAsset { File = file, ImageInfo = image })); - -// Assert.Equal(0, sut.Snapshot.FileVersion); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateAssetEvent(new AssetCreated -// { -// IsImage = true, -// FileName = file.FileName, -// FileSize = file.FileSize, -// FileVersion = 0, -// MimeType = file.MimeType, -// PixelWidth = image.PixelWidth, -// PixelHeight = image.PixelHeight -// }) -// ); -// } - -// [Fact] -// public void Update_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Update(CreateAssetCommand(new UpdateAsset { File = file })); -// }); -// } - -// [Fact] -// public void Update_should_throw_exception_if_asset_is_deleted() -// { -// CreateAsset(); -// DeleteAsset(); - -// Assert.Throws(() => -// { -// sut.Update(CreateAssetCommand(new UpdateAsset())); -// }); -// } - -// [Fact] -// public void Update_should_create_events() -// { -// CreateAsset(); - -// sut.Update(CreateAssetCommand(new UpdateAsset { File = file, ImageInfo = image })); - -// Assert.Equal(1, sut.Snapshot.FileVersion); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateAssetEvent(new AssetUpdated -// { -// IsImage = true, -// FileSize = file.FileSize, -// FileVersion = 1, -// MimeType = file.MimeType, -// PixelWidth = image.PixelWidth, -// PixelHeight = image.PixelHeight -// }) -// ); -// } - -// [Fact] -// public void Rename_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Rename(CreateAssetCommand(new RenameAsset { FileName = "new-file.png" })); -// }); -// } - -// [Fact] -// public void Rename_should_throw_exception_if_asset_is_deleted() -// { -// CreateAsset(); -// DeleteAsset(); - -// Assert.Throws(() => -// { -// sut.Update(CreateAssetCommand(new UpdateAsset())); -// }); -// } - -// [Fact] -// public void Rename_should_create_events() -// { -// CreateAsset(); - -// sut.Rename(CreateAssetCommand(new RenameAsset { FileName = "my-new-image.png" })); - -// Assert.Equal("my-new-image.png", sut.Snapshot.FileName); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateAssetEvent(new AssetRenamed { FileName = "my-new-image.png" }) -// ); -// } - -// [Fact] -// public void Delete_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Delete(CreateAssetCommand(new DeleteAsset())); -// }); -// } - -// [Fact] -// public void Delete_should_throw_exception_if_already_deleted() -// { -// CreateAsset(); -// DeleteAsset(); - -// Assert.Throws(() => -// { -// sut.Delete(CreateAssetCommand(new DeleteAsset())); -// }); -// } - -// [Fact] -// public void Delete_should_create_events_with_total_file_size() -// { -// CreateAsset(); -// UpdateAsset(); - -// sut.Delete(CreateAssetCommand(new DeleteAsset())); - -// Assert.True(sut.Snapshot.IsDeleted); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateAssetEvent(new AssetDeleted { DeletedSize = 2048 }) -// ); -// } - -// private void CreateAsset() -// { -// sut.Create(CreateAssetCommand(new CreateAsset { File = file })); -// sut.ClearUncommittedEvents(); -// } - -// private void UpdateAsset() -// { -// sut.Update(CreateAssetCommand(new UpdateAsset { File = file })); -// sut.ClearUncommittedEvents(); -// } - -// private void DeleteAsset() -// { -// sut.Delete(CreateAssetCommand(new DeleteAsset())); -// sut.ClearUncommittedEvents(); -// } - -// protected T CreateAssetEvent(T @event) where T : AssetEvent -// { -// @event.AssetId = assetId; - -// return CreateEvent(@event); -// } - -// protected T CreateAssetCommand(T command) where T : AssetCommand -// { -// command.AssetId = assetId; - -// return CreateCommand(command); -// } -// } -//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs new file mode 100644 index 000000000..972af5527 --- /dev/null +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs @@ -0,0 +1,182 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.IO; +using System.Threading.Tasks; +using FakeItEasy; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Domain.Apps.Entities.Assets.Commands; +using Squidex.Domain.Apps.Entities.Assets.State; +using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Domain.Apps.Events.Assets; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Assets; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.States; +using Xunit; + +namespace Squidex.Domain.Apps.Entities.Assets +{ + public class AssetGrainTests : HandlerTestBase + { + private readonly ImageInfo image = new ImageInfo(2048, 2048); + private readonly Guid assetId = Guid.NewGuid(); + private readonly AssetFile file = new AssetFile("my-image.png", "image/png", 1024, () => new MemoryStream()); + private readonly AssetGrain sut; + + public class MyAssetGrain : AssetGrain + { + public MyAssetGrain(IStore store, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, identity, runtime) + { + } + } + + protected override Guid Id + { + get { return assetId; } + } + + public AssetGrainTests() + { + sut = new MyAssetGrain(Store, Identity, Runtime); + sut.OnActivateAsync(); + } + + [Fact] + public async Task Command_should_throw_exception_if_rule_is_deleted() + { + await ExecuteCreateAsync(); + await ExecuteDeleteAsync(); + + await Assert.ThrowsAsync(ExecuteUpdateAsync); + } + + [Fact] + public async Task Create_should_create_events() + { + var command = new CreateAsset { File = file, ImageInfo = image }; + + var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); + + result.ShouldBeEquaivalent(new AssetSavedResult(0, 0)); + + Assert.Equal(0, sut.Snapshot.FileVersion); + + LastEvents + .ShouldHaveSameEvents( + CreateAssetEvent(new AssetCreated + { + IsImage = true, + FileName = file.FileName, + FileSize = file.FileSize, + FileVersion = 0, + MimeType = file.MimeType, + PixelWidth = image.PixelWidth, + PixelHeight = image.PixelHeight + }) + ); + } + + [Fact] + public async Task Update_should_create_events() + { + var command = new UpdateAsset { File = file, ImageInfo = image }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); + + result.ShouldBeEquaivalent(new AssetSavedResult(1, 1)); + + Assert.Equal(1, sut.Snapshot.FileVersion); + + LastEvents + .ShouldHaveSameEvents( + CreateAssetEvent(new AssetUpdated + { + IsImage = true, + FileSize = file.FileSize, + FileVersion = 1, + MimeType = file.MimeType, + PixelWidth = image.PixelWidth, + PixelHeight = image.PixelHeight + }) + ); + } + + [Fact] + public async Task Rename_should_create_events() + { + var command = new RenameAsset { FileName = "my-new-image.png" }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); + + Assert.Equal("my-new-image.png", sut.Snapshot.FileName); + + LastEvents + .ShouldHaveSameEvents( + CreateAssetEvent(new AssetRenamed { FileName = "my-new-image.png" }) + ); + } + + [Fact] + public async Task Delete_should_create_events_with_total_file_size() + { + var command = new DeleteAsset(); + + await ExecuteCreateAsync(); + await ExecuteUpdateAsync(); + + var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.True(sut.Snapshot.IsDeleted); + + LastEvents + .ShouldHaveSameEvents( + CreateAssetEvent(new AssetDeleted { DeletedSize = 2048 }) + ); + } + + private Task ExecuteCreateAsync() + { + return sut.ExecuteAsync(J(CreateAssetCommand(new CreateAsset { File = file }))); + } + + private Task ExecuteUpdateAsync() + { + return sut.ExecuteAsync(J(CreateAssetCommand(new UpdateAsset { File = file }))); + } + + private Task ExecuteDeleteAsync() + { + return sut.ExecuteAsync(J(CreateAssetCommand(new DeleteAsset()))); + } + + protected T CreateAssetEvent(T @event) where T : AssetEvent + { + @event.AssetId = assetId; + + return CreateEvent(@event); + } + + protected T CreateAssetCommand(T command) where T : AssetCommand + { + command.AssetId = assetId; + + return CreateCommand(command); + } + } +} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs index aa1c9be31..71dd84b95 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs @@ -24,7 +24,7 @@ using Xunit; namespace Squidex.Domain.Apps.Entities.Rules { - public class RuleDomainObjectTests : HandlerTestBase + public class RuleGrainTests : HandlerTestBase { private readonly IAppProvider appProvider = A.Fake(); private readonly Guid ruleId = Guid.NewGuid(); @@ -43,7 +43,7 @@ namespace Squidex.Domain.Apps.Entities.Rules get { return ruleId; } } - public RuleDomainObjectTests() + public RuleGrainTests() { sut = new MyRuleGrain(Store, appProvider, Identity, Runtime); sut.OnActivateAsync().Wait(); @@ -52,23 +52,20 @@ namespace Squidex.Domain.Apps.Entities.Rules [Fact] public async Task Command_should_throw_exception_if_rule_is_deleted() { - await CreateAsync(); - await DeleteAsync(); + await ExecuteCreateAsync(); + await ExecuteDeleteAsync(); - await Assert.ThrowsAsync(() => - { - return sut.ExecuteAsync(J(CreateRuleCommand(MakeUpdateCommand()))); - }); + await Assert.ThrowsAsync(ExecuteDisableAsync); } [Fact] - public async Task Create_should_create_events() + public async Task Create_should_create_events_and_update_state() { var command = MakeCreateCommand(); var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - Assert.True(result.Value is EntityCreatedResult); + result.ShouldBeEquaivalent(EntityCreatedResult.Create(Id, 0)); Assert.Equal(AppId, sut.Snapshot.AppId.Id); @@ -82,25 +79,15 @@ namespace Squidex.Domain.Apps.Entities.Rules } [Fact] - public async Task Update_should_handle_command() - { - await sut.ExecuteAsync(J(CreateRuleCommand(MakeCreateCommand()))); - - var result = await sut.ExecuteAsync(J(CreateRuleCommand(MakeUpdateCommand()))); - - Assert.True(result.Value is EntitySavedResult); - } - - [Fact] - public async Task Update_should_create_events() + public async Task Update_should_create_events_and_update_state() { var command = MakeUpdateCommand(); - await CreateAsync(); + await ExecuteCreateAsync(); var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - Assert.True(result.Value is EntitySavedResult); + result.ShouldBeEquaivalent(new EntitySavedResult(1)); Assert.Same(command.Trigger, sut.Snapshot.RuleDef.Trigger); Assert.Same(command.Action, sut.Snapshot.RuleDef.Action); @@ -119,14 +106,16 @@ namespace Squidex.Domain.Apps.Entities.Rules } [Fact] - public async Task Enable_should_create_events() + public async Task Enable_should_create_events_and_update_state() { - await CreateAsync(); - await sut.ExecuteAsync(J(CreateRuleCommand(new DisableRule()))); + var command = new EnableRule(); - var result = await sut.ExecuteAsync(J(CreateRuleCommand(new EnableRule()))); + await ExecuteCreateAsync(); + await ExecuteDisableAsync(); - Assert.True(result.Value is EntitySavedResult); + var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); Assert.True(sut.Snapshot.RuleDef.IsEnabled); @@ -137,13 +126,15 @@ namespace Squidex.Domain.Apps.Entities.Rules } [Fact] - public async Task Disable_should_create_events() + public async Task Disable_should_create_events_and_update_state() { - await CreateAsync(); + var command = new DisableRule(); - var result = await sut.ExecuteAsync(J(CreateRuleCommand(new DisableRule()))); + await ExecuteCreateAsync(); - Assert.True(result.Value is EntitySavedResult); + var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); Assert.False(sut.Snapshot.RuleDef.IsEnabled); @@ -156,11 +147,13 @@ namespace Squidex.Domain.Apps.Entities.Rules [Fact] public async Task Delete_should_update_create_events() { - await CreateAsync(); + var command = new DeleteRule(); - var result = await sut.ExecuteAsync(J(CreateRuleCommand(new DeleteRule()))); + await ExecuteCreateAsync(); - Assert.True(result.Value is EntitySavedResult); + var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); Assert.True(sut.Snapshot.IsDeleted); @@ -170,12 +163,17 @@ namespace Squidex.Domain.Apps.Entities.Rules ); } - private Task CreateAsync() + private Task ExecuteCreateAsync() { return sut.ExecuteAsync(J(CreateRuleCommand(MakeCreateCommand()))); } - private Task DeleteAsync() + private Task ExecuteDisableAsync() + { + return sut.ExecuteAsync(J(CreateRuleCommand(new DisableRule()))); + } + + private Task ExecuteDeleteAsync() { return sut.ExecuteAsync(J(CreateRuleCommand(new DeleteRule()))); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs deleted file mode 100644 index 54a4dfcb5..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandMiddlewareTests.cs +++ /dev/null @@ -1,280 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.Collections.Generic; -//using System.Threading.Tasks; -//using FakeItEasy; -//using Squidex.Domain.Apps.Core.Schemas; -//using Squidex.Domain.Apps.Entities.Schemas.Commands; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.Commands; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Schemas -//{ -// public class SchemaCommandMiddlewareTests : HandlerTestBase -// { -// private readonly IAppProvider appProvider = A.Fake(); -// private readonly SchemaCommandMiddleware sut; -// private readonly SchemaDomainObject schema; -// private readonly FieldRegistry registry = new FieldRegistry(new TypeNameRegistry()); -// private readonly string fieldName = "age"; - -// protected override Guid Id -// { -// get { return SchemaId; } -// } - -// public SchemaCommandMiddlewareTests() -// { -// schema = new SchemaDomainObject(registry); - -// sut = new SchemaCommandMiddleware(Handler, appProvider); - -// A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)) -// .Returns((ISchemaEntity)null); -// } - -// [Fact] -// public async Task Create_should_create_schema_domain_object() -// { -// var context = CreateContextForCommand(new CreateSchema { Name = SchemaName, SchemaId = SchemaId }); - -// await TestCreate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(SchemaId, context.Result>().IdOrValue); - -// A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)).MustHaveHappened(); -// } - -// [Fact] -// public async Task UpdateSchema_should_update_domain_object() -// { -// CreateSchema(); - -// var context = CreateContextForCommand(new UpdateSchema { Properties = new SchemaProperties() }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task ReorderSchema_should_update_domain_object() -// { -// CreateSchema(); - -// var context = CreateContextForCommand(new ReorderFields { FieldIds = new List() }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task PublishSchema_should_update_domain_object() -// { -// CreateSchema(); - -// var context = CreateContextForCommand(new PublishSchema()); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task UnpublishSchema_should_update_domain_object() -// { -// CreateSchema(); -// PublishSchema(); - -// var context = CreateContextForCommand(new UnpublishSchema()); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task ConfigureScripts_should_update_domain_object() -// { -// CreateSchema(); - -// var context = CreateContextForCommand(new ConfigureScripts()); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task DeleteSchema_should_update_domain_object() -// { -// CreateSchema(); - -// var context = CreateContextForCommand(new DeleteSchema()); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task Add_should_update_domain_object() -// { -// CreateSchema(); - -// var context = CreateContextForCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(1, context.Result>().IdOrValue); -// } - -// [Fact] -// public async Task UpdateField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// var context = CreateContextForCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task LockField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// var context = CreateContextForCommand(new LockField { FieldId = 1 }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task HideField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// var context = CreateContextForCommand(new HideField { FieldId = 1 }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task ShowField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// HideField(); - -// var context = CreateContextForCommand(new ShowField { FieldId = 1 }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task DisableField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// var context = CreateContextForCommand(new DisableField { FieldId = 1 }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task EnableField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// DisableField(); - -// var context = CreateContextForCommand(new EnableField { FieldId = 1 }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task DeleteField_should_update_domain_object() -// { -// CreateSchema(); -// CreateField(); - -// var context = CreateContextForCommand(new DeleteField { FieldId = 1 }); - -// await TestUpdate(schema, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// private void CreateSchema() -// { -// schema.Create(CreateCommand(new CreateSchema { Name = SchemaName })); -// } - -// private void PublishSchema() -// { -// schema.Publish(CreateCommand(new PublishSchema())); -// } - -// private void CreateField() -// { -// schema.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); -// } - -// private void HideField() -// { -// schema.HideField(CreateCommand(new HideField { FieldId = 1 })); -// } - -// private void DisableField() -// { -// schema.DisableField(CreateCommand(new DisableField { FieldId = 1 })); -// } -// } -//} \ No newline at end of file diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs deleted file mode 100644 index d4ffa9186..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaDomainObjectTests.cs +++ /dev/null @@ -1,665 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using FakeItEasy; -//using Squidex.Domain.Apps.Core.Schemas; -//using Squidex.Domain.Apps.Entities.Schemas.Commands; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Domain.Apps.Events.Schemas; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.States; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Schemas -//{ -// public class SchemaDomainObjectTests : HandlerTestBase -// { -// private readonly string fieldName = "age"; -// private readonly NamedId fieldId; -// private readonly SchemaDomainObject sut; - -// protected override Guid Id -// { -// get { return SchemaId; } -// } - -// public SchemaDomainObjectTests() -// { -// fieldId = new NamedId(1, fieldName); - -// var fieldRegistry = new FieldRegistry(new TypeNameRegistry()); - -// sut = new SchemaDomainObject(fieldRegistry); -// sut.ActivateAsync(Id, A.Fake>()); -// } - -// [Fact] -// public void Create_should_throw_exception_if_created() -// { -// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); - -// Assert.Throws(() => -// { -// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); -// }); -// } - -// [Fact] -// public void Create_should_create_schema_and_create_events() -// { -// var properties = new SchemaProperties(); - -// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName, SchemaId = SchemaId, Properties = properties })); - -// Assert.Equal(AppId, sut.Snapshot.AppId.Id); - -// Assert.Equal(SchemaName, sut.Snapshot.Name); -// Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new SchemaCreated { Name = SchemaName, Properties = properties }) -// ); -// } - -// [Fact] -// public void Create_should_create_schema_with_initial_fields() -// { -// var properties = new SchemaProperties(); - -// var fields = new List -// { -// new CreateSchemaField { Name = "field1", Properties = ValidProperties() }, -// new CreateSchemaField { Name = "field2", Properties = ValidProperties() } -// }; - -// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName, Properties = properties, Fields = fields })); - -// var @event = (SchemaCreated)sut.GetUncomittedEvents().Single().Payload; - -// Assert.Equal(AppId, sut.Snapshot.AppId.Id); -// Assert.Equal(SchemaName, sut.Snapshot.Name); -// Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); - -// Assert.Equal(2, @event.Fields.Count); -// } - -// [Fact] -// public void Update_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Update(CreateCommand(new UpdateSchema { Properties = new SchemaProperties() })); -// }); -// } - -// [Fact] -// public void Update_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.Update(CreateCommand(new UpdateSchema { Properties = new SchemaProperties() })); -// }); -// } - -// [Fact] -// public void Update_should_refresh_properties_and_create_events() -// { -// var properties = new SchemaProperties(); - -// CreateSchema(); - -// sut.Update(CreateCommand(new UpdateSchema { Properties = properties })); - -// Assert.Equal(properties, sut.Snapshot.SchemaDef.Properties); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new SchemaUpdated { Properties = properties }) -// ); -// } - -// [Fact] -// public void ConfigureScripts_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.ConfigureScripts(CreateCommand(new ConfigureScripts())); -// }); -// } - -// [Fact] -// public void ConfigureScripts_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.ConfigureScripts(CreateCommand(new ConfigureScripts())); -// }); -// } - -// [Fact] -// public void ConfigureScripts_should_create_events() -// { -// CreateSchema(); - -// sut.ConfigureScripts(CreateCommand(new ConfigureScripts -// { -// ScriptQuery = "", -// ScriptCreate = "", -// ScriptUpdate = "", -// ScriptDelete = "", -// ScriptChange = "" -// })); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new ScriptsConfigured -// { -// ScriptQuery = "", -// ScriptCreate = "", -// ScriptUpdate = "", -// ScriptDelete = "", -// ScriptChange = "" -// }) -// ); -// } - -// [Fact] -// public void Reorder_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Reorder(CreateCommand(new ReorderFields { FieldIds = new List() })); -// }); -// } - -// [Fact] -// public void Reorder_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.Reorder(CreateCommand(new ReorderFields { FieldIds = new List() })); -// }); -// } - -// [Fact] -// public void Reorder_should_refresh_properties_and_create_events() -// { -// var fieldIds = new List { 1, 2 }; - -// CreateSchema(); - -// sut.Add(CreateCommand(new AddField { Name = "field1", Properties = ValidProperties() })); -// sut.Add(CreateCommand(new AddField { Name = "field2", Properties = ValidProperties() })); - -// sut.ClearUncommittedEvents(); - -// sut.Reorder(CreateCommand(new ReorderFields { FieldIds = fieldIds })); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new SchemaFieldsReordered { FieldIds = fieldIds }) -// ); -// } - -// [Fact] -// public void Publish_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Publish(CreateCommand(new PublishSchema())); -// }); -// } - -// [Fact] -// public void Publish_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.Publish(CreateCommand(new PublishSchema())); -// }); -// } - -// [Fact] -// public void Publish_should_refresh_properties_and_create_events() -// { -// CreateSchema(); - -// sut.Publish(CreateCommand(new PublishSchema())); - -// Assert.True(sut.Snapshot.SchemaDef.IsPublished); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new SchemaPublished()) -// ); -// } - -// [Fact] -// public void Unpublish_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Unpublish(CreateCommand(new UnpublishSchema())); -// }); -// } - -// [Fact] -// public void Unpublish_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.Unpublish(CreateCommand(new UnpublishSchema())); -// }); -// } - -// [Fact] -// public void Unpublish_should_refresh_properties_and_create_events() -// { -// CreateSchema(); -// PublishSchema(); - -// sut.Unpublish(CreateCommand(new UnpublishSchema())); - -// Assert.False(sut.Snapshot.SchemaDef.IsPublished); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new SchemaUnpublished()) -// ); -// } - -// [Fact] -// public void Delete_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Delete(CreateCommand(new DeleteSchema())); -// }); -// } - -// [Fact] -// public void Delete_should_throw_exception_if_already_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.Delete(CreateCommand(new DeleteSchema())); -// }); -// } - -// [Fact] -// public void Delete_should_refresh_properties_and_create_events() -// { -// CreateSchema(); - -// sut.Delete(CreateCommand(new DeleteSchema())); - -// Assert.True(sut.Snapshot.IsDeleted); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new SchemaDeleted()) -// ); -// } - -// [Fact] -// public void AddField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = ValidProperties() })); -// }); -// } - -// [Fact] -// public void AddField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); -// }); -// } - -// [Fact] -// public void Add_should_update_schema_and_create_events() -// { -// var properties = new NumberFieldProperties(); - -// CreateSchema(); - -// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = properties })); - -// Assert.Equal(properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new FieldAdded { Name = fieldName, FieldId = fieldId, Properties = properties }) -// ); -// } - -// [Fact] -// public void UpdateField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() })); -// }); -// } - -// [Fact] -// public void UpdateField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = new NumberFieldProperties() })); -// }); -// } - -// [Fact] -// public void UpdateField_should_update_schema_and_create_events() -// { -// var properties = new NumberFieldProperties(); - -// CreateSchema(); -// CreateField(); - -// sut.UpdateField(CreateCommand(new UpdateField { FieldId = 1, Properties = properties })); - -// Assert.Equal(properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new FieldUpdated { FieldId = fieldId, Properties = properties }) -// ); -// } - -// [Fact] -// public void LockField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.LockField(CreateCommand(new LockField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void LockField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.LockField(CreateCommand(new LockField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void LockField_should_update_schema_and_create_events() -// { -// CreateSchema(); -// CreateField(); - -// sut.LockField(CreateCommand(new LockField { FieldId = 1 })); - -// Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new FieldLocked { FieldId = fieldId }) -// ); -// } - -// [Fact] -// public void HideField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void HideField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void HideField_should_update_schema_and_create_events() -// { -// CreateSchema(); -// CreateField(); - -// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); - -// Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new FieldHidden { FieldId = fieldId }) -// ); -// } - -// [Fact] -// public void ShowField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void ShowField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void ShowField_should_update_schema_and_create_events() -// { -// CreateSchema(); -// CreateField(); - -// sut.HideField(CreateCommand(new HideField { FieldId = 1 })); -// sut.ShowField(CreateCommand(new ShowField { FieldId = 1 })); - -// Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); - -// sut.GetUncomittedEvents().Skip(1) -// .ShouldHaveSameEvents( -// CreateEvent(new FieldShown { FieldId = fieldId }) -// ); -// } - -// [Fact] -// public void DisableField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void DisableField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void DisableField_should_update_schema_and_create_events() -// { -// CreateSchema(); -// CreateField(); - -// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); - -// Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new FieldDisabled { FieldId = fieldId }) -// ); -// } - -// [Fact] -// public void EnableField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void EnableField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void EnableField_should_update_schema_and_create_events() -// { -// CreateSchema(); -// CreateField(); - -// sut.DisableField(CreateCommand(new DisableField { FieldId = 1 })); -// sut.EnableField(CreateCommand(new EnableField { FieldId = 1 })); - -// Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); - -// sut.GetUncomittedEvents().Skip(1) -// .ShouldHaveSameEvents( -// CreateEvent(new FieldEnabled { FieldId = fieldId }) -// ); -// } - -// [Fact] -// public void DeleteField_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void DeleteField_should_throw_exception_if_schema_is_deleted() -// { -// CreateSchema(); -// DeleteSchema(); - -// Assert.Throws(() => -// { -// sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); -// }); -// } - -// [Fact] -// public void DeleteField_should_update_schema_and_create_events() -// { -// CreateSchema(); -// CreateField(); - -// sut.DeleteField(CreateCommand(new DeleteField { FieldId = 1 })); - -// Assert.False(sut.Snapshot.SchemaDef.FieldsById.ContainsKey(1)); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new FieldDeleted { FieldId = fieldId }) -// ); -// } - -// private void CreateField() -// { -// sut.Add(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); -// sut.ClearUncommittedEvents(); -// } - -// private void CreateSchema() -// { -// sut.Create(CreateCommand(new CreateSchema { Name = SchemaName })); -// sut.ClearUncommittedEvents(); -// } - -// private void PublishSchema() -// { -// sut.Publish(CreateCommand(new PublishSchema())); -// sut.ClearUncommittedEvents(); -// } - -// private void DeleteSchema() -// { -// sut.Delete(CreateCommand(new DeleteSchema())); -// sut.ClearUncommittedEvents(); -// } - -// private static StringFieldProperties ValidProperties() -// { -// return new StringFieldProperties { MinLength = 10, MaxLength = 20 }; -// } - -// private static StringFieldProperties InvalidProperties() -// { -// return new StringFieldProperties { MinLength = 20, MaxLength = 10 }; -// } -// } -//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs new file mode 100644 index 000000000..6ccc86c71 --- /dev/null +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs @@ -0,0 +1,439 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using FakeItEasy; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Domain.Apps.Core.Schemas; +using Squidex.Domain.Apps.Entities.Schemas.Commands; +using Squidex.Domain.Apps.Entities.Schemas.State; +using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Domain.Apps.Events.Schemas; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.States; +using Xunit; + +namespace Squidex.Domain.Apps.Entities.Schemas +{ + public class SchemaGrainTests : HandlerTestBase + { + private readonly IAppProvider appProvider = A.Fake(); + private readonly FieldRegistry registry = new FieldRegistry(new TypeNameRegistry()); + private readonly string fieldName = "age"; + private readonly NamedId fieldId; + private readonly SchemaGrain sut; + + public sealed class MySchemaGrain : SchemaGrain + { + public MySchemaGrain(IStore store, IAppProvider appProvider, FieldRegistry registry, IGrainIdentity identity, IGrainRuntime runtime) + : base(store, appProvider, registry, identity, runtime) + { + } + } + + protected override Guid Id + { + get { return SchemaId; } + } + + public SchemaGrainTests() + { + A.CallTo(() => appProvider.GetSchemaAsync(AppId, SchemaName)) + .Returns((ISchemaEntity)null); + + fieldId = new NamedId(1, fieldName); + + sut = new MySchemaGrain(Store, appProvider, registry, Identity, Runtime); + sut.OnActivateAsync().Wait(); + } + + [Fact] + public async Task Command_should_throw_exception_if_rule_is_deleted() + { + await ExecuteCreateAsync(); + await ExecuteDeleteAsync(); + + await Assert.ThrowsAsync(ExecutePublishAsync); + } + + [Fact] + public async Task Create_should_create_schema_and_create_events() + { + var properties = new SchemaProperties(); + + var command = new CreateSchema { Name = SchemaName, SchemaId = SchemaId, Properties = properties }; + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(EntityCreatedResult.Create(Id, 0)); + + Assert.Equal(AppId, sut.Snapshot.AppId.Id); + + Assert.Equal(SchemaName, sut.Snapshot.Name); + Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new SchemaCreated { Name = SchemaName, Properties = properties }) + ); + } + + [Fact] + public async Task Create_should_create_schema_with_initial_fields() + { + var properties = new SchemaProperties(); + + var fields = new List + { + new CreateSchemaField { Name = "field1", Properties = ValidProperties() }, + new CreateSchemaField { Name = "field2", Properties = ValidProperties() } + }; + + var command = new CreateSchema { Name = SchemaName, SchemaId = SchemaId, Properties = properties, Fields = fields }; + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(EntityCreatedResult.Create(Id, 0)); + + var @event = (SchemaCreated)LastEvents.Single().Payload; + + Assert.Equal(AppId, sut.Snapshot.AppId.Id); + Assert.Equal(SchemaName, sut.Snapshot.Name); + Assert.Equal(SchemaName, sut.Snapshot.SchemaDef.Name); + + Assert.Equal(2, @event.Fields.Count); + } + + [Fact] + public async Task Update_should_create_events_and_update_state() + { + var command = new UpdateSchema { Properties = new SchemaProperties() }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); + + Assert.Equal(command.Properties, sut.Snapshot.SchemaDef.Properties); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new SchemaUpdated { Properties = command.Properties }) + ); + } + + [Fact] + public async Task ConfigureScripts_should_create_events() + { + var command = new ConfigureScripts + { + ScriptQuery = "", + ScriptCreate = "", + ScriptUpdate = "", + ScriptDelete = "", + ScriptChange = "" + }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new ScriptsConfigured + { + ScriptQuery = "", + ScriptCreate = "", + ScriptUpdate = "", + ScriptDelete = "", + ScriptChange = "" + }) + ); + } + + [Fact] + public async Task Reorder_should_create_events_and_update_state() + { + var command = new ReorderFields { FieldIds = new List { 1, 2 } }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync("field1"); + await ExecuteAddFieldAsync("field2"); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(3)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new SchemaFieldsReordered { FieldIds = command.FieldIds }) + ); + } + + [Fact] + public async Task Publish_should_create_events_and_update_state() + { + var command = new PublishSchema(); + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); + + Assert.True(sut.Snapshot.SchemaDef.IsPublished); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new SchemaPublished()) + ); + } + + [Fact] + public async Task Unpublish_should_create_events_and_update_state() + { + var command = new UnpublishSchema(); + + await ExecuteCreateAsync(); + await ExecutePublishAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.False(sut.Snapshot.SchemaDef.IsPublished); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new SchemaUnpublished()) + ); + } + + [Fact] + public async Task Delete_should_create_events_and_update_state() + { + var command = new DeleteSchema(); + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(1)); + + Assert.True(sut.Snapshot.IsDeleted); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new SchemaDeleted()) + ); + } + + [Fact] + public async Task Add_should_create_events_and_update_state() + { + var command = new AddField { Name = fieldName, Properties = ValidProperties() }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(EntityCreatedResult.Create(1, 1)); + + Assert.Equal(command.Properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldAdded { Name = fieldName, FieldId = fieldId, Properties = command.Properties }) + ); + } + + [Fact] + public async Task UpdateField_should_create_events_and_update_state() + { + var command = new UpdateField { FieldId = 1, Properties = new StringFieldProperties() }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.Equal(command.Properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldUpdated { FieldId = fieldId, Properties = command.Properties }) + ); + } + + [Fact] + public async Task LockField_should_create_events_and_update_state() + { + var command = new LockField { FieldId = 1 }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldLocked { FieldId = fieldId }) + ); + } + + [Fact] + public async Task HideField_should_create_events_and_update_state() + { + var command = new HideField { FieldId = 1 }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldHidden { FieldId = fieldId }) + ); + } + + [Fact] + public async Task ShowField_should_create_events_and_update_state() + { + var command = new ShowField { FieldId = 1 }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + await ExecuteHideFieldAsync(1); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(3)); + + Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldShown { FieldId = fieldId }) + ); + } + + [Fact] + public async Task DisableField_should_create_events_and_update_state() + { + var command = new DisableField { FieldId = 1 }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldDisabled { FieldId = fieldId }) + ); + } + + [Fact] + public async Task EnableField_should_create_events_and_update_state() + { + var command = new EnableField { FieldId = 1 }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + await ExecuteDisableFieldAsync(1); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(3)); + + Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldEnabled { FieldId = fieldId }) + ); + } + + [Fact] + public async Task DeleteField_should_create_events_and_update_state() + { + var command = new DeleteField { FieldId = 1 }; + + await ExecuteCreateAsync(); + await ExecuteAddFieldAsync(fieldName); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquaivalent(new EntitySavedResult(2)); + + Assert.False(sut.Snapshot.SchemaDef.FieldsById.ContainsKey(1)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new FieldDeleted { FieldId = fieldId }) + ); + } + + private Task ExecuteCreateAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new CreateSchema { Name = SchemaName }))); + } + + private Task ExecuteAddFieldAsync(string name) + { + return sut.ExecuteAsync(J(CreateCommand(new AddField { Properties = ValidProperties(), Name = name }))); + } + + private Task ExecuteHideFieldAsync(long id) + { + return sut.ExecuteAsync(J(CreateCommand(new HideField { FieldId = id }))); + } + + private Task ExecuteDisableFieldAsync(long id) + { + return sut.ExecuteAsync(J(CreateCommand(new DisableField { FieldId = id }))); + } + + private Task ExecutePublishAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new PublishSchema()))); + } + + private Task ExecuteDeleteAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new DeleteSchema()))); + } + + private static StringFieldProperties ValidProperties() + { + return new StringFieldProperties { MinLength = 10, MaxLength = 20 }; + } + } +} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs b/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs index f3251657d..c573d693a 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Linq; using FluentAssertions; using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.Orleans; namespace Squidex.Domain.Apps.Entities.TestHelpers { @@ -40,5 +41,10 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers { lhs.Should().BeOfType(rhs.GetType()); } + + public static void ShouldBeEquaivalent(this J result, object value) + { + result.Value.ShouldBeEquivalentTo(value, o => o.IncludingAllDeclaredProperties()); + } } } From 21626eab3d6d25ac7183a941f03dc59c37b752d5 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 11:23:23 +0100 Subject: [PATCH 09/28] App tests. --- .../Apps/AppGrain.cs | 21 +- .../NoopAppPlanBillingManager.cs | 2 +- .../Apps/Services/PlanChangeAsyncResult.cs | 4 +- .../Apps/Services/PlanChangedResult.cs | 5 - .../Grains/IEventConsumerGrain.cs | 1 - .../Apps/AppCommandMiddlewareTests.cs | 291 ------------- .../Apps/AppDomainObjectTests.cs | 399 ----------------- .../Apps/AppGrainTests.cs | 407 ++++++++++++++++++ .../NoopAppPlanBillingManagerTests.cs | 2 +- .../Assets/AssetGrainTests.cs | 9 +- .../Rules/RuleGrainTests.cs | 10 +- .../Schemas/SchemaGrainTests.cs | 32 +- .../TestHelpers/AssertHelper.cs | 2 +- 13 files changed, 454 insertions(+), 731 deletions(-) delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs create mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs rename tests/Squidex.Domain.Apps.Entities.Tests/Apps/{ => Billing}/NoopAppPlanBillingManagerTests.cs (95%) diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs index ae1ad9337..118b7f545 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs @@ -8,6 +8,8 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Guards; @@ -25,7 +27,7 @@ using Squidex.Shared.Users; namespace Squidex.Domain.Apps.Entities.Apps { - public sealed class AppGrain : DomainObjectGrain, IAppGrain + public class AppGrain : DomainObjectGrain, IAppGrain { private readonly InitialPatterns initialPatterns; private readonly IAppProvider appProvider; @@ -34,13 +36,26 @@ namespace Squidex.Domain.Apps.Entities.Apps private readonly IUserResolver userResolver; public AppGrain( + InitialPatterns initialPatterns, + IStore store, + IAppProvider appProvider, + IAppPlansProvider appPlansProvider, + IAppPlanBillingManager appPlansBillingManager, + IUserResolver userResolver) + : this(initialPatterns, store, appProvider, appPlansProvider, appPlansBillingManager, userResolver, null, null) + { + } + + protected AppGrain( + InitialPatterns initialPatterns, IStore store, IAppProvider appProvider, IAppPlansProvider appPlansProvider, IAppPlanBillingManager appPlansBillingManager, IUserResolver userResolver, - InitialPatterns initialPatterns) - : base(store) + IGrainIdentity identity, + IGrainRuntime runtime) + : base(store, identity, runtime) { Guard.NotNull(initialPatterns, nameof(initialPatterns)); Guard.NotNull(appProvider, nameof(appProvider)); diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/NoopAppPlanBillingManager.cs b/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/NoopAppPlanBillingManager.cs index 3d020f3f9..2d82d145b 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/NoopAppPlanBillingManager.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/NoopAppPlanBillingManager.cs @@ -19,7 +19,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations public Task ChangePlanAsync(string userId, Guid appId, string appName, string planId) { - return Task.FromResult(PlanChangedResult.Instance); + return Task.FromResult(new PlanChangedResult()); } public Task GetPortalLinkAsync(string userId) diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangeAsyncResult.cs b/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangeAsyncResult.cs index 4b71408cb..a2f252424 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangeAsyncResult.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangeAsyncResult.cs @@ -9,9 +9,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services { public sealed class PlanChangeAsyncResult : IChangePlanResult { - public static readonly PlanChangeAsyncResult Instance = new PlanChangeAsyncResult(); - - private PlanChangeAsyncResult() + public PlanChangeAsyncResult() { } } diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangedResult.cs b/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangedResult.cs index dc424c993..5361af735 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangedResult.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangedResult.cs @@ -9,10 +9,5 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services { public sealed class PlanChangedResult : IChangePlanResult { - public static readonly PlanChangedResult Instance = new PlanChangedResult(); - - private PlanChangedResult() - { - } } } diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs index ae94d398a..58b7bf2fb 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/IEventConsumerGrain.cs @@ -7,7 +7,6 @@ using System; using System.Threading.Tasks; -using Orleans; using Orleans.Concurrency; using Squidex.Infrastructure.Orleans; diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs deleted file mode 100644 index 655be3528..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppCommandMiddlewareTests.cs +++ /dev/null @@ -1,291 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.Threading.Tasks; -//using FakeItEasy; -//using Squidex.Domain.Apps.Entities.Apps.Commands; -//using Squidex.Domain.Apps.Entities.Apps.Services; -//using Squidex.Domain.Apps.Entities.Apps.Services.Implementations; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.Commands; -//using Squidex.Infrastructure.States; -//using Squidex.Shared.Users; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Apps -//{ -// public class AppCommandMiddlewareTests : HandlerTestBase -// { -// private readonly IAppProvider appProvider = A.Fake(); -// private readonly IAppPlansProvider appPlansProvider = A.Fake(); -// private readonly IAppPlanBillingManager appPlansBillingManager = A.Fake(); -// private readonly IUserResolver userResolver = A.Fake(); -// private readonly Language language = Language.DE; -// private readonly string contributorId = Guid.NewGuid().ToString(); -// private readonly string clientName = "client"; -// private readonly Guid patternId = Guid.NewGuid(); -// private readonly AppDomainObject app = new AppDomainObject(new InitialPatterns()); -// private readonly AppCommandMiddleware sut; - -// protected override Guid Id -// { -// get { return AppId; } -// } - -// public AppCommandMiddlewareTests() -// { -// A.CallTo(() => appProvider.GetAppAsync(AppName)) -// .Returns((IAppEntity)null); - -// A.CallTo(() => userResolver.FindByIdAsync(contributorId)) -// .Returns(A.Fake()); - -// sut = new AppCommandMiddleware(Handler, appProvider, appPlansProvider, appPlansBillingManager, userResolver); - -// app.ActivateAsync(Id, A.Fake>()); -// } - -// [Fact] -// public async Task Create_should_create_domain_object() -// { -// var context = CreateContextForCommand(new CreateApp { Name = AppName, AppId = AppId }); - -// await TestCreate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(AppId, context.Result>().IdOrValue); -// } - -// [Fact] -// public async Task AssignContributor_should_update_domain_object_if_user_found() -// { -// A.CallTo(() => appPlansProvider.GetPlan(null)) -// .Returns(new ConfigAppLimitsPlan { MaxContributors = -1 }); - -// CreateApp(); - -// var context = CreateContextForCommand(new AssignContributor { ContributorId = contributorId }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task RemoveContributor_should_update_domain_object() -// { -// CreateApp() -// .AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId })); - -// var context = CreateContextForCommand(new RemoveContributor { ContributorId = contributorId }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task AttachClient_should_update_domain_object() -// { -// CreateApp(); - -// var context = CreateContextForCommand(new AttachClient { Id = clientName }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task RenameClient_should_update_domain_object() -// { -// CreateApp() -// .AttachClient(CreateCommand(new AttachClient { Id = clientName })); - -// var context = CreateContextForCommand(new UpdateClient { Id = clientName, Name = "New Name" }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task RevokeClient_should_update_domain_object() -// { -// CreateApp() -// .AttachClient(CreateCommand(new AttachClient { Id = clientName })); - -// var context = CreateContextForCommand(new RevokeClient { Id = clientName }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task ChangePlan_should_update_domain_object() -// { -// A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) -// .Returns(true); - -// CreateApp(); - -// var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan" }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) -// .MustHaveHappened(); -// } - -// [Fact] -// public async Task ChangePlan_should_not_make_update_for_redirect_result() -// { -// A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) -// .Returns(true); - -// A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) -// .Returns(CreateRedirectResult()); - -// CreateApp(); - -// var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan" }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Null(app.Snapshot.Plan); -// } - -// [Fact] -// public async Task ChangePlan_should_not_call_billing_manager_for_callback() -// { -// A.CallTo(() => appPlansProvider.IsConfiguredPlan("my-plan")) -// .Returns(true); - -// CreateApp(); - -// var context = CreateContextForCommand(new ChangePlan { PlanId = "my-plan", FromCallback = true }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, "my-plan")) -// .MustNotHaveHappened(); -// } - -// [Fact] -// public async Task AddLanguage_should_update_domain_object() -// { -// CreateApp(); - -// var context = CreateContextForCommand(new AddLanguage { Language = language }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task RemoveLanguage_should_update_domain_object() -// { -// CreateApp() -// .AddLanguage(CreateCommand(new AddLanguage { Language = language })); - -// var context = CreateContextForCommand(new RemoveLanguage { Language = language }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task UpdateLanguage_should_update_domain_object() -// { -// CreateApp() -// .AddLanguage(CreateCommand(new AddLanguage { Language = language })); - -// var context = CreateContextForCommand(new UpdateLanguage { Language = language }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task AddPattern_should_update_domain_object() -// { -// CreateApp(); - -// var context = CreateContextForCommand(new AddPattern { Name = "Any", Pattern = ".*" }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task UpdatePattern_should_update_domain() -// { -// CreateApp() -// .AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = "." })); - -// var context = CreateContextForCommand(new UpdatePattern { PatternId = patternId, Name = "Number", Pattern = "[0-9]" }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// [Fact] -// public async Task DeletePattern_should_update_domain_object() -// { -// CreateApp() -// .AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = "." })); - -// var context = CreateContextForCommand(new DeletePattern { PatternId = patternId }); - -// await TestUpdate(app, async _ => -// { -// await sut.HandleAsync(context); -// }); -// } - -// private AppDomainObject CreateApp() -// { -// app.Create(CreateCommand(new CreateApp { AppId = AppId, Name = AppName })); - -// return app; -// } - -// private static Task CreateRedirectResult() -// { -// return Task.FromResult(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); -// } -// } -//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs deleted file mode 100644 index 7c93b7fe4..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppDomainObjectTests.cs +++ /dev/null @@ -1,399 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using FakeItEasy; -//using Squidex.Domain.Apps.Core.Apps; -//using Squidex.Domain.Apps.Entities.Apps.Commands; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Domain.Apps.Events.Apps; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.States; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Apps -//{ -// public class AppDomainObjectTests : HandlerTestBase -// { -// private readonly string contributorId = Guid.NewGuid().ToString(); -// private readonly string clientId = "client"; -// private readonly string clientNewName = "My Client"; -// private readonly string planId = "premium"; -// private readonly Guid patternId = Guid.NewGuid(); -// private readonly AppDomainObject sut = new AppDomainObject(new InitialPatterns()); - -// protected override Guid Id -// { -// get { return AppId; } -// } - -// public AppDomainObjectTests() -// { -// sut.ActivateAsync(Id, A.Fake>()); -// } - -// [Fact] -// public void Create_should_throw_exception_if_created() -// { -// CreateApp(); - -// Assert.Throws(() => -// { -// sut.Create(CreateCommand(new CreateApp { Name = AppName })); -// }); -// } - -// [Fact] -// public void Create_should_specify_name_and_owner() -// { -// var id1 = Guid.NewGuid(); -// var id2 = Guid.NewGuid(); - -// var initialPatterns = new InitialPatterns -// { -// { id1, new AppPattern("Number", "[0-9]") }, -// { id2, new AppPattern("Numbers", "[0-9]*") } -// }; - -// var app = new AppDomainObject(initialPatterns); - -// app.Create(CreateCommand(new CreateApp { Name = AppName, Actor = User, AppId = AppId })); - -// Assert.Equal(AppName, app.Snapshot.Name); - -// app.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppCreated { Name = AppName }), -// CreateEvent(new AppContributorAssigned { ContributorId = User.Identifier, Permission = AppContributorPermission.Owner }), -// CreateEvent(new AppLanguageAdded { Language = Language.EN }), -// CreateEvent(new AppPatternAdded { PatternId = id1, Name = "Number", Pattern = "[0-9]" }), -// CreateEvent(new AppPatternAdded { PatternId = id2, Name = "Numbers", Pattern = "[0-9]*" }) -// ); -// } - -// [Fact] -// public void ChangePlan_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.ChangePlan(CreateCommand(new ChangePlan { PlanId = planId })); -// }); -// } - -// [Fact] -// public void ChangePlan_should_create_events() -// { -// CreateApp(); - -// sut.ChangePlan(CreateCommand(new ChangePlan { PlanId = planId })); - -// Assert.Equal(planId, sut.Snapshot.Plan.PlanId); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppPlanChanged { PlanId = planId }) -// ); -// } - -// [Fact] -// public void AssignContributor_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId })); -// }); -// } - -// [Fact] -// public void AssignContributor_should_create_events() -// { -// CreateApp(); - -// sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor })); - -// Assert.Equal(AppContributorPermission.Editor, sut.Snapshot.Contributors[contributorId]); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppContributorAssigned { ContributorId = contributorId, Permission = AppContributorPermission.Editor }) -// ); -// } - -// [Fact] -// public void RemoveContributor_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId })); -// }); -// } - -// [Fact] -// public void RemoveContributor_should_create_events_and_remove_contributor() -// { -// CreateApp(); - -// sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor })); -// sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId })); - -// Assert.False(sut.Snapshot.Contributors.ContainsKey(contributorId)); - -// sut.GetUncomittedEvents().Skip(1) -// .ShouldHaveSameEvents( -// CreateEvent(new AppContributorRemoved { ContributorId = contributorId }) -// ); -// } - -// [Fact] -// public void AttachClient_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.AttachClient(CreateCommand(new AttachClient { Id = clientId })); -// }); -// } - -// [Fact] -// public void AttachClient_should_create_events() -// { -// var command = new AttachClient { Id = clientId }; - -// CreateApp(); - -// sut.AttachClient(CreateCommand(command)); - -// Assert.True(sut.Snapshot.Clients.ContainsKey(clientId)); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppClientAttached { Id = clientId, Secret = command.Secret }) -// ); -// } - -// [Fact] -// public void RevokeClient_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.RevokeClient(CreateCommand(new RevokeClient { Id = "not-found" })); -// }); -// } - -// [Fact] -// public void RevokeClient_should_create_events() -// { -// CreateApp(); -// CreateClient(); - -// sut.RevokeClient(CreateCommand(new RevokeClient { Id = clientId })); - -// Assert.False(sut.Snapshot.Clients.ContainsKey(clientId)); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppClientRevoked { Id = clientId }) -// ); -// } - -// [Fact] -// public void UpdateClient_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.UpdateClient(CreateCommand(new UpdateClient { Id = "not-found", Name = clientNewName })); -// }); -// } - -// [Fact] -// public void UpdateClient_should_create_events() -// { -// CreateApp(); -// CreateClient(); - -// sut.UpdateClient(CreateCommand(new UpdateClient { Id = clientId, Name = clientNewName, Permission = AppClientPermission.Developer })); - -// Assert.Equal(clientNewName, sut.Snapshot.Clients[clientId].Name); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppClientRenamed { Id = clientId, Name = clientNewName }), -// CreateEvent(new AppClientUpdated { Id = clientId, Permission = AppClientPermission.Developer }) -// ); -// } - -// [Fact] -// public void AddLanguage_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.AddLanguage(CreateCommand(new AddLanguage { Language = Language.DE })); -// }); -// } - -// [Fact] -// public void AddLanguage_should_create_events() -// { -// CreateApp(); - -// sut.AddLanguage(CreateCommand(new AddLanguage { Language = Language.DE })); - -// Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppLanguageAdded { Language = Language.DE }) -// ); -// } - -// [Fact] -// public void RemoveLanguage_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.RemoveLanguage(CreateCommand(new RemoveLanguage { Language = Language.EN })); -// }); -// } - -// [Fact] -// public void RemoveLanguage_should_create_events() -// { -// CreateApp(); -// CreateLanguage(Language.DE); - -// sut.RemoveLanguage(CreateCommand(new RemoveLanguage { Language = Language.DE })); - -// Assert.False(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppLanguageRemoved { Language = Language.DE }) -// ); -// } - -// [Fact] -// public void UpdateLanguage_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.UpdateLanguage(CreateCommand(new UpdateLanguage { Language = Language.EN })); -// }); -// } - -// [Fact] -// public void UpdateLanguage_should_create_events() -// { -// CreateApp(); -// CreateLanguage(Language.DE); - -// sut.UpdateLanguage(CreateCommand(new UpdateLanguage { Language = Language.DE, Fallback = new List { Language.EN } })); - -// Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppLanguageUpdated { Language = Language.DE, Fallback = new List { Language.EN } }) -// ); -// } - -// [Fact] -// public void AddPattern_should_throw_exception_if_app_not_created() -// { -// Assert.Throws(() => sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = ".*" }))); -// } - -// [Fact] -// public void AddPattern_should_create_events() -// { -// CreateApp(); - -// sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" })); - -// Assert.Single(sut.Snapshot.Patterns); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppPatternAdded { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" }) -// ); -// } - -// [Fact] -// public void DeletePattern_should_throw_exception_if_app_not_created() -// { -// Assert.Throws(() => -// { -// sut.DeletePattern(CreateCommand(new DeletePattern -// { -// PatternId = Guid.NewGuid() -// })); -// }); -// } - -// [Fact] -// public void DeletePattern_should_create_events() -// { -// CreateApp(); -// CreatePattern(); - -// sut.DeletePattern(CreateCommand(new DeletePattern { PatternId = patternId })); - -// Assert.Empty(sut.Snapshot.Patterns); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppPatternDeleted { PatternId = patternId }) -// ); -// } - -// [Fact] -// public void UpdatePattern_should_throw_exception_if_app_not_created() -// { -// Assert.Throws(() => sut.UpdatePattern(CreateCommand(new UpdatePattern { PatternId = patternId, Name = "Any", Pattern = ".*" }))); -// } - -// [Fact] -// public void UpdatePattern_should_create_events() -// { -// CreateApp(); -// CreatePattern(); - -// sut.UpdatePattern(CreateCommand(new UpdatePattern { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" })); - -// Assert.Single(sut.Snapshot.Patterns); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateEvent(new AppPatternUpdated { PatternId = patternId, Name = "Any", Pattern = ".*", Message = "Msg" }) -// ); -// } - -// private void CreatePattern() -// { -// sut.AddPattern(CreateCommand(new AddPattern { PatternId = patternId, Name = "Name", Pattern = ".*" })); -// sut.ClearUncommittedEvents(); -// } - -// private void CreateApp() -// { -// sut.Create(CreateCommand(new CreateApp { Name = AppName })); -// sut.ClearUncommittedEvents(); -// } - -// private void CreateClient() -// { -// sut.AttachClient(CreateCommand(new AttachClient { Id = clientId })); -// sut.ClearUncommittedEvents(); -// } - -// private void CreateLanguage(Language language) -// { -// sut.AddLanguage(CreateCommand(new AddLanguage { Language = language })); -// sut.ClearUncommittedEvents(); -// } -// } -//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs new file mode 100644 index 000000000..55fd48746 --- /dev/null +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs @@ -0,0 +1,407 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using FakeItEasy; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Domain.Apps.Core.Apps; +using Squidex.Domain.Apps.Entities.Apps.Commands; +using Squidex.Domain.Apps.Entities.Apps.Services; +using Squidex.Domain.Apps.Entities.Apps.State; +using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Domain.Apps.Events.Apps; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.States; +using Squidex.Shared.Users; +using Xunit; + +namespace Squidex.Domain.Apps.Entities.Apps +{ + public class AppGrainTests : HandlerTestBase + { + private readonly IAppProvider appProvider = A.Fake(); + private readonly IAppPlansProvider appPlansProvider = A.Fake(); + private readonly IAppPlanBillingManager appPlansBillingManager = A.Fake(); + private readonly IUserResolver userResolver = A.Fake(); + private readonly string contributorId = Guid.NewGuid().ToString(); + private readonly string clientId = "client"; + private readonly string clientNewName = "My Client"; + private readonly string planId = "premium"; + private readonly AppGrain sut; + private readonly Guid patternId1 = Guid.NewGuid(); + private readonly Guid patternId2 = Guid.NewGuid(); + private readonly Guid patternId3 = Guid.NewGuid(); + private readonly InitialPatterns initialPatterns; + + public class MyAppGrain : AppGrain + { + public MyAppGrain( + InitialPatterns initialPatterns, + IStore store, + IAppProvider appProvider, + IAppPlansProvider appPlansProvider, + IAppPlanBillingManager appPlansBillingManager, + IUserResolver userResolver, + IGrainIdentity identity, + IGrainRuntime runtime) + : base(initialPatterns, store, appProvider, appPlansProvider, appPlansBillingManager, userResolver, identity, runtime) + { + } + } + + protected override Guid Id + { + get { return AppId; } + } + + public AppGrainTests() + { + A.CallTo(() => appProvider.GetAppAsync(AppName)) + .Returns((IAppEntity)null); + + A.CallTo(() => userResolver.FindByIdAsync(contributorId)) + .Returns(A.Fake()); + + initialPatterns = new InitialPatterns + { + { patternId1, new AppPattern("Number", "[0-9]") }, + { patternId2, new AppPattern("Numbers", "[0-9]*") } + }; + + sut = new MyAppGrain(initialPatterns, Store, appProvider, appPlansProvider, appPlansBillingManager, userResolver, Identity, Runtime); + sut.OnActivateAsync(); + } + + [Fact] + public async Task Create_should_create_events_and_update_state() + { + var command = new CreateApp { Name = AppName, Actor = User, AppId = AppId }; + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(EntityCreatedResult.Create(Id, 4)); + + Assert.Equal(AppName, sut.Snapshot.Name); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppCreated { Name = AppName }), + CreateEvent(new AppContributorAssigned { ContributorId = User.Identifier, Permission = AppContributorPermission.Owner }), + CreateEvent(new AppLanguageAdded { Language = Language.EN }), + CreateEvent(new AppPatternAdded { PatternId = patternId1, Name = "Number", Pattern = "[0-9]" }), + CreateEvent(new AppPatternAdded { PatternId = patternId2, Name = "Numbers", Pattern = "[0-9]*" }) + ); + } + + [Fact] + public async Task ChangePlan_should_create_events_and_update_state() + { + var command = new ChangePlan { PlanId = planId }; + + A.CallTo(() => appPlansProvider.IsConfiguredPlan(planId)) + .Returns(true); + + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId)) + .Returns(new PlanChangedResult()); + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + Assert.True(result.Value is PlanChangedResult); + + Assert.Equal(planId, sut.Snapshot.Plan.PlanId); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppPlanChanged { PlanId = planId }) + ); + } + + [Fact] + public async Task ChangePlan_should_not_make_update_for_redirect_result() + { + var command = new ChangePlan { PlanId = planId }; + + A.CallTo(() => appPlansProvider.IsConfiguredPlan(planId)) + .Returns(true); + + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId)) + .Returns(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); + + Assert.Null(sut.Snapshot.Plan); + } + + [Fact] + public async Task ChangePlan_should_not_call_billing_manager_for_callback() + { + var command = new ChangePlan { PlanId = planId, FromCallback = true }; + + A.CallTo(() => appPlansProvider.IsConfiguredPlan(planId)) + .Returns(true); + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(5)); + + A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId)) + .MustNotHaveHappened(); + } + + [Fact] + public async Task AssignContributor_should_create_events_and_update_state() + { + var command = new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(5)); + + Assert.Equal(AppContributorPermission.Editor, sut.Snapshot.Contributors[contributorId]); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppContributorAssigned { ContributorId = contributorId, Permission = AppContributorPermission.Editor }) + ); + } + + [Fact] + public async Task RemoveContributor_should_create_events_and_update_state() + { + var command = new RemoveContributor { ContributorId = contributorId }; + + await ExecuteCreateAsync(); + await ExecuteAssignContributorAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(6)); + + Assert.False(sut.Snapshot.Contributors.ContainsKey(contributorId)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppContributorRemoved { ContributorId = contributorId }) + ); + } + + [Fact] + public async Task AttachClient_should_create_events_and_update_state() + { + var command = new AttachClient { Id = clientId }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(5)); + + Assert.True(sut.Snapshot.Clients.ContainsKey(clientId)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppClientAttached { Id = clientId, Secret = command.Secret }) + ); + } + + [Fact] + public async Task RevokeClient_should_create_events_and_update_state() + { + var command = new RevokeClient { Id = clientId }; + + await ExecuteCreateAsync(); + await ExecuteAttachClientAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(6)); + + Assert.False(sut.Snapshot.Clients.ContainsKey(clientId)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppClientRevoked { Id = clientId }) + ); + } + + [Fact] + public async Task UpdateClient_should_create_events_and_update_state() + { + var command = new UpdateClient { Id = clientId, Name = clientNewName, Permission = AppClientPermission.Developer }; + + await ExecuteCreateAsync(); + await ExecuteAttachClientAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(7)); + + Assert.Equal(clientNewName, sut.Snapshot.Clients[clientId].Name); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppClientRenamed { Id = clientId, Name = clientNewName }), + CreateEvent(new AppClientUpdated { Id = clientId, Permission = AppClientPermission.Developer }) + ); + } + + [Fact] + public async Task AddLanguage_should_create_events_and_update_state() + { + var command = new AddLanguage { Language = Language.DE }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(5)); + + Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppLanguageAdded { Language = Language.DE }) + ); + } + + [Fact] + public async Task RemoveLanguage_should_create_events_and_update_state() + { + var command = new RemoveLanguage { Language = Language.DE }; + + await ExecuteCreateAsync(); + await ExecuteAddLanguageAsync(Language.DE); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(6)); + + Assert.False(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppLanguageRemoved { Language = Language.DE }) + ); + } + + [Fact] + public async Task UpdateLanguage_should_create_events_and_update_state() + { + var command = new UpdateLanguage { Language = Language.DE, Fallback = new List { Language.EN } }; + + await ExecuteCreateAsync(); + await ExecuteAddLanguageAsync(Language.DE); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(6)); + + Assert.True(sut.Snapshot.LanguagesConfig.Contains(Language.DE)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppLanguageUpdated { Language = Language.DE, Fallback = new List { Language.EN } }) + ); + } + + [Fact] + public async Task AddPattern_should_create_events_and_update_state() + { + var command = new AddPattern { PatternId = patternId3, Name = "Any", Pattern = ".*", Message = "Msg" }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(5)); + + Assert.Equal(initialPatterns.Count + 1, sut.Snapshot.Patterns.Count); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppPatternAdded { PatternId = patternId3, Name = "Any", Pattern = ".*", Message = "Msg" }) + ); + } + + [Fact] + public async Task DeletePattern_should_create_events_and_update_state() + { + var command = new DeletePattern { PatternId = patternId3 }; + + await ExecuteCreateAsync(); + await ExecuteAddPatternAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(6)); + + Assert.Equal(initialPatterns.Count, sut.Snapshot.Patterns.Count); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppPatternDeleted { PatternId = patternId3 }) + ); + } + + [Fact] + public async Task UpdatePattern_should_create_events_and_update_state() + { + var command = new UpdatePattern { PatternId = patternId3, Name = "Any", Pattern = ".*", Message = "Msg" }; + + await ExecuteCreateAsync(); + await ExecuteAddPatternAsync(); + + var result = await sut.ExecuteAsync(J(CreateCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(6)); + + LastEvents + .ShouldHaveSameEvents( + CreateEvent(new AppPatternUpdated { PatternId = patternId3, Name = "Any", Pattern = ".*", Message = "Msg" }) + ); + } + + private Task ExecuteAddPatternAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new AddPattern { PatternId = patternId3, Name = "Name", Pattern = ".*" }))); + } + + private Task ExecuteCreateAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new CreateApp { Name = AppName }))); + } + + private Task ExecuteAssignContributorAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppContributorPermission.Editor }))); + } + + private Task ExecuteAttachClientAsync() + { + return sut.ExecuteAsync(J(CreateCommand(new AttachClient { Id = clientId }))); + } + + private Task ExecuteAddLanguageAsync(Language language) + { + return sut.ExecuteAsync(J(CreateCommand(new AddLanguage { Language = language }))); + } + } +} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/NoopAppPlanBillingManagerTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/NoopAppPlanBillingManagerTests.cs similarity index 95% rename from tests/Squidex.Domain.Apps.Entities.Tests/Apps/NoopAppPlanBillingManagerTests.cs rename to tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/NoopAppPlanBillingManagerTests.cs index 19a69298f..39172ada7 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/NoopAppPlanBillingManagerTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/NoopAppPlanBillingManagerTests.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; using Squidex.Domain.Apps.Entities.Apps.Services.Implementations; using Xunit; -namespace Squidex.Domain.Apps.Entities.Apps +namespace Squidex.Domain.Apps.Entities.Apps.Billing { public class NoopAppPlanBillingManagerTests { diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs index 972af5527..1738e809a 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs @@ -8,7 +8,6 @@ using System; using System.IO; using System.Threading.Tasks; -using FakeItEasy; using Orleans.Core; using Orleans.Runtime; using Squidex.Domain.Apps.Entities.Assets.Commands; @@ -65,7 +64,7 @@ namespace Squidex.Domain.Apps.Entities.Assets var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); - result.ShouldBeEquaivalent(new AssetSavedResult(0, 0)); + result.ShouldBeEquivalent(new AssetSavedResult(0, 0)); Assert.Equal(0, sut.Snapshot.FileVersion); @@ -93,7 +92,7 @@ namespace Squidex.Domain.Apps.Entities.Assets var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); - result.ShouldBeEquaivalent(new AssetSavedResult(1, 1)); + result.ShouldBeEquivalent(new AssetSavedResult(1, 1)); Assert.Equal(1, sut.Snapshot.FileVersion); @@ -120,7 +119,7 @@ namespace Squidex.Domain.Apps.Entities.Assets var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.Equal("my-new-image.png", sut.Snapshot.FileName); @@ -140,7 +139,7 @@ namespace Squidex.Domain.Apps.Entities.Assets var result = await sut.ExecuteAsync(J(CreateAssetCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.True(sut.Snapshot.IsDeleted); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs index 71dd84b95..e8d426d68 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs @@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Entities.Rules var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - result.ShouldBeEquaivalent(EntityCreatedResult.Create(Id, 0)); + result.ShouldBeEquivalent(EntityCreatedResult.Create(Id, 0)); Assert.Equal(AppId, sut.Snapshot.AppId.Id); @@ -87,7 +87,7 @@ namespace Squidex.Domain.Apps.Entities.Rules var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.Same(command.Trigger, sut.Snapshot.RuleDef.Trigger); Assert.Same(command.Action, sut.Snapshot.RuleDef.Action); @@ -115,7 +115,7 @@ namespace Squidex.Domain.Apps.Entities.Rules var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.True(sut.Snapshot.RuleDef.IsEnabled); @@ -134,7 +134,7 @@ namespace Squidex.Domain.Apps.Entities.Rules var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.False(sut.Snapshot.RuleDef.IsEnabled); @@ -153,7 +153,7 @@ namespace Squidex.Domain.Apps.Entities.Rules var result = await sut.ExecuteAsync(J(CreateRuleCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.True(sut.Snapshot.IsDeleted); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs index 6ccc86c71..f4c32b70a 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs @@ -74,7 +74,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(EntityCreatedResult.Create(Id, 0)); + result.ShouldBeEquivalent(EntityCreatedResult.Create(Id, 0)); Assert.Equal(AppId, sut.Snapshot.AppId.Id); @@ -102,7 +102,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(EntityCreatedResult.Create(Id, 0)); + result.ShouldBeEquivalent(EntityCreatedResult.Create(Id, 0)); var @event = (SchemaCreated)LastEvents.Single().Payload; @@ -122,7 +122,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.Equal(command.Properties, sut.Snapshot.SchemaDef.Properties); @@ -148,7 +148,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); LastEvents .ShouldHaveSameEvents( @@ -174,7 +174,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(3)); + result.ShouldBeEquivalent(new EntitySavedResult(3)); LastEvents .ShouldHaveSameEvents( @@ -191,7 +191,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.True(sut.Snapshot.SchemaDef.IsPublished); @@ -211,7 +211,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.False(sut.Snapshot.SchemaDef.IsPublished); @@ -230,7 +230,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(1)); + result.ShouldBeEquivalent(new EntitySavedResult(1)); Assert.True(sut.Snapshot.IsDeleted); @@ -249,7 +249,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(EntityCreatedResult.Create(1, 1)); + result.ShouldBeEquivalent(EntityCreatedResult.Create(1, 1)); Assert.Equal(command.Properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); @@ -269,7 +269,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.Equal(command.Properties, sut.Snapshot.SchemaDef.FieldsById[1].RawProperties); @@ -289,7 +289,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); @@ -309,7 +309,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); @@ -330,7 +330,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(3)); + result.ShouldBeEquivalent(new EntitySavedResult(3)); Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsHidden); @@ -350,7 +350,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.True(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); @@ -371,7 +371,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(3)); + result.ShouldBeEquivalent(new EntitySavedResult(3)); Assert.False(sut.Snapshot.SchemaDef.FieldsById[1].IsDisabled); @@ -391,7 +391,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas var result = await sut.ExecuteAsync(J(CreateCommand(command))); - result.ShouldBeEquaivalent(new EntitySavedResult(2)); + result.ShouldBeEquivalent(new EntitySavedResult(2)); Assert.False(sut.Snapshot.SchemaDef.FieldsById.ContainsKey(1)); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs b/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs index c573d693a..b78b9b0fb 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AssertHelper.cs @@ -42,7 +42,7 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers lhs.Should().BeOfType(rhs.GetType()); } - public static void ShouldBeEquaivalent(this J result, object value) + public static void ShouldBeEquivalent(this J result, object value) { result.Value.ShouldBeEquivalentTo(value, o => o.IncludingAllDeclaredProperties()); } From f3a3bedefb68a29bf4e2accf0b51ef015ecd3ac0 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 12:04:21 +0100 Subject: [PATCH 10/28] Content tests. --- .../Contents/ContentGrain.cs | 24 +- .../HandleRules/RuleEventFormatterTests.cs | 58 +-- .../Contents/ContentCommandMiddlewareTests.cs | 264 ------------ .../Contents/ContentDomainObjectTests.cs | 304 -------------- .../Contents/ContentGrainTests.cs | 379 ++++++++++++++++++ .../Contents/ContentQueryServiceTests.cs | 224 ----------- .../Contents/GraphQL/GraphQLTestBase.cs | 27 +- 7 files changed, 450 insertions(+), 830 deletions(-) delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs create mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs delete mode 100644 tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs index b1f880328..6e4f995c2 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs @@ -7,6 +7,8 @@ using System; using System.Threading.Tasks; +using Orleans.Core; +using Orleans.Runtime; using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Scripting; using Squidex.Domain.Apps.Entities.Assets.Repositories; @@ -24,7 +26,7 @@ using Squidex.Infrastructure.States; namespace Squidex.Domain.Apps.Entities.Contents { - public sealed class ContentGrain : DomainObjectGrain, IContentGrain + public class ContentGrain : DomainObjectGrain, IContentGrain { private readonly IAppProvider appProvider; private readonly IAssetRepository assetRepository; @@ -37,7 +39,19 @@ namespace Squidex.Domain.Apps.Entities.Contents IAssetRepository assetRepository, IScriptEngine scriptEngine, IContentRepository contentRepository) - : base(store) + : this(store, appProvider, assetRepository, scriptEngine, contentRepository, null, null) + { + } + + protected ContentGrain( + IStore store, + IAppProvider appProvider, + IAssetRepository assetRepository, + IScriptEngine scriptEngine, + IContentRepository contentRepository, + IGrainIdentity identity, + IGrainRuntime runtime) + : base(store, identity, runtime) { Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(scriptEngine, nameof(scriptEngine)); @@ -74,7 +88,7 @@ namespace Squidex.Domain.Apps.Entities.Contents Create(c); - return EntityCreatedResult.Create(c.Data, Version); + return EntityCreatedResult.Create(c.Data, NewVersion); }); case UpdateContent updateContent: @@ -89,7 +103,7 @@ namespace Squidex.Domain.Apps.Entities.Contents Update(c); - return new ContentDataChangedResult(Snapshot.Data, Version); + return new ContentDataChangedResult(Snapshot.Data, NewVersion); }); case PatchContent patchContent: @@ -104,7 +118,7 @@ namespace Squidex.Domain.Apps.Entities.Contents Patch(c); - return new ContentDataChangedResult(Snapshot.Data, Version); + return new ContentDataChangedResult(Snapshot.Data, NewVersion); }); case ChangeContentStatus patchContent: diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs index 5f4cdef14..6a6e6028e 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs @@ -86,8 +86,9 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", "Berlin")) + .AddField("city", + new ContentFieldData() + .AddValue("iv", "Berlin")) }; var result = sut.FormatString("$CONTENT_DATA.country.iv", AsEnvelope(@event)); @@ -102,8 +103,9 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", "Berlin")) + .AddField("city", + new ContentFieldData() + .AddValue("iv", "Berlin")) }; var result = sut.FormatString("$CONTENT_DATA.city.de", AsEnvelope(@event)); @@ -118,8 +120,9 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", new JArray())) + .AddField("city", + new ContentFieldData() + .AddValue("iv", new JArray())) }; var result = sut.FormatString("$CONTENT_DATA.city.de.10", AsEnvelope(@event)); @@ -134,9 +137,10 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", new JObject( - new JProperty("name", "Berlin")))) + .AddField("city", + new ContentFieldData() + .AddValue("iv", new JObject( + new JProperty("name", "Berlin")))) }; var result = sut.FormatString("$CONTENT_DATA.city.de.Name", AsEnvelope(@event)); @@ -151,8 +155,9 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", "Berlin")) + .AddField("city", + new ContentFieldData() + .AddValue("iv", "Berlin")) }; var result = sut.FormatString("$CONTENT_DATA.city.iv", AsEnvelope(@event)); @@ -167,8 +172,9 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", JValue.CreateNull())) + .AddField("city", + new ContentFieldData() + .AddValue("iv", JValue.CreateNull())) }; var result = sut.FormatString("$CONTENT_DATA.city.iv", AsEnvelope(@event)); @@ -183,8 +189,9 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", JValue.CreateUndefined())) + .AddField("city", + new ContentFieldData() + .AddValue("iv", JValue.CreateUndefined())) }; var result = sut.FormatString("$CONTENT_DATA.city.iv", AsEnvelope(@event)); @@ -199,9 +206,10 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", new JObject( - new JProperty("name", "Berlin")))) + .AddField("city", + new ContentFieldData() + .AddValue("iv", new JObject( + new JProperty("name", "Berlin")))) }; var result = sut.FormatString("$CONTENT_DATA.city.iv", AsEnvelope(@event)); @@ -216,9 +224,10 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", new JArray( - "Berlin"))) + .AddField("city", + new ContentFieldData() + .AddValue("iv", new JArray( + "Berlin"))) }; var result = sut.FormatString("$CONTENT_DATA.city.iv.0", AsEnvelope(@event)); @@ -233,9 +242,10 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { Data = new NamedContentData() - .AddField("city", new ContentFieldData() - .AddValue("iv", new JObject( - new JProperty("name", "Berlin")))) + .AddField("city", + new ContentFieldData() + .AddValue("iv", new JObject( + new JProperty("name", "Berlin")))) }; var result = sut.FormatString("$CONTENT_DATA.city.iv.name", AsEnvelope(@event)); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs deleted file mode 100644 index 1ef316155..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs +++ /dev/null @@ -1,264 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using System.Security.Claims; -//using System.Threading.Tasks; -//using FakeItEasy; -//using NodaTime; -//using Squidex.Domain.Apps.Core; -//using Squidex.Domain.Apps.Core.Apps; -//using Squidex.Domain.Apps.Core.Contents; -//using Squidex.Domain.Apps.Core.Schemas; -//using Squidex.Domain.Apps.Core.Scripting; -//using Squidex.Domain.Apps.Entities.Apps; -//using Squidex.Domain.Apps.Entities.Assets.Repositories; -//using Squidex.Domain.Apps.Entities.Contents.Commands; -//using Squidex.Domain.Apps.Entities.Contents.Repositories; -//using Squidex.Domain.Apps.Entities.Schemas; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.Commands; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Contents -//{ -// public class ContentCommandMiddlewareTests : HandlerTestBase -// { -// private readonly ISchemaEntity schema = A.Fake(); -// private readonly IScriptEngine scriptEngine = A.Fake(); -// private readonly IAppProvider appProvider = A.Fake(); -// private readonly IAppEntity app = A.Fake(); -// private readonly ClaimsPrincipal user = new ClaimsPrincipal(); -// private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.DE); -// private readonly Guid contentId = Guid.NewGuid(); -// private readonly ContentDomainObject content = new ContentDomainObject(); -// private readonly ContentCommandMiddleware sut; - -// protected override Guid Id -// { -// get { return contentId; } -// } - -// private readonly NamedContentData invalidData = -// new NamedContentData() -// .AddField("my-field1", new ContentFieldData() -// .AddValue(null)) -// .AddField("my-field2", new ContentFieldData() -// .AddValue(1)); -// private readonly NamedContentData data = -// new NamedContentData() -// .AddField("my-field1", new ContentFieldData() -// .AddValue(1)) -// .AddField("my-field2", new ContentFieldData() -// .AddValue(1)); -// private readonly NamedContentData patch = -// new NamedContentData() -// .AddField("my-field1", new ContentFieldData() -// .AddValue(1)); - -// public ContentCommandMiddlewareTests() -// { -// var schemaDef = -// new Schema("my-schema") -// .AddField(new NumberField(1, "my-field1", Partitioning.Invariant, -// new NumberFieldProperties { IsRequired = true })) -// .AddField(new NumberField(2, "my-field2", Partitioning.Invariant, -// new NumberFieldProperties { IsRequired = false })); - -// sut = new ContentCommandMiddleware(Handler, appProvider, A.Dummy(), scriptEngine, A.Dummy()); - -// A.CallTo(() => app.LanguagesConfig).Returns(languagesConfig); - -// A.CallTo(() => appProvider.GetAppAsync(AppName)).Returns(app); - -// A.CallTo(() => schema.SchemaDef).Returns(schemaDef); -// A.CallTo(() => schema.ScriptCreate).Returns(""); -// A.CallTo(() => schema.ScriptChange).Returns(""); -// A.CallTo(() => schema.ScriptUpdate).Returns(""); -// A.CallTo(() => schema.ScriptDelete).Returns(""); - -// A.CallTo(() => appProvider.GetAppWithSchemaAsync(AppId, SchemaId)).Returns((app, schema)); -// } - -// [Fact] -// public async Task Create_should_throw_exception_if_data_is_not_valid() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(invalidData); - -// var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = invalidData, User = user }); - -// await TestCreate(content, async _ => -// { -// await Assert.ThrowsAsync(() => sut.HandleAsync(context)); -// }, false); -// } - -// [Fact] -// public async Task Create_should_create_content() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(data); - -// var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = data, User = user }); - -// await TestCreate(content, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(data, context.Result>().IdOrValue); - -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); -// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustNotHaveHappened(); -// } - -// [Fact] -// public async Task Create_should_also_invoke_publish_script_when_publishing() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(data); - -// var context = CreateContextForCommand(new CreateContent { ContentId = contentId, Data = data, User = user, Publish = true }); - -// await TestCreate(content, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(data, context.Result>().IdOrValue); - -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); -// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); -// } - -// [Fact] -// public async Task Update_should_throw_exception_if_data_is_not_valid() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(invalidData); - -// CreateContent(); - -// var context = CreateContextForCommand(new UpdateContent { ContentId = contentId, Data = invalidData, User = user }); - -// await TestUpdate(content, async _ => -// { -// await Assert.ThrowsAsync(() => sut.HandleAsync(context)); -// }, false); -// } - -// [Fact] -// public async Task Update_should_update_domain_object() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(data); - -// CreateContent(); - -// var context = CreateContextForCommand(new UpdateContent { ContentId = contentId, Data = data, User = user }); - -// await TestUpdate(content, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.Equal(data, context.Result().Data); - -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); -// } - -// [Fact] -// public async Task Patch_should_throw_exception_if_data_is_not_valid() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(invalidData); - -// CreateContent(); - -// var context = CreateContextForCommand(new PatchContent { ContentId = contentId, Data = invalidData, User = user }); - -// await TestUpdate(content, async _ => -// { -// await Assert.ThrowsAsync(() => sut.HandleAsync(context)); -// }, false); -// } - -// [Fact] -// public async Task Patch_should_update_domain_object() -// { -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) -// .Returns(data); - -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)).Returns(patch); - -// CreateContent(); - -// var context = CreateContextForCommand(new PatchContent { ContentId = contentId, Data = patch, User = user }); - -// await TestUpdate(content, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// Assert.NotNull(context.Result().Data); - -// A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")).MustHaveHappened(); -// } - -// [Fact] -// public async Task ChangeStatus_should_publish_domain_object() -// { -// CreateContent(); - -// var context = CreateContextForCommand(new ChangeContentStatus { ContentId = contentId, User = user, Status = Status.Published }); - -// await TestUpdate(content, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); -// } - -// [Fact] -// public async Task ChangeStatus_should_not_invoke_scripts_when_scheduled() -// { -// CreateContent(); - -// var context = CreateContextForCommand(new ChangeContentStatus { ContentId = contentId, User = user, Status = Status.Published, DueTime = Instant.MaxValue }); - -// await TestUpdate(content, async _ => -// { -// await sut.HandleAsync(context); -// }); - -// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustNotHaveHappened(); -// } - -// [Fact] -// public async Task Delete_should_update_domain_object() -// { -// CreateContent(); - -// var command = CreateContextForCommand(new DeleteContent { ContentId = contentId, User = user }); - -// await TestUpdate(content, async _ => -// { -// await sut.HandleAsync(command); -// }); - -// A.CallTo(() => scriptEngine.Execute(A.Ignored, "")).MustHaveHappened(); -// } - -// private void CreateContent() -// { -// content.Create(CreateCommand(new CreateContent { Data = data })); -// } -// } -//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs deleted file mode 100644 index b6d428fdf..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs +++ /dev/null @@ -1,304 +0,0 @@ -//// ========================================================================== -//// Squidex Headless CMS -//// ========================================================================== -//// Copyright (c) Squidex UG (haftungsbeschränkt) -//// All rights reserved. Licensed under the MIT license. -//// ========================================================================== - -//using System; -//using FakeItEasy; -//using FluentAssertions; -//using NodaTime; -//using Squidex.Domain.Apps.Core.Contents; -//using Squidex.Domain.Apps.Entities.Contents.Commands; -//using Squidex.Domain.Apps.Entities.TestHelpers; -//using Squidex.Domain.Apps.Events.Contents; -//using Squidex.Infrastructure; -//using Squidex.Infrastructure.States; -//using Xunit; - -//namespace Squidex.Domain.Apps.Entities.Contents -//{ -// public class ContentDomainObjectTests : HandlerTestBase -// { -// private readonly NamedContentData data = -// new NamedContentData() -// .AddField("field1", -// new ContentFieldData() -// .AddValue("iv", 1)); -// private readonly NamedContentData otherData = -// new NamedContentData() -// .AddField("field2", -// new ContentFieldData() -// .AddValue("iv", 2)); -// private readonly NamedContentData patched; -// private readonly Guid contentId = Guid.NewGuid(); -// private readonly ContentDomainObject sut = new ContentDomainObject(); - -// protected override Guid Id -// { -// get { return contentId; } -// } - -// public ContentDomainObjectTests() -// { -// patched = otherData.MergeInto(data); - -// sut.ActivateAsync(Id, A.Fake>()); -// } - -// [Fact] -// public void Create_should_throw_exception_if_created() -// { -// sut.Create(CreateCommand(new CreateContent { Data = data })); - -// Assert.Throws(() => -// { -// sut.Create(CreateContentCommand(new CreateContent { Data = data })); -// }); -// } - -// [Fact] -// public void Create_should_create_events() -// { -// sut.Create(CreateContentCommand(new CreateContent { Data = data })); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentCreated { Data = data }) -// ); -// } - -// [Fact] -// public void Create_should_also_publish_if_set_to_true() -// { -// sut.Create(CreateContentCommand(new CreateContent { Data = data, Publish = true })); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentCreated { Data = data }), -// CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) -// ); -// } - -// [Fact] -// public void Update_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Update(CreateContentCommand(new UpdateContent { Data = data })); -// }); -// } - -// [Fact] -// public void Update_should_throw_exception_if_content_is_deleted() -// { -// CreateContent(); -// DeleteContent(); - -// Assert.Throws(() => -// { -// sut.Update(CreateContentCommand(new UpdateContent())); -// }); -// } - -// [Fact] -// public void Update_should_create_events() -// { -// CreateContent(); - -// sut.Update(CreateContentCommand(new UpdateContent { Data = otherData })); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentUpdated { Data = otherData }) -// ); -// } - -// [Fact] -// public void Update_should_not_create_event_for_same_data() -// { -// CreateContent(); -// UpdateContent(); - -// sut.Update(CreateContentCommand(new UpdateContent { Data = data })); - -// sut.GetUncomittedEvents().Should().BeEmpty(); -// } - -// [Fact] -// public void Patch_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Patch(CreateContentCommand(new PatchContent { Data = data })); -// }); -// } - -// [Fact] -// public void Patch_should_throw_exception_if_content_is_deleted() -// { -// CreateContent(); -// DeleteContent(); - -// Assert.Throws(() => -// { -// sut.Patch(CreateContentCommand(new PatchContent())); -// }); -// } - -// [Fact] -// public void Patch_should_create_events() -// { -// CreateContent(); -// UpdateContent(); - -// sut.Patch(CreateContentCommand(new PatchContent { Data = otherData })); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentUpdated { Data = patched }) -// ); -// } - -// [Fact] -// public void Patch_should_not_create_event_for_same_data() -// { -// CreateContent(); -// UpdateContent(); - -// sut.Patch(CreateContentCommand(new PatchContent { Data = data })); - -// sut.GetUncomittedEvents().Should().BeEmpty(); -// } - -// [Fact] -// public void ChangeStatus_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus())); -// }); -// } - -// [Fact] -// public void ChangeStatus_should_throw_exception_if_content_is_deleted() -// { -// CreateContent(); -// DeleteContent(); - -// Assert.Throws(() => -// { -// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus())); -// }); -// } - -// [Fact] -// public void ChangeStatus_should_refresh_properties_and_create_events() -// { -// CreateContent(); - -// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = Status.Published })); - -// Assert.Equal(Status.Published, sut.Snapshot.Status); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) -// ); -// } - -// [Fact] -// public void ChangeStatus_should_refresh_properties_and_create_scheduled_events_when_command_has_due_time() -// { -// CreateContent(); - -// var dueTime = Instant.MaxValue; - -// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = Status.Published, DueTime = dueTime })); - -// Assert.Equal(Status.Draft, sut.Snapshot.Status); -// Assert.Equal(Status.Published, sut.Snapshot.ScheduledTo); -// Assert.Equal(dueTime, sut.Snapshot.ScheduledAt); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentStatusScheduled { Status = Status.Published, DueTime = dueTime }) -// ); -// } - -// [Fact] -// public void Delete_should_throw_exception_if_not_created() -// { -// Assert.Throws(() => -// { -// sut.Delete(CreateContentCommand(new DeleteContent())); -// }); -// } - -// [Fact] -// public void Delete_should_throw_exception_if_already_deleted() -// { -// CreateContent(); -// DeleteContent(); - -// Assert.Throws(() => -// { -// sut.Delete(CreateContentCommand(new DeleteContent())); -// }); -// } - -// [Fact] -// public void Delete_should_update_properties_and_create_events() -// { -// CreateContent(); - -// sut.Delete(CreateContentCommand(new DeleteContent())); - -// Assert.True(sut.Snapshot.IsDeleted); - -// sut.GetUncomittedEvents() -// .ShouldHaveSameEvents( -// CreateContentEvent(new ContentDeleted()) -// ); -// } - -// private void CreateContent() -// { -// sut.Create(CreateContentCommand(new CreateContent { Data = data })); -// sut.ClearUncommittedEvents(); -// } - -// private void UpdateContent() -// { -// sut.Update(CreateContentCommand(new UpdateContent { Data = data })); -// sut.ClearUncommittedEvents(); -// } - -// private void ChangeStatus(Status status) -// { -// sut.ChangeStatus(CreateContentCommand(new ChangeContentStatus { Status = status })); -// sut.ClearUncommittedEvents(); -// } - -// private void DeleteContent() -// { -// sut.Delete(CreateContentCommand(new DeleteContent())); -// sut.ClearUncommittedEvents(); -// } - -// protected T CreateContentEvent(T @event) where T : ContentEvent -// { -// @event.ContentId = contentId; - -// return CreateEvent(@event); -// } - -// protected T CreateContentCommand(T command) where T : ContentCommand -// { -// command.ContentId = contentId; - -// return CreateCommand(command); -// } -// } -//} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs new file mode 100644 index 000000000..1ccd7546a --- /dev/null +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs @@ -0,0 +1,379 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Security.Claims; +using System.Threading.Tasks; +using FakeItEasy; +using NodaTime; +using Orleans.Core; +using Orleans.Runtime; +using Squidex.Domain.Apps.Core; +using Squidex.Domain.Apps.Core.Apps; +using Squidex.Domain.Apps.Core.Contents; +using Squidex.Domain.Apps.Core.Schemas; +using Squidex.Domain.Apps.Core.Scripting; +using Squidex.Domain.Apps.Entities.Apps; +using Squidex.Domain.Apps.Entities.Assets.Repositories; +using Squidex.Domain.Apps.Entities.Contents.Commands; +using Squidex.Domain.Apps.Entities.Contents.Repositories; +using Squidex.Domain.Apps.Entities.Contents.State; +using Squidex.Domain.Apps.Entities.Schemas; +using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Domain.Apps.Events.Contents; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Commands; +using Squidex.Infrastructure.States; +using Xunit; + +namespace Squidex.Domain.Apps.Entities.Contents +{ + public class ContentDomainObjectTests : HandlerTestBase + { + private readonly ISchemaEntity schema = A.Fake(); + private readonly IScriptEngine scriptEngine = A.Fake(); + private readonly IAppProvider appProvider = A.Fake(); + private readonly IAppEntity app = A.Fake(); + private readonly ClaimsPrincipal user = new ClaimsPrincipal(); + private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.DE); + + private readonly NamedContentData invalidData = + new NamedContentData() + .AddField("my-field1", + new ContentFieldData() + .AddValue(null)) + .AddField("my-field2", + new ContentFieldData() + .AddValue(1)); + private readonly NamedContentData data = + new NamedContentData() + .AddField("my-field1", + new ContentFieldData() + .AddValue("iv", 1)); + private readonly NamedContentData patch = + new NamedContentData() + .AddField("my-field2", + new ContentFieldData() + .AddValue("iv", 2)); + private readonly NamedContentData otherData = + new NamedContentData() + .AddField("my-field1", + new ContentFieldData() + .AddValue("iv", 2)) + .AddField("my-field2", + new ContentFieldData() + .AddValue("iv", 2)); + private readonly NamedContentData patched; + private readonly Guid contentId = Guid.NewGuid(); + private readonly ContentGrain sut; + + public class MyContentGrain : ContentGrain + { + public MyContentGrain( + IStore store, + IAppProvider appProvider, + IAssetRepository assetRepository, + IScriptEngine scriptEngine, + IContentRepository contentRepository, + IGrainIdentity identity, + IGrainRuntime runtime) + : base(store, appProvider, assetRepository, scriptEngine, contentRepository, identity, runtime) + { + } + } + + protected override Guid Id + { + get { return contentId; } + } + + public ContentDomainObjectTests() + { + var schemaDef = + new Schema("my-schema") + .AddField(new NumberField(1, "my-field1", Partitioning.Invariant, + new NumberFieldProperties { IsRequired = true })) + .AddField(new NumberField(2, "my-field2", Partitioning.Invariant, + new NumberFieldProperties { IsRequired = false })); + + A.CallTo(() => app.LanguagesConfig).Returns(languagesConfig); + + A.CallTo(() => appProvider.GetAppAsync(AppName)).Returns(app); + A.CallTo(() => appProvider.GetAppWithSchemaAsync(AppId, SchemaId)).Returns((app, schema)); + + A.CallTo(() => schema.SchemaDef).Returns(schemaDef); + A.CallTo(() => schema.ScriptCreate).Returns(""); + A.CallTo(() => schema.ScriptChange).Returns(""); + A.CallTo(() => schema.ScriptUpdate).Returns(""); + A.CallTo(() => schema.ScriptDelete).Returns(""); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.That.Matches(x => ReferenceEquals(x.Data, data)), A.Ignored)) + .Returns(data); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.That.Matches(x => ReferenceEquals(x.Data, invalidData)), A.Ignored)) + .Returns(invalidData); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.That.Matches(x => ReferenceEquals(x.Data, patch)), A.Ignored)) + .Returns(patch); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.That.Matches(x => ReferenceEquals(x.Data, otherData)), A.Ignored)) + .Returns(otherData); + + patched = patch.MergeInto(data); + + sut = new MyContentGrain(Store, appProvider, A.Dummy(), scriptEngine, A.Dummy(), Identity, Runtime); + sut.OnActivateAsync(); + } + + [Fact] + public async Task Command_should_throw_exception_if_content_is_deleted() + { + await ExecuteCreateAsync(); + await ExecuteDeleteAsync(); + + await Assert.ThrowsAsync(ExecuteUpdateAsync); + } + + [Fact] + public async Task Create_should_create_events_and_update_state() + { + var command = new CreateContent { Data = data }; + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(EntityCreatedResult.Create(data, 0)); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentCreated { Data = data }) + ); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")) + .MustHaveHappened(); + A.CallTo(() => scriptEngine.Execute(A.Ignored, "")) + .MustNotHaveHappened(); + } + + [Fact] + public async Task Create_should_also_publish() + { + var command = new CreateContent { Data = data, Publish = true }; + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(EntityCreatedResult.Create(data, 1)); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentCreated { Data = data }), + CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) + ); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")) + .MustHaveHappened(); + A.CallTo(() => scriptEngine.Execute(A.Ignored, "")) + .MustHaveHappened(); + } + + [Fact] + public async Task Create_should_throw_when_invalid_data_is_passed() + { + var command = new CreateContent { Data = invalidData }; + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(J(CreateContentCommand(command)))); + } + + [Fact] + public async Task Update_should_create_events_and_update_state() + { + var command = new UpdateContent { Data = otherData }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new ContentDataChangedResult(otherData, 1)); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentUpdated { Data = otherData }) + ); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")) + .MustHaveHappened(); + } + + [Fact] + public async Task Update_should_not_create_event_for_same_data() + { + var command = new UpdateContent { Data = data }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new ContentDataChangedResult(data, 0)); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentCreated { Data = data }) + ); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")) + .MustHaveHappened(); + } + + [Fact] + public async Task Update_should_throw_when_invalid_data_is_passed() + { + var command = new UpdateContent { Data = invalidData }; + + await ExecuteCreateAsync(); + + await Assert.ThrowsAsync(() => sut.ExecuteAsync(J(CreateContentCommand(command)))); + } + + [Fact] + public async Task Patch_should_create_events_and_update_state() + { + var command = new PatchContent { Data = patch }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new ContentDataChangedResult(otherData, 1)); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentUpdated { Data = patched }) + ); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")) + .MustHaveHappened(); + } + + [Fact] + public async Task Patch_should_not_create_event_for_same_data() + { + var command = new PatchContent { Data = data }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new ContentDataChangedResult(data, 0)); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentCreated { Data = data }) + ); + + A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, "")) + .MustHaveHappened(); + } + + [Fact] + public async Task ChangedStatus_should_create_events_and_update_state() + { + var command = new ChangeContentStatus { Status = Status.Published }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(1)); + + Assert.Equal(Status.Published, sut.Snapshot.Status); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) + ); + + A.CallTo(() => scriptEngine.Execute(A.Ignored, "")) + .MustHaveHappened(); + } + + [Fact] + public async Task ChangeStatus_should_refresh_properties_and_create_scheduled_events_when_command_has_due_time() + { + var dueTime = Instant.MaxValue; + + var command = new ChangeContentStatus { Status = Status.Published, DueTime = dueTime }; + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(1)); + + Assert.Equal(Status.Draft, sut.Snapshot.Status); + Assert.Equal(Status.Published, sut.Snapshot.ScheduledTo); + Assert.Equal(dueTime, sut.Snapshot.ScheduledAt); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentStatusScheduled { Status = Status.Published, DueTime = dueTime }) + ); + + A.CallTo(() => scriptEngine.Execute(A.Ignored, "")) + .MustNotHaveHappened(); + } + + [Fact] + public async Task Delete_should_update_properties_and_create_events() + { + var command = new DeleteContent(); + + await ExecuteCreateAsync(); + + var result = await sut.ExecuteAsync(J(CreateContentCommand(command))); + + result.ShouldBeEquivalent(new EntitySavedResult(1)); + + Assert.True(sut.Snapshot.IsDeleted); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentDeleted()) + ); + + A.CallTo(() => scriptEngine.Execute(A.Ignored, "")) + .MustHaveHappened(); + } + + private Task ExecuteCreateAsync() + { + return sut.ExecuteAsync(J(CreateContentCommand(new CreateContent { Data = data }))); + } + + private Task ExecuteUpdateAsync() + { + return sut.ExecuteAsync(J(CreateContentCommand(new UpdateContent { Data = data }))); + } + + private Task ExecuteDeleteAsync() + { + return sut.ExecuteAsync(J(CreateContentCommand(new DeleteContent()))); + } + + protected T CreateContentEvent(T @event) where T : ContentEvent + { + @event.ContentId = contentId; + + return CreateEvent(@event); + } + + protected T CreateContentCommand(T command) where T : ContentCommand + { + command.ContentId = contentId; + + return CreateCommand(command); + } + } +} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs deleted file mode 100644 index 48f5338b0..000000000 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs +++ /dev/null @@ -1,224 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; -using FakeItEasy; -using Microsoft.OData.UriParser; -using Squidex.Domain.Apps.Core.Contents; -using Squidex.Domain.Apps.Core.Scripting; -using Squidex.Domain.Apps.Entities.Apps; -using Squidex.Domain.Apps.Entities.Contents.Edm; -using Squidex.Domain.Apps.Entities.Contents.Repositories; -using Squidex.Domain.Apps.Entities.Schemas; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Security; -using Xunit; - -namespace Squidex.Domain.Apps.Entities.Contents -{ - public class ContentQueryServiceTests - { - private readonly IContentRepository contentRepository = A.Fake(); - private readonly IScriptEngine scriptEngine = A.Fake(); - private readonly ISchemaEntity schema = A.Fake(); - private readonly IContentEntity content = A.Fake(); - private readonly IAppEntity app = A.Fake(); - private readonly IAppProvider appProvider = A.Fake(); - private readonly Guid appId = Guid.NewGuid(); - private readonly Guid schemaId = Guid.NewGuid(); - private readonly Guid contentId = Guid.NewGuid(); - private readonly string appName = "my-app"; - private readonly NamedContentData contentData = new NamedContentData(); - private readonly NamedContentData contentTransformed = new NamedContentData(); - private readonly ClaimsPrincipal user; - private readonly ClaimsIdentity identity = new ClaimsIdentity(); - private readonly EdmModelBuilder modelBuilder = A.Fake(); - private readonly ContentQueryService sut; - - public ContentQueryServiceTests() - { - user = new ClaimsPrincipal(identity); - - A.CallTo(() => app.Id).Returns(appId); - A.CallTo(() => app.Name).Returns(appName); - - A.CallTo(() => content.Id).Returns(contentId); - A.CallTo(() => content.Data).Returns(contentData); - A.CallTo(() => content.Status).Returns(Status.Published); - - sut = new ContentQueryService(contentRepository, appProvider, scriptEngine, modelBuilder); - } - - [Fact] - public async Task Should_return_schema_from_id_if_string_is_guid() - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, schemaId, false)) - .Returns(schema); - - var result = await sut.FindSchemaAsync(app, schemaId.ToString()); - - Assert.Equal(schema, result); - } - - [Fact] - public async Task Should_return_schema_from_name_if_string_not_guid() - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, "my-schema")) - .Returns(schema); - - var result = await sut.FindSchemaAsync(app, "my-schema"); - - Assert.Equal(schema, result); - } - - [Fact] - public async Task Should_throw_if_schema_not_found() - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, "my-schema")) - .Returns((ISchemaEntity)null); - - await Assert.ThrowsAsync(() => sut.FindSchemaAsync(app, "my-schema")); - } - - [Fact] - public async Task Should_return_content_from_repository_and_transform() - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, schemaId, false)) - .Returns(schema); - A.CallTo(() => contentRepository.FindContentAsync(app, schema, contentId)) - .Returns(content); - - A.CallTo(() => schema.ScriptQuery) - .Returns(""); - - A.CallTo(() => scriptEngine.Transform(A.That.Matches(x => x.User == user && x.ContentId == contentId && ReferenceEquals(x.Data, contentData)), "")) - .Returns(contentTransformed); - - var result = await sut.FindContentAsync(app, schemaId.ToString(), user, contentId); - - Assert.Equal(schema, result.Schema); - - Assert.Equal(contentTransformed, result.Content.Data); - Assert.Equal(content.Id, result.Content.Id); - } - - [Fact] - public async Task Should_throw_if_content_to_find_does_not_exist() - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, schemaId, false)) - .Returns(schema); - - A.CallTo(() => contentRepository.FindContentAsync(app, schema, contentId)) - .Returns((IContentEntity)null); - - await Assert.ThrowsAsync(async () => await sut.FindContentAsync(app, schemaId.ToString(), user, contentId)); - } - - [Fact] - public async Task Should_return_contents_with_ids_from_repository_and_transform() - { - await TestManyIdRequest(true, false, new HashSet { Guid.NewGuid() }, Status.Draft, Status.Published); - } - - [Fact] - public async Task Should_return_non_archived_contents_from_repository_and_transform() - { - await TestManyRequest(true, false, Status.Draft, Status.Published); - } - - [Fact] - public async Task Should_return_archived_contents_from_repository_and_transform() - { - await TestManyRequest(true, true, Status.Archived); - } - - [Fact] - public async Task Should_return_draft_contents_from_repository_and_transform() - { - await TestManyRequest(false, false, Status.Published); - } - - [Fact] - public async Task Should_return_draft_contents_from_repository_and_transform_when_requesting_archive_as_non_frontend() - { - await TestManyRequest(false, true, Status.Published); - } - - private async Task TestManyRequest(bool isFrontend, bool archive, params Status[] status) - { - SetupClaims(isFrontend); - - SetupFakeWithOdataQuery(status); - SetupFakeWithScripting(); - - var result = await sut.QueryAsync(app, schemaId.ToString(), user, archive, string.Empty); - - Assert.Equal(schema, result.Schema); - - Assert.Equal(contentData, result.Contents[0].Data); - Assert.Equal(content.Id, result.Contents[0].Id); - - Assert.Equal(123, result.Contents.Total); - } - - private async Task TestManyIdRequest(bool isFrontend, bool archive, HashSet ids, params Status[] status) - { - SetupClaims(isFrontend); - - SetupFakeWithIdQuery(status, ids); - SetupFakeWithScripting(); - - var result = await sut.QueryAsync(app, schemaId.ToString(), user, archive, ids); - - Assert.Equal(schema, result.Schema); - - Assert.Equal(contentData, result.Contents[0].Data); - Assert.Equal(content.Id, result.Contents[0].Id); - - Assert.Equal(123, result.Contents.Total); - } - - private void SetupClaims(bool isFrontend) - { - if (isFrontend) - { - identity.AddClaim(new Claim(OpenIdClaims.ClientId, "squidex-frontend")); - } - } - - private void SetupFakeWithIdQuery(Status[] status, HashSet ids) - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, schemaId, false)) - .Returns(schema); - - A.CallTo(() => contentRepository.QueryAsync(app, schema, A.That.IsSameSequenceAs(status), ids)) - .Returns(ResultList.Create(Enumerable.Repeat(content, 1), 123)); - } - - private void SetupFakeWithOdataQuery(Status[] status) - { - A.CallTo(() => appProvider.GetSchemaAsync(appId, schemaId, false)) - .Returns(schema); - - A.CallTo(() => contentRepository.QueryAsync(app, schema, A.That.IsSameSequenceAs(status), A.Ignored)) - .Returns(ResultList.Create(Enumerable.Repeat(content, 1), 123)); - } - - private void SetupFakeWithScripting() - { - A.CallTo(() => schema.ScriptQuery) - .Returns(""); - - A.CallTo(() => scriptEngine.Transform(A.That.Matches(x => x.User == user && x.ContentId == contentId && ReferenceEquals(x.Data, contentData)), "")) - .Returns(contentTransformed); - } - } -} diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs index 96cfbb42c..18754535c 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs @@ -97,26 +97,35 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL data = data ?? new NamedContentData() .AddField("my-string", - new ContentFieldData().AddValue("de", "value")) + new ContentFieldData() + .AddValue("de", "value")) .AddField("my-assets", - new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { assetId }))) + new ContentFieldData() + .AddValue("iv", JToken.FromObject(new[] { assetId }))) .AddField("my-number", - new ContentFieldData().AddValue("iv", 1)) + new ContentFieldData() + .AddValue("iv", 1)) .AddField("my-boolean", - new ContentFieldData().AddValue("iv", true)) + new ContentFieldData() + .AddValue("iv", true)) .AddField("my-datetime", - new ContentFieldData().AddValue("iv", now.ToDateTimeUtc())) + new ContentFieldData() + .AddValue("iv", now.ToDateTimeUtc())) .AddField("my-tags", - new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { "tag1", "tag2" }))) + new ContentFieldData() + .AddValue("iv", JToken.FromObject(new[] { "tag1", "tag2" }))) .AddField("my-references", - new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { refId }))) + new ContentFieldData() + .AddValue("iv", JToken.FromObject(new[] { refId }))) .AddField("my-geolocation", - new ContentFieldData().AddValue("iv", JToken.FromObject(new { latitude = 10, longitude = 20 }))); + new ContentFieldData() + .AddValue("iv", JToken.FromObject(new { latitude = 10, longitude = 20 }))); if (!noJson) { data.AddField("my-json", - new ContentFieldData().AddValue("iv", JToken.FromObject(new { value = 1 }))); + new ContentFieldData() + .AddValue("iv", JToken.FromObject(new { value = 1 }))); } var content = new ContentEntity From ff61b020042f31912a135b0d3c5c3ce332100799 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 12:11:19 +0100 Subject: [PATCH 11/28] Code cleanup. --- src/Squidex/Config/Domain/InfrastructureServices.cs | 3 --- .../Contents/ContentGrainTests.cs | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index f7628b642..96457224b 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -82,9 +82,6 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As(); - services.AddSingletonAs() .As(); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs index 1ccd7546a..173945ba9 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs @@ -32,7 +32,7 @@ using Xunit; namespace Squidex.Domain.Apps.Entities.Contents { - public class ContentDomainObjectTests : HandlerTestBase + public class ContentGrainTests : HandlerTestBase { private readonly ISchemaEntity schema = A.Fake(); private readonly IScriptEngine scriptEngine = A.Fake(); @@ -91,7 +91,7 @@ namespace Squidex.Domain.Apps.Entities.Contents get { return contentId; } } - public ContentDomainObjectTests() + public ContentGrainTests() { var schemaDef = new Schema("my-schema") From a18d744ad5687189bd80746e6ebae238f0ddc580 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 12:24:32 +0100 Subject: [PATCH 12/28] Stream name fixes. --- .../States/DefaultStreamNameResolver.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Squidex.Infrastructure/States/DefaultStreamNameResolver.cs b/src/Squidex.Infrastructure/States/DefaultStreamNameResolver.cs index 2312f0ce7..4c336e8c9 100644 --- a/src/Squidex.Infrastructure/States/DefaultStreamNameResolver.cs +++ b/src/Squidex.Infrastructure/States/DefaultStreamNameResolver.cs @@ -11,15 +11,20 @@ namespace Squidex.Infrastructure.States { public sealed class DefaultStreamNameResolver : IStreamNameResolver { - private const string Suffix = "DomainObject"; + private static readonly string[] Suffixes = new string[] { "DomainObject", "Grain" }; public string GetStreamName(Type aggregateType, string id) { var typeName = char.ToLower(aggregateType.Name[0]) + aggregateType.Name.Substring(1); - if (typeName.EndsWith(Suffix, StringComparison.Ordinal)) + foreach (var suffix in Suffixes) { - typeName = typeName.Substring(0, typeName.Length - Suffix.Length); + if (typeName.EndsWith(suffix, StringComparison.Ordinal)) + { + typeName = typeName.Substring(0, typeName.Length - suffix.Length); + + break; + } } return $"{typeName}-{id}"; From 191d2b77d877f162c2ae43a4620af4de3a14cb6a Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 12:26:24 +0100 Subject: [PATCH 13/28] Reduced GC time for content grain. --- src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs index 6e4f995c2..465a4aa6e 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs @@ -64,6 +64,13 @@ namespace Squidex.Domain.Apps.Entities.Contents this.contentRepository = contentRepository; } + public override Task OnActivateAsync() + { + DelayDeactivation(TimeSpan.FromMinutes(10)); + + return base.OnActivateAsync(); + } + public override Task ExecuteAsync(IAggregateCommand command) { VerifyNotDeleted(); From f9626bd5120fec51085b1a8187fc8972cb0f24b7 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 13 Feb 2018 16:12:55 +0100 Subject: [PATCH 14/28] Exception fixes. --- .../Commands/DomainObjectGrain.cs | 13 ++++--- .../Tasks/PartitionedActionBlock.cs | 16 +------- .../Tasks/TaskExtensions.cs | 38 ++++++++++++++++++- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs b/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs index 40d3fecf6..01958c222 100644 --- a/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs +++ b/src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs @@ -14,6 +14,7 @@ using Orleans.Runtime; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.States; +using Squidex.Infrastructure.Tasks; namespace Squidex.Infrastructure.Commands { @@ -108,17 +109,17 @@ namespace Squidex.Infrastructure.Commands protected Task CreateReturnAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand { - return InvokeAsync(command, x => Task.FromResult(handler(x)), false); + return InvokeAsync(command, handler?.ToAsync(), false); } protected Task CreateAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand { - return InvokeAsync(command, x => handler(x).ContinueWith(t => null), false); + return InvokeAsync(command, handler.ToDefault(), false); } protected Task CreateAsync(TCommand command, Action handler) where TCommand : class, IAggregateCommand { - return InvokeAsync(command, x => { handler(x); return Task.FromResult(null); }, false); + return InvokeAsync(command, handler?.ToDefault()?.ToAsync(), false); } protected Task UpdateReturnAsync(TCommand command, Func> handler) where TCommand : class, IAggregateCommand @@ -128,17 +129,17 @@ namespace Squidex.Infrastructure.Commands protected Task UpdateReturnAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand { - return InvokeAsync(command, x => Task.FromResult(handler(x)), true); + return InvokeAsync(command, handler?.ToAsync(), true); } protected Task UpdateAsync(TCommand command, Func handler) where TCommand : class, IAggregateCommand { - return InvokeAsync(command, x => handler(x).ContinueWith(t => null), true); + return InvokeAsync(command, handler?.ToDefault(), true); } protected Task UpdateAsync(TCommand command, Action handler) where TCommand : class, IAggregateCommand { - return InvokeAsync(command, x => { handler(x); return Task.FromResult(null); }, true); + return InvokeAsync(command, handler?.ToDefault()?.ToAsync(), true); } private async Task InvokeAsync(TCommand command, Func> handler, bool isUpdate) where TCommand : class, IAggregateCommand diff --git a/src/Squidex.Infrastructure/Tasks/PartitionedActionBlock.cs b/src/Squidex.Infrastructure/Tasks/PartitionedActionBlock.cs index 16fd0c779..a649ce53f 100644 --- a/src/Squidex.Infrastructure/Tasks/PartitionedActionBlock.cs +++ b/src/Squidex.Infrastructure/Tasks/PartitionedActionBlock.cs @@ -24,7 +24,7 @@ namespace Squidex.Infrastructure.Tasks } public PartitionedActionBlock(Action action, Func partitioner) - : this (ToAsync(action), partitioner, new ExecutionDataflowBlockOptions()) + : this (action?.ToAsync(), partitioner, new ExecutionDataflowBlockOptions()) { } @@ -34,7 +34,7 @@ namespace Squidex.Infrastructure.Tasks } public PartitionedActionBlock(Action action, Func partitioner, ExecutionDataflowBlockOptions dataflowBlockOptions) - : this(ToAsync(action), partitioner, dataflowBlockOptions) + : this(action?.ToAsync(), partitioner, dataflowBlockOptions) { } @@ -94,17 +94,5 @@ namespace Squidex.Infrastructure.Tasks { distributor.Fault(exception); } - - private static Func ToAsync(Action action) - { - Guard.NotNull(action, nameof(action)); - - return x => - { - action(x); - - return TaskHelper.Done; - }; - } } } diff --git a/src/Squidex.Infrastructure/Tasks/TaskExtensions.cs b/src/Squidex.Infrastructure/Tasks/TaskExtensions.cs index f6bca06ce..8d5f8a548 100644 --- a/src/Squidex.Infrastructure/Tasks/TaskExtensions.cs +++ b/src/Squidex.Infrastructure/Tasks/TaskExtensions.cs @@ -16,7 +16,43 @@ namespace Squidex.Infrastructure.Tasks { } - public static Func ToAsync(this Action action) + public static Func ToDefault(this Action action) + { + Guard.NotNull(action, nameof(action)); + + return x => + { + action(x); + + return default(TOutput); + }; + } + + public static Func> ToDefault(this Func action) + { + Guard.NotNull(action, nameof(action)); + + return async x => + { + await action(x); + + return default(TOutput); + }; + } + + public static Func> ToAsync(this Func action) + { + Guard.NotNull(action, nameof(action)); + + return x => + { + var result = action(x); + + return Task.FromResult(result); + }; + } + + public static Func ToAsync(this Action action) { return x => { From b36cc6bb15ec6171c78bf657e56a71cfb020c40b Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sat, 3 Mar 2018 22:10:59 +0100 Subject: [PATCH 15/28] RC1 --- global.json | 2 +- .../orleansdashboard.2.0.0-rc1.nupkg | Bin 0 -> 163547 bytes .../orleansdashboard.2.0.0-rc1.nupkg.sha512 | 1 + .../2.0.0-rc1/orleansdashboard.nuspec | 25 ++++++ .../Squidex.Domain.Apps.Core.Model.csproj | 2 +- ...Squidex.Domain.Apps.Core.Operations.csproj | 12 +-- ...quidex.Domain.Apps.Entities.MongoDb.csproj | 2 +- .../Squidex.Domain.Apps.Entities.csproj | 4 +- .../Squidex.Domain.Apps.Events.csproj | 2 +- .../Squidex.Domain.Users.MongoDb.csproj | 2 +- .../Squidex.Infrastructure.Azure.csproj | 2 +- ...quidex.Infrastructure.GetEventStore.csproj | 2 +- .../Squidex.Infrastructure.MongoDb.csproj | 2 +- .../Squidex.Infrastructure.csproj | 10 +-- src/Squidex/Config/Orleans/ClientWrapper.cs | 25 ++++-- src/Squidex/Config/Orleans/SiloExtensions.cs | 34 -------- src/Squidex/Config/Orleans/SiloServices.cs | 32 +------ src/Squidex/Config/Orleans/SiloWrapper.cs | 81 ++++++++++-------- src/Squidex/Program.cs | 1 - src/Squidex/Squidex.csproj | 28 +++--- .../Squidex.Domain.Apps.Core.Tests.csproj | 4 +- .../Squidex.Domain.Apps.Entities.Tests.csproj | 4 +- .../Squidex.Domain.Users.Tests.csproj | 4 +- .../Squidex.Infrastructure.Tests.csproj | 4 +- 24 files changed, 132 insertions(+), 153 deletions(-) create mode 100644 libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg create mode 100644 libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 create mode 100644 libs/orleansdashboard/2.0.0-rc1/orleansdashboard.nuspec delete mode 100644 src/Squidex/Config/Orleans/SiloExtensions.cs diff --git a/global.json b/global.json index 110af6027..815be4bfb 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "2.0.0" + "version": "2.1.4" } } diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..32d28c3ff86beb85c284125bc58aed699ab0d00f GIT binary patch literal 163547 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�}Fj$8m$?4cB; zp0GXQH7yc87%nT&A0$kY_y7wUSeYc3?F63 z4;z#`tB!>iUw24x$;NTkr9s#j+1<@;#Js@7=y|yblWttai1-zY>n-tPu85shV#|0! z`^R5UwOk~E&fB%Vw`et&H!Zc!7R#I=ep^)>{mU0Nw5)-sI* zXqWlow>W3i&0bLkNud@pYf=wjYG32a1_7nK_c{FY4^Zo`OJ|XLD2mNxQatzNRlJ+3 zGre~EV_VxDYTvQHIEXzxUS?I^@$pi|1@jk*EHjcEif5EtnQ8(;V$ONnFRc!ex1Fpi zlyS_Q!78J$rkE#KH0AZtIlOm%5fgtf46A?r8ewf6^Q*-UOA{TxOt~dNh?JEBhp!Qk zOd+2#$18PFx($tQVxSGfVDyrB$q!j4!aGBnaJH*v=vx0BdJ0JQ!BJ-F-yu`r&TJuV z5HTh}R9L!#!SJ3u#u-(tPh0avY`xZKJGw;U?8F&`5+H4Mvc;taMaMdu z+a>k!EKHx*%MoEWR0e!7%})3BWbE0O%8)%*DGwF-~oB=Uf=g@=sd-p5AG zu%JfR$-=~l?5|5C=%qV41(pExD(M%@o2A8yK{zCs#d3QjZ>f3tz7O}9ZK4q(@J}|* z09z;8Q#j{}a^k?fQg1VgaeyLj;BvYUq?c=82H{9GxrS|_P%S+Xp&dK>12X+>3P zL*#gBx=8G$4n+6W3n)q@kdble)$1?QDOxahzofGzY8U|h?hWiS7oVv{7#i?qlRZV!V7a=~fVMtL@zZYoG>fE8{2fHs8Xe7P~Y@(Xc-SvDpn{pe)#^?V3N_{Wq=N# z2DBFEsv>+_rd^Q{C86fdCXUZiQs{0=0#NWS_okFbAL>y$PbXUTQAzunN6{4Lh%`DC zK30Rq`si^u;`uWaM%T)cL_IsqlUB8)%>rxNIDf*G!SsYtf+sY3*qWTm($qgLRJ{St7I{;E_XM z@5D@o75tOuCnyTVsu#sGf5uyEE0liR&J$P6Vjq*;E@F)ryFo$N&xwi8CfUQuFrJL) zM=s`zV@)gBEygxR6~EzlN6XrJ*G$^2;UI|ORkjH;YJ@1QV8zkwDKZ4f2p8*s5EaRZ z=p(gH4u4k9d5t|}KZh^s#)0q?a%Y~E3(B967&anGP?fhAHw0dR?WD$Keyce}{s zREiQFJArZYM@TRl+gALj5aK@%5^>K4;^h3SbE-Uk3e%`V|8Zc6G+(PA+qzn`D{A{R zZAqdmvzY|#ul;oAV&3}fVI8wZFY*IZSM5#!^bixJy48LMAFBa5+^^>OZCu0E`%JWj zRi5m?@%r5ploa2TO(ngu%Ny?~*kwp|)1SA2Da58lxc$kP^5m1-6@JpWnb8iaFl^g? z;uJC_Uxto1je_a;>RRE6;sIpHcOwJC=`-QalgCuRF008!E=O~YeQ^Ju?(yGRJGTQTozOdUMz zO)$`vlupzr@D^)ZlHr{4z0j={$U-s`nV6{DBY%>u7Se^;b93_GS*1vl%W^C9eNZ8XHWVSpTef^6s`SLA#cLjOtN*?$9+J~A5UIVa~AQpo!<&X ztcEQ=U80_UyFs45vcc#Hb5$z3*bo^rcp2aGubMcPc3PYJXqP4CcoX5cK@JMH)H+wi zwb{6YP`(4YXQvEOk&tD!C157&ZXo0cPZr70dx2I1*qoM@aImGLeG?1_)4jXP6XPS^ z!^F!=`{>WLaj8i|hKt}iJZLU%FUc~JACedTgyx_Tva6=Bhh7FgL4H)yY4Y!i6`0BV zMn##V$wKE^v3E4D< zEEtdZ$YZu*RLBiSL}7V=OE)9fc3@`@(F(q`V z=a1uOw4X@g72xgRCRc)@X!s%46v;-6&N}gejbPbcaC4*{X_9V^=$0A6G8N9a9x=dd z(67d~rdrs81uEW&?n(B@rsEw8L3;p~NJfglD(AP-RsmO#t~M?ox_etO-?xuix?~Rh z#L!Ng2evL(%N9oejaoA~?itB$i#1}{`^9Nf(bGe*0xk2sy3=b~ruIUwufI(Js#kyf zD#l<7H@$rp2zgYpP7Xyv`&rRuXh?riHRv-$=vR@hYNbFl|C4%N*HxL+Mb9)hJ4eNS zOwk1tHgu420VmmG1FMF!haTL2E%}tcHV%80MAJyLaea8Hq=i8A!6y)C_}8_aQ?bZ=@`-1f{ICE}xhpZq8tGWFi}lhJ_!OCV6T?1QO9X<^UUs z!G*p4GA7l2{I~J2kN~d~#A|zEICee^RTs&-Mz8>bApH*Y0G${mNKt$g9TbjK4T_I9 zZ#;0msCsTf>+5J*;D;|Dc0kV)2jh6$!7n+L@M76=?=~ssr4zw(P*hC$7Ttb_dZH;^ zqNlP-W-bsJP}OLVP7Q43$B*ee5ep6hs6`__n>N{~DWp>Q7*iS&FVcAw3-M-ARm;%` zT*%2r=1^0D9Y+(Njn!KOJ2n@hAQ@NX%E5ekrW_ciAlca1AON#kc>Y&~Y zE|D(WgnEpuw$!S$gvMCNh9}?BAT2PQvl`k%KwR@5eWc>0HCAW zR&Dfrg2=l&#u4-}n)m0jbPaAdMu+8HWy5GC6KjF%!UOka8)J@vUXS7Z1|!|chBlV2 z$TP`rmJG08K~`wb3Yd6Bh|yfpkWV4X^{s*{o_%P9hcKSysM(94EE^{wvLViuPlo;)P>GbS+te zwdCL43WqA!5IPV^RhCfUFDz!9k`IogFJv_UZiRlWIZ1NOF2TB`9b5K{ei0sf_MELW zl|2(z8dPF^PcS6VSKh$Fx39eFB5>_)GD#FiDkwQJ5t`6#I=9OIe87t8Ixl~|Qo`ozemj;p@iIstBc|hIGE7h`z7e1bk3tz5xpSRt zCw69z83zn76<|w5l7?awmQ}W6(OSKkc+B}zzi$x{DI;SzSL|nAg~yl!qVDy1%(m2w zo&m@~a7fk>XSQc@m$mRHx?G4k!+(}D;_A&8C1VP}>C{MXda+XJ5sJH+?HkF%ILwb9 z7>-W5szINqFC@yVN0z3w7F9$dv9g=+t~8b_v?`|4S)D2^Vp^B$_A5mQ;i1X5FRfDq z1n3RuJFcDZ1mWkh4SIyTWEo2*kvGRFl}L=>K{C1=P_s=cbSBXWGi{h#!!&f5uQ?~S zv6Bc|_G{KTB*}J&xm~x)#IBMp7~maTEJ^Uy9VAq)lKy`HctD508}rhQKjU0hJMlJ- zW{tQhtlfFl%2=-hX$6yz=6i*FCJ7Gk;c*tB`KL!6*Mz#+=FKn0|#K6KODghoVN7P4;?8;ld~3N73C1-S1r^V+8H`d zp1yXvNh@jI$Cq|fc;!RyPUDaRo1Mq};ZTsnQ*c7j?kPH<+Ktu8gg8OAnb&Q)F*{lP z=B%xooBR5_nad@;y)^7e%lWvxGPRV}H0Qv&Q#k{PhvSL0EbxUnXqI&%? z{i2>k8?l|92*wuy(_LcA#G~W5cl3yKdt_Mq&W&N046|fxIqCixhsiR@u_@48v;$iW zBeAI1g%gWgv5{xEp%e}>g7^9`RrA#eAmm06If4epvWsb86H8AEo;gJejC{0zqDNR8 zxmHLPo3!$xNz{95=s21h#Wgk>-}^DE0Wm808$nyfU=1+K;fc!zo-s?0B{~b1MLzWj zOT&_66F!D{cV7+>;E0JWA)gH3cuSK3&o;cKAe@||V9Ko-X!!+)i;&bvU?UWkYN4N( zX?kHqEr)61h?ZYJz2$Wkt@90p{*6A-5ggMd1(GV7ocIP5Zk@2#V8Y0II{XbcjblA# z9Pb#2{8oPGfgAnX=z=Wr0A9;AnbUwA|S z@Gd-~cv9LHJaLl5>Gfh_I%0cv>Jk3kfB}R(Oh+$w40*f=b)p2$G7<6`<+oyNMS-FG z5)%QxRytjH!qpM|NcSMc2adB-lQ=S2O>VT1a74F5#6SVZ$%y&zkIEhAeCkwq?#@8abogPJ!r)+T0yzC1LxsU*@HI8k%~PM)+!noG48D?%Je|4>K5L~DJQ7)a)?Iu zR;CaZV^iV2W43jOgHvmN0P!y5qBc`(N;Yi6Olgb3ndp&K{!`*`Yc}c;ho;jDdW&yC z{wekGrkPV0p~=g3h(Y`#t2@a0tO9G+nGpBO6nlJEHtU;;T=yb%*fc|TBQ${Y?8r3} zb>W$b-XvN%1@3O1T@6#QKHanBv17J%Oohu-+)ji@ho)%ZJ7!zQROa|pT<(0Rsnsw?6B0XDUVX|68-*jes+0Fr;^QS1`w%O31 ziX4+Qi{iBYkYioVk{lO%JD7Pt4+ion7Z4nFG6C-v0HQR zsbtm~=ASEGMEuO;Rnb@(21Z(}Arv0L==T7V)kY7_4JT7udr6^AdtJL>rnINBB2MV? zwC1XonNgmKx1EsqjCNLTo?Q)7nYU&nu_^4Qq>=5aWsoFTW0!GGCwnMJywc$Aa4M1RU8&gQ)x*2!O2<44YTefW|z|&;Nzd{ zK~~!2qM|hQN@GErV(Nrj=k7FurmgH$YzOcW&7=lU8=0mtW_Hr8{f6mK6Zj-35Hfs|{W=c(;H1(kvnVj=mvRBv4 zWUjZI;2^X&fW91@3g^4BS(}KD&-@fC-Jqj+Kgh}$HmvL<4f5og0}=luZDx4cFeNHT zceF*$LeO&5;TAhIqep~EQ|U=sK(dq#oH}(fj%4Fx-w>0uC7Da^MEoyi#~z(m(TqTb zhE4|)((gpIltMdNw8wgc>CIXkp}FN(#2=e&h26Ol#erOLCgLBNy_9p(iZssZ@?c;GZi_Mf^jvtt$OZgjot;UoN=Hf(DTFr6XJEb&&^1xk##8;J?zG ztNTq?S_7uasfd4kwpE#l(@Z_cE<8#jf1W$y`uLNFCRxyjBXh^Ai2rdm zD@zy~^4zi_jK19Rmj!>oTtQ;-8@USnflQob!5`?w6hozt!zCrpYa~0py+1d6iTLB$ zm}JPhCXO9DkZ%wY&6)x9=AOr#2tuBm&<=2zQ?5oqB=acZ&*s*!tmG?FQu4HOLkr$4 z43OEgo!e%+(>6N`%hF7?ELU=#HN&}Ta3%?-9oV#wIl@~qa_*;D-<{+Y6008Mn!0nJ zp6U+7qQFynKXMTJ5$#er!c{}5W%5b@;WOmkh}6%w-#jPaaK*= zhg|Aa-t^2oiuhm6mTbD~UvnT1|6K7c;$NI?ReRXh4r$*%m=p1+bHVeh%%`m855s&; z&TEEQe`@5rk#B^zVTgkH+dq?U7R^{3o?P=Q;$NP573tj_IgO>i+?rM49GN@LXJua| zsx0|7?bTvmrp~j7U&u{0`beGwO^VEY3q<@Yxvey(nl(I^yo>m^vt3>K>2nS=?ZlO9 zNrt`P$(kZh;OY1|(U8PeJg)=CM|w3+PDq)68{6U@@s8N15XO0(lz#Gjj4RWg)(k6ypQ zDR;8wKv1E%<$i`{a~m_BIGHnV_gxKUb0YpSoF7dtW6GV=rgmqGuMFpcQ&l55>5!_B z!eqITw`7mASvE8I`%PC*Gn2j(HM?e#Q8=n?zh7OwY2_@#{f?R1zAQI%S2lT@)~;28 zTz7_X&;d$xEJ(M$GoK&L#je%#dChRuX{O}2Y0OiJtowBbbI0in$9VT#tmm@r+2SlEc2fC3~ES z__>)7vrhi>P0@hqohVsuZcp|(oMG>pza^}H58~=@KGSnHt&`~lvHghmgJcLL>5fg5 z_dsdkuD`eBN}WtkoyTb%s7=nKJLMWzvP)qq4}{w?M?dJ6Dy;RPrYyTpztVB}ZmG ze&5y5C=vhrxn(1#zUHYb*%lFhX>O~RugH+5g>X6WTH~j$e3L}{iP?O!eK*>6r{>$_ zbX#hFZn&J*HwID()26Px{jcBXPkph&T=@0b|bSc(j+z$P;W8G(1qu05FL! zMa+epk$tX3{N*dLWSGtuW@c`XUdm3>u7rRxeZl5Kv%Qm&jT?8{xGA*7L@C+0B9wfW zZic5Q`m0&8x6)2&YESk#6Y&RUM|2z8JT+TQ+@2k7X1Jl8N+^fDc`$bz&hT1a_oUaQ zvefkbx#4bx$N$}?Q;8h*_r6^4Hsfmm){_adJVUAwR}? zLnKSh_T-w+86FBHGn$Oap(*pv6~8mw!cVQLd+vmDWbQc5ns}@jvbO^~@6tNSYrJ_j zE8+>w9mn$ZvtOK>3M1JR($Tr(S&He2?5VBpqnp#RB$&S3ayhN<-A!D9p1Or6Jn6v7 zU(KR%oD<>1t_1Hh{7%ip)y64N=v?zXt*=v0t;%%YZ_A0WB6H9Aw7%In zwMywQXf$a_r7L-l_8Oy{h;L?RG}&#+w7#Z3H72ap=R|VDbIG%ae=E1ub@Sp!o~hCA z;*hDxjlzvz>4wbkV%OAJ*vVC^#!m_4M2@GfWE*C9RcEs5&3h?15n5<&xz2%@Xg`Kt zqOWf>|6zz}Vy<&w|M%fTKgKCHrvEVP|3p0Jz?n_m3HrluW+&r&h8uY4s_aIber+R? z8_{@j&1V)xkvQs5z zJz+ZiQXfqW`p>HW0m*tg4HNNyog0?)vJ>UY%{KaDS8D@B{2Oz@8XYAKB1HGz+KJE97}(9Za$}0euXIC1{OReiKzWET&6x6Q7vzIb*`VUphidY%1iHm4}S>CH%U(adQM=ZRQK-^Ft#+sNFvW13rQ z6ICi-hC|;Ejq$8T=04oH@;GBran|r>ec^aEs$yAg# zC!+D>n(J9jkKGfh=+!noPR#8zUz(gudJdX?OZNDi=EnQP#N@&LOkU(S#fInCzUIJ=uB)BA?y?6{of+r}rVEXzVTluN#5Wv$n* zFYTqCn3&T$_~#2`3iZM4ZV_6MxtlU`>+^H+c_cY%;GFkO{4!Lh&u9*BD`D30lc~zxFV8^cv$Fn>D z$W*a@Zk}#BnuU;#&NZ*oyjq@(DpzK019_U4kSAk)t_9&v*^j<3*DTPh49Qs!8hO2V zULh|zn@z~+u+R3fcrJ&1ro-^B&vlhq-hi3j)$&|5AjfK^Z|?V)&NZ%9HA~0qEH9%> zT;)#026>|)>sy>Bt{m4{UQAeXB)@!xuzrN;x~WfN?P^&}OrP^P6kTGCZ0^-R1kt7E ze44+LHyHy~CD$zjy|iXl!_q%jJWlglSd&#X@qSC{8hQ4=iff%JAGz8ZGtGCQ%#Nk3 z?EsHmDV}F_GdQ(sYh~%)Y?^If?evvre^!@4(lKG)Bqdv-za9R{Tn3pAhgmlE){1s< z`5~0LnvDHKJWli1MJB5%Tel^r_ahC{<0{J8Cep;fn4!4s|yknefQuNmN&WQRM~8IKdrZYt+Z#ei9EX&h#T}*%Mg9~g$mOx zpb~j$oj4PUxNaYJhc!2yvx%Dh;9|dM$oQ5(r7c0p#oSQ04vRKXi%pj>&mQy+s|coA z$~S}-(avNT)N6%UG^D*6XQODuzY}7WIEC;D(S)a1n_9-j>q~hRET~D!#cgtFrNz7^ z$ZnPK5%VP8ty8tTgecsI{0D`|KZK_!it6XrMKsUFNU4kbx=AXMrx=i05q*i0`al#> zkJ8SGs0bhr9jmFV0Z3ahS-agjr}noAQ6qyJw9^rTR&#(&msY5K9}= zNIF%o8Z$Hwi8`Je}O(W(TDIGZv5HA69xf>ge-b^d^>O{J!)C~!23YXV3n)Jd{ zrmWHA1&J#C)+9+JBDKYYqj_YQtZ#LdhfrKiDH-|`q!uZlQI2Ya(wcCI-SfV`({O-%II7-YW2Cq9j5e?+GpzjWbRZ- z>1j@%zFtQ1ohUCueOlc*J|R8%Oneep8A_&PEs>xpvF5OqPWqY><H00HO74h~&NqehG(A+$;Y5#1K4rV~upYOTkXUO;cT(PT&|9Pv$` z18n@rl_E!q94GU;;At|`T{h`#yOO3?mq_mtlMCuH76i1C(jCBv<@N;epmfMxFKgX; zeh)8Eq~o^^uBl6-CC@M-OhI(2#+N^((@(UB7oCdyI-~x+5f?ksVXMp z$Y;uiJKSb+hvBGK#VonmdAA=*g9pxDk7+6yPaF>OlufR`C^2#JZ`-!KRJH51TOZy3 z+4(~UUi&**At-q+MRDW3h~v8u3yk5}7yXDH{rzPUWJ)LVIOvW$QxXcj3akLZz~ms#u5?6xx8NCLxg! zl(nm}i%<&}+80%}0qwAK@9J)_zy+ZokPsCGt;R*n*# zJ%k=5^eChERPN!NdkD2>VG&UAhw*=5K9KQ;3xGw$L67s5@iS;r{6Qo<$xXPnTmXLt z|8=yU{z!7lBgN&4hH>N-E0t@Q{v(Al`EWU>K7#*@SS%>d;i7WtJi=0Rq{PT1({IlQ z7(Y~04(T%5QH=C>W&EQYxVJL?-a-V%zg#)QwS9=0`VjsbtswMc1?7rZv{=}Sm4&j3 z$MApALaO2p2!QIOn&O`{RcF3Hh8U#pbRw)Q z%BLaVT$GP2i=2z>`ND=2hYR&TR~f&+BQ6Vw^A{tW4C@lhI0q3tFLm4W(M|K@`gBEy<AjIFav2f#W7D0x1;6G_VeNmx} zje^4gZrM^e9F77RD3B=yg?Tpo!JuH^QfZ8J)aXEmIjBb#$^rBpot^I#7v@#Qzh|>m zjMq4%+O*q9k)$PBEEu;~*oc94YUFrDiJ;sF;6Lb=fo@q@S&=N=TDha9+$OmLIAB}M zM9j1nD+R@zv78Z{t8zy=#LlJVb~~coM8%d&MGx5K728cjDt8u3R>rqhuD@RAg|b_V z^MFK_G7JukIW3vmxt{xldnA5Nwre3evH(gtUQ<@>g2cXWU>CA1YIMb{?9v7ssih>> zwY9LcGX6tuhf~7JR_-o(u+Z?|NWp*N83e2)w16JfdaKoT9eT@XTS}j`7BW&ksYZuR z0OPa@gRPv*ftm14g@p!_72~^5MDk=}Nm6S=63tVTsY(=TnTvILm9341MV0YOnOmGp zw1MRGV`!B|T;qHZm^O-6#(x6stAOB(F-38XDxu55nNN!4oR?4|P_1k&EjC3+xsz1M zMpkXSq703?=K?jsrOoenBJ zY+npDdJUG)Rs{oErIeUT79=RgzYhanF|ImkfR5*B19Uu(qYgdl;Ap8HE#+vr9xdnS zd_6j!=Fss|K#j3=d69V=BTiv|zMm%)o3oTkECfsEFd0)H(z6K5WD3FiAUX@#8$m}^ ziFt)3PA80EvCRo)pR{32p!^1huodG`?nK;)0PGV|8N;*56M&E~!x~ub@#k3ITuPbK z6ro{6-poBeTIg`Fv~Mbqxhh$ZS`i7WTy|35D$;>rI|VRpP?r6S!k+L##8rw-rRQ?C8HQdzKFb6=VFej3Iebk{>Q0fwr4zXHl zu7JEh#a;km(~Nopi+)F` zoG%fi3DT&kShI`p8=WpW(jlXY@oHP89HrDsiK%R#S8R=gJCrLU=6YEn5hLkyfLZUA zUJ*M8FS3IG)vdheSJH8=h`&k$`B#*1ohwh%VRjsZ$91e6WC8JN{rb&+;&c zPLpwTYBt%)-W!L?3iIHBJnUdE`MDy^h{hjI&_NGiSRf^Up@rRvqQaqiXVP-}S z*4>AhA=E&;`*hxY*TSlgA7vZLix>VMfU_qppPjAC_!C96(infD;+|>_-E&>VJ>-cL z<`>!>4ssZwCgfKwTv)YAkzKP`I2J8L0d#-0)(Gp=G|z&qY%L+qMp+>i7RU$lIBLws zqcjJOa=w$M3@70yfeVMzLeRtKt$SvVkdDE)pNdJWcdyer26(bG)wE?o|77~RWIr3 zNW>pb%9e&Xb9sDN>awfH+02bQr5wg30u_&Ioim!PsgZvoLm*R`Aft1GjJLNr5Yqdo$mljW2u7H^ndC+}b=#^%Or2S3?&S(ggWy`^S=fj_ ztg}HOy`Ob9V8{$MU?j)$u1#h`ms3?*T&iAFrBR=2Ei9TOKd&&KhBxLJ_-!iA|+#`K- z>N(376gp^}K2|aQA#w^S@R-aFjE%MWG0yxLlF87;pCkVw{%Un$frH29Ga&OU{6A;} z44O;Mi$E0>IgB7{^E2#(YX!9NxHm8+shh%nx;goVT876fK32J!<4x65ZnNA5L(O77g8+kyqKXpTmn`@fu_6=Qd+-{k+J?CUw~;qKoI}mF+AZJT-+Qzk>~z-oV@EqeJzw7>;+4 z%k-Lb)qjZxxOC1-RR178uNn1fL)j?HO@)(Eh^ihVABwcgCsm90Nu0V)`RqbKr;8nS z+LDml5{liyl0J&Xhqj`MZZ9lzEVMZ!>zdlp6vCktQ>~+tBB&jH^rD4&o7t)nA!*ep z1SGZ{c?>_3b_^$DQJ~CPi6t9nn2$k5%*#4pIZx7buf>eI3EymPX5897ry*f2z1RZs8!KVSIM&;2}4;4e=hU?YH@6?ufr!%z}=1q2E?R2hHPUQl_M0x#31RQyNS zVWrq*0_SW64qJiKR#0Yxr&+KtuK)vs089?M!H&EF3=IP730(tPUA(tN`vFAZUIITW zl_I&P zG?HxK6QaS4gTP7R;r}9V2XX!gONU1Y;a>-SlmfrbFW?1_mg*$jZwbeu8yDO+<}I!Q z%`L({iP@{s@uO&}?qr~sO@4xr5Px{SIl;`3tJ4r;vU zq4)-Xdsa{-PuUA#P_@=}u^^L8B==0hAX2F>=_R<&zsenB*eQcG+2vh)YIcC(A%-4? z!#IpuxUe$jaM^JLbqZ%&h+{81e&0OnY0hDe8>cmuhiPA*4^}up$0wEKYf%myn`oKJ z5~y>C(fTz0tY$Xo0D*S{_`G4kD)U0$IB&QH+f(%U2}#GZCVFoyvAfr)>_3td|jNOk=xk2W`77#STp4%5BSRSgHX|?&2wRS z#5c_=G_rOWvkb*{8Zl%nV_3`(+6I4^H~o3uVLEc-k$bz^(o$ny;B9>L{XF7P-(BXt zVi~8-(*qz0l_nw5K?HBQj{gW=FgxbDb*6T-!{l;u{9)>1m`>W$#zT(007pjTGKV+B z><;0u*YU@RPZ>VN_$!RvNJf4eBljRw$O!?4BMwD4 z$Q#3E9d2g#+7|2&dq!>z1-FiR)sd(_6zm-ehmJ=SWl@5 zc3V)5MZ=yzy=zabKj8P?qK@^3j;O)5U@U+;dh2iz-F@rU-kzu@=p#Zpons&bQ8?#s z3wwsu4iUxj_+YrdDi!*dJBj z9tj1ha0>6z>lD)KQ|Lw|A2w)=jN^Z`k8aRNaJbZ&$>o z%w_kg&?+CaSCjO1HEN)ULbDJ}il|Q^z}feNLj&M4Y!)+Bxl0i{QcCPnhxz-kEj}V>8w$by|a#i zU21eFY9vB^6xrMlYMWuOFq_D~rHXK+C(PZo6$W-ph~hUxNW18ipGty5YO;ZHnBmQ>+mm?SYWBzjOVMiu+ba1!&KIpzXxSnT=!r^4|5MZ_(%eH8GU+ zzjas55Pg1k@}@h#bNAbVhu^dAc-gy`2gG09|FrnP+waYLVDrgcD0dNM{#!5m-VI~F z#`CXFEj#k{yK0AiqtSTlM6LhVCzsy&?0Egi&7VE`#|p|_|K1Iw-!;muAN?J0{{Wir z`at*T(tDdD<#(?bz7uu-6UzUdXrON5?HeE1ak>Ke7vb}=R`!iQYQ5`z$l&_Xg{t`2 zJKiTA-FcsQ>#euM=~dwx$nqnn8^gbaT;Dpg@vavi-a1~DRQ?t4Qj2Gbd?8QzY((0B zQeN z`@P=Jh<^)d75L=E>qC3czu%y;COvr_I{P`~`x@l-n}lAC{sw*b9CWqoBe%WR_NhaU zh}d=g0z6kkPa@FuAL=x~$6M4ct?ciK2b3Ga7^`^Cx?|$0*f~Q!4`FP5G5(~043?oS zkD&ga>gCbKe}i7V2QqMxEIzjXeHq6g(S2ykyYt8ELp$Pc3w{grKKEezyElJy?-@Jv zIVJzEZxrIvJR#20X0rBYj|)+F$@(Fj{zrK)70R;m?+f#V_{CSg-dfYOyR-Meo~^E- z=x|_jS#hiJR6RaCUHEGq#vI}D4tc^6HQH7iiw-obueGENMWZ7P>d~10SX=Gw4f{H< zt{EP|6a?3)*5$?OK@Fl{_trMmH>es#`#llWH566{+G;2x)gJS!$45fpsKIc+A3Wj;tAV!KNOUZqMut>1TC267u@Q8= zzM#856pBW$92=pCH#FR6AR1S@SG!vpy^%-)=f+gy24;$NfaaYMw>J=q`33^;p}7Lj zou1LgfWJS|H~>L3c#f-)(6HLL#=X|Pifc2Yvs)pr^BMwCwXqp(Yii=^ItaP5ck3Kf z6*=M$O4u+G3&Z^}*O^-D5PH)ai@N;K7^C6=57Z?TbOY47qVR;5WLA7zTf%Bzu zKi%RQftrQ}*N)y@JJ-5;hWx`Wtj1l^ukyL?jJUeDu6IRZBcyPy(14av4XDG=>u5|3`_+i6p<%O$?*5Lww|3vUeWRJ8FQi6-%cCw@*}MD$uCY+eMLO+@4ympY zu!xw)MPBX3#zrf>gUB9;f+yF8LpnO*4f{u;u1MJ1R!ajuf>NPK#I5N)^%fbAwOBPB zgQ~ZuD}~xttM@YfxdWj=*NH@&{%Aoz7>57q+vr--q&BZ__HIhb5ema++~{f= z8FfWM0l&|+WcBLRNtwK%KnQsv{=hLcY)U(&^UC#W_N?JJ48({Uo<1*AtHuv+y`eue zIwAe$=H{-|%`>8(RniF&H$+1t4O+G(Yu2pESbvo4xob12yT?b*Fh}Z5Dg7beSo)L! zSm^XA7HYnX)O;DK`BJ1}v}+Re(K7ajqS4Us1bNfQp+S~aeVGMf$&y|&mMrN-l({0` zKy;(4d39G}J`^U7y8G;qxEUDQYuN!inJwnu=?Ah9O){>&>&ML5gaTJu!^^F}NKK+Wc0l zQ%LG3n$%IyQYTaMXg=2xqa+kIlw2uijf{AL=1kn~+RdhA1m&1g$-rQ3x@Ab3@~w@Y zRHoVMlLEWda|~SoE5QDU7xnb3I2ysw#wx|78726|Cg;u|6Z9CJ5@a%1q|gI?3>I2m znmnw%G~JTP+SSOaulTEA(2!?)3AxSR46lwx^pLt3|j-5lVZa`w@Vv%5ndON%JXVNGZJrjf7ZOBwo9mzI`E=`;CT?e4o zC0ps*+vrX&wMG`3#mX9GI;B3j_DfUiW(0Q!FVQr0OCo3*Vo8eyY1IuSO|CMXU=4H3 zy@Y8*x$%6lvRS1r^DxCo!2^TdBo&wxm~?O zeypJ(=wTQy(p#MPcvWALJp9AFf{dzxF_&imryER>>JEnj83s{O?;)c;iW>R{lV?A3 z>nw|A6UAewVh9xYEXmd8I&or0ch}aw-n|{2*i_S83DZj1v~l2WOp%XeQ9kLuOegjQ zqgaY#TV|EJNsCTpxv%f}v5%FmL@Tz*d}AEYb|r;)GF%{P24X>}z-nEzK3E@Kal*iO z>O%FA6({@ybv40*p+hnhTva+O{^@t-)4Hn07A1>at~8U=x*zEL#>>5ms@( zBIpW$Xw9k>g!k(>zlI~KUfjSq?%GOTOkHiKCm6(XWdO}`4TpR&*uCYoD?=-5m)EY? z6s1chE-ysr!`RuiyKCRht$nxd?(N&Qd*7{Hwe{XpL@(AxytkcDM`<@Gvhf7^klJu? z)gd>wDFbyex0Y0|x28^&4Ggw%#->9D)kB*!Ry}pWn}ZwG6{qTB^@);dy_DT4Ef-a( zC!WH6jXEOdpNhQdLv5=zg<8pu2M41=n?fsBuJF`_N$3U(r|M2LZ9JIZmMS-OTexn; z2`L+sB(dAv>mOD_*svS&L|i1*epSV_5*5OQ|GMIosoT?(_rhljPnCk7B!~|7wY9Y+ zD%N{DfdT7M6F6u1XVD(u=j+Xk1?mbo~U=IE{ax|l4NJoEuMO7 zCToT$43*4qD$$;h)}A47X%>XepBaa&+#<^BL5qgaqI6}3ER^b#Ntjq4LOgAohRkhB zZPAdqMV9tN(8GhvmJKXhRyWvI(^Nm8Y1_@iZ3ATLL8)$d#l~Z84NdjKS{jCM-3n75 zBgXb%P>vO~&0iN;u?gf>ZPFD!+NKxY6x{>`1$v-uxPG|p;Gs<`R~~Bx5-bcHJa)(( zjs@#5{;9%5sZ#@d>#Cl4q&_e;!AojSdg_n3fowyJf}U{LGu9SOQl& z`CxN^#Uq#*pJ@$R-JyM`uK!({a4rWJbc1lyW6 z1zVFdYzo5QL=OfVnhv!YX$OOcHVwN+Vv(Ubs!_^*MSW9Eo6%P%PY#|u>8}gGFnZl1 z;ZQV05}e{yd^>T4gYE`$92&05z`y`M!|HJ8m}Iv@7jm>Mj8OFeOMn4gdnELge&C= zTNFCp;Pr=LueEKGQ!7?%r0$uO9_mL#>2!_OXX$hE!KbT#P}_S{71JUTjM0TrD;cl6?xyK;LY3f?q*3KH(^Tbpj}d90yBSfe zo>sWKLb1W2U@SUaMITh7-SVOYUDQjX?I+}ZHyK~#-OrI^s|aUQbpm`=ij{hqp}=2i8swJr6orq%1}U9~IKm9;CVhgqDw+BEY4 z|6vupSji6Yf10RpTt;5ZUs}T0U7R5 z!(I#wY*TIA(0oc?>m?5xPrZ~J)`|Q@i^#@ky-7bzy;QI5JTuoO{~BU-W~N3lUft4TD;w!m&0-4sO$Jiq-u&#s}X2XIjAB=372M?}}W zYudG^+VyA}9^n{dABC(l`XcPQDTd|~&QXXho-3ehfaMg3^74w4@&-6Y0i}V+S~MCe zoSS99Xy5ZT{DS?wK@cSTK7*>}iDIdS52bqJ7v*)e_0C;%L6lGL7;dett1bjy?QZQ~ z1)W+9{Jx8}bLdj`cYQG`){x*(4a_vG=~-~bdJ-s^5@0Q1Uax>c`&(Tg;@hI9!Evqyp{&zE`fIoQ;jdtCbkh4&DU8c-fxwd$xq?pF9 zAA^g&Q(472Pbb-wa3Q<`%E3N8N5`jAV2&{10m+4bO+}V)s{QwhT#BIG#nT`Y45h~UwhL)($bp{t5J1@~ftOiFpfka|CZ5kD`Gs-^wt|WD zIZFklI*Kw(GM>-t`G~>S!hY#@JQZ2VuE(OOoWV=31o{J6tf~NXM=o0+q2@% zY!0Gg6o%VvoH^XENw&b)3^vAO5%6rXgiKNftWD3NE;abk;MM-GP`rDF0VMBXfl@H7b>dikP?fR1^bH!-GY?k z{Mn|798y-KHfkEXR~KA_@~i9AyBU@0yMmmD+P9Rq)40To%HLE4uSJ8UJUvUlsrXCe zjt(w>5xhv2j6>X!{HbJxH*QOP;j_I$bvaaspTCtFyNQ5AtDo~r&4?Wg>!7)qno^)w zF$8()Rjbg20;dMOvPh-CWPwVZ61GgCUNb}Nj#2-<=Z^U1?S&6ljqEP0D&Cr*y7}l% z^PN;{Md5D21;MbUerx?&tvs`7y#x~meq%JE#0CNz z$ZN*ls0XP{cfISacE{s?i%=>rf6}u0TS}^0Jx3t%$H|CN8A zc&|bRAQ^CD*Q;4F9hEW>fDw5?-(f23!te+9ELd9DCK?n5@5YL#1v;ooAhmhAbGxH* zrLC4r%1W!y1ua~7hJ;fxRGQY3>?;W%uUw0jeGn!Ea#%=1s}@)HU$VH~Ky-HlTEr0# zexp!OI(lu%B6D%Iw4)$90AIR5DDitUl{r4SAlxXjKp5dl4ygM_8#n0YwWo_4&+-D^ z*vPB2jP^}%7@&cJMU$%YYANYogNxr&238^P{9S8TEW__wrHJJp{oa7WrZ-Nanz~BH;?-WOHMN9A^?M6r*!ypifxK1I`%PtE%Op~KQj~=jF^S&F4P*9E z#wmZavCI|hnj!=y@qrlUkpK5pH0((xt?7Ul&|VV{zt%L zTJM)2EW^XKA=*wZ+bV))?RS$g{eM=9borkwLK+$I&qZ&M04NjXq1`GOkei{sWkf+` zkb2|1bjX85CQM%JNaI*I29oYVNY*ykh;63=lq|<$I68~r=-vp9Owzd!5I4(WNV-=- zve-y#fgJ2g+pWBiOzgsTZ8qw&{*{Gz(#%9x+ud@n<#y1t&BA z{8c2&{1J92VFePff;TZvrqPZMs?e!4leh@==Y+l{n+ z7A42wVOswxBL>t0S>|aHOtkHS;u0Bcbj8~0Ayc>ei^abFO-vn+GOw$RQi%}!k4!jB zTNf$6f_5G_+6XSrdvIMAWd|eKh8@uS&Va1g;uz?HUeLd}T;<8hX?jtyb^U54Ua_t} z#MVo}(hT+;I7#FtjH*(WShCod=6APRvAfviI}4s@VN#RxIh#~k=(u(unKh1$BQtjs zQ<(H>Q<(I6Q;%Vz-(ps&^9D83yZ(KV#+YhjQHCpYLW<=X<=1fv}J>&OjegEtzYg;JcMOK5Q ziCRe)*sC>R6KJ58n?*~YkAmM3XwXT=@kt;?&IWcY<;8}92AVh8`0w`v{JAWI3`3U)%I8 zBwvcao)Jovqd`icDiAlGLn;uX0^?q@%p7#Iw12Tgf7=y9lxQOSR%e-K(R4NLzTU{S z?H=9cJmt>3!LXVe?Dbq#LRd6BUN03={(7Rgzv?X_ZD9kpkSOkVJKl|m^L}^DE0f&) z?q<%uth@0|;-4Fk{1sfp34~T*4$^#)3T{G1KF2a7SF#NM7L$qv=l|@cC&*ewW`EK7 zf7MP=he$Pj@Q!IqMJnOOFmBzbL-ty#mp7s8*A|#hx?IL>d-gm`AilpKLr~F^WDzPN zj;QEN{4J=6O@I4_FD~x>x_7G`)8D!pPvkcG=D+9W)D3PfIhO+d*}F?uSLNPbI*yZ6 zE-&SZ!kp2I{_$3*Y|>H-_AsTmQemGbG%~pZ9`pd@rbb-9?3*Ke=<*!^G!psJ`Rr^j%!< z&_kNzF^*oWbc^*#Vd~y`U$rBjekjI?3vC^$Jsaapf0g&4R)2*k$0r;}($!!!=YX#9 zwOl|J)X~mWakgCziLA|jZmGL{~(cFO&OKylc}3dhs4PZ6Da< zXY^HW(9}o;$^|2Jiv|Q8RE5GX9s1hc4i&{Jv(W2Fmi0)77Z%|Dck&bWU6tLwOO_Rx zWl^PK7OU!wU>$_c=YevJrt5tfA1%F2F+wL<#VIp7mGYGk?I{Q12koU&lx@>+e}yl1 z0Fg~x2L3p+-rg)pzVv`r}f%TQm=L1%m6Zv1o|{#xLGyP@#HtL?LP94WtYKIAsE_5pyOe0pu|0>yg3Zj$qb z>rC#_d$f3s$=$rh_G!K5U_XN!n$0)cM{PmXkET;PC&9l&w;?2JuAw)e@aTxL*zF4| zIIt)eTfLa;BgF*;jNIRW`PNy2PZ19Ef$Jd61!|%{C5%NiUVhQgiQr5@UV$`mF{sA= zkDYpRh#x0yI*7a%5Ij;1h9SjYjE_ZfHy$SMmZPJwYI$hRD~Cppg$C=EBl5!SnMTKd zSjQChFZb)iRsB*x{WIMXiA0}&^D98D-YXY(#J%j(gJsA+an|3|t{^2X3&rRai-@w1 z0s-NJfH)R#bP*23qRgSmdF4Fu-=4gA`RdWmlbxD%ym#zE3?39~LSMw34eC2>&OtJtkH(EQj#o@xl>#L#ImzHXt?@mi+Kj?1g|5Y;0e?3_fr z>3a-8`v(OZj{2k@c~y9fnG_NW3k&>md+`cCF0Jr5x0teKD^?UZPPH3K`@u+4bC|F3 z6 zgKrt0@^wv6E-2UUN|Jw*j%Uju;||KJ;5GSZoxH>C8G+D0!bs_9&)5hIMp!jlw)O>+ zB|~EN>=d%mmL0GVN;*4Wny+wrR<*sfQS(__5u^2*@GX`5Vb}Zm`FO^jup_E^Hs;cS z<#WR@um(tUTSmCE%`imst|pl^A?)U~UPN}9Xh^A@uZ{S9vc|Iptoq~vwDS2H~Q zE;T}BcBkK^9;kvP>30PX%h>h1(ul*j^8tQO)oyo{0TZ_-G*U?WQ&mR>F)g}Q$W`&j+Rf}ny>e4qb) z_vLep>KkPMvK_W@R;haKbg)yffzaUOLb?Q19O#Pz6|n{?AZ$w}xqTp!p+3_etaUo~ z?wQcTjuDm5l;iU6-@f{xEvN=1j6Kggu=VqK?dzpsse*wvm;$R6@uqxqw3No?Ep{=o zXhUMa7LWy|<2Z&a1gPnUS05g~`r(HskKes`^#gWog;3rhaOfl-=RLZP-KU2|J(vZ4 zL^}*nXHShT*g;ydhLvBFnEsZkN}ugJaCKjpZcEk4teZ+X^Qi(1AD0^a<7CJh(JXGR6<>*Q_{f0wHMf509{pwx z2r3=`czbcOA5ZVyt0nSLOlXJLiav<^VTA%#=L{~Zw6kD{u4s;?w-JClJ3!r7<2L?| z`Ocj54-IU6+o1C_LV!d1Yb_S-1F!1UdGARKZ=zxCEHbZuz``hMG=`3aZ(WJX8vP0| zRjGUT)Nk8A0Vg4!b+AI^vm$6KT$xpR$@_(+NDW&B-GFK}^<;{xHMO4I`eQTC1f@1MwP16t^Q6nq}Ubz4DJ+`H4o|8cH|&ie>3wRkQLa?eye=skTlIZxSH!mI=f}qZL@T2&<9n#V|TL7a_ zmdaeWgUJ^6e(44}?;qvZt?vCga2Y2G28lxlN& zC2Qc6p(a8Grn|Zz$f-}w}369X;*VmE!Y5&fh81!;9h;VY(yn0M{ zBlH7J;8>4`PynD?^%;}#8_wr5;PLwCA1m!~bJ(aMo&oum?xT?8y>#Ip?IC-E-P_yy zuIqNqbXNwX-E8CrWLd>7b5J?iYC7t*e~2Ua?;z`t;SH(Ig3X>Y0DABE+0~>avHj}} z21YbA^dU+SSq)gQe0+D@XQCHDI}K9-{>X72qULPBFq)nX@#CPy`V6p42l-dZgi5P8 zR-#5C$;x34^VoAMJGRoou|@T$*>FBLT#8zJFCF>T^Nv07c(6wPr|^guRYACHPutTt z{&;rk4i?|yvWTbyM3lOSXa-bh5Ro7f(wlPZ3Q<9lIPBpuTI@sJH~tZjA&t> zs`|D&s?f$05Q)Tp1N&YlE$GD&sGO5jBn)U`73CS6d|PA5j1uiKTCa`4cn)eVT;bi66ilN8?BET*iwDIsv- z51_4v-M$)~vHMPGc*UTc@BcqJBylzv#H*GO2Wg;D5*p9h4BGtuP4Z6{)ITJY{kp29 zVMAdSQe0B*g;whw=f7*si+TVaupz$~Bl*RMxG%Nl?2#XIVOocJ!E)j6gYJ-z`=*d4 z0zpwqfXbRRdBY6VnXleh9yGIcPI7f-ETH&2Q$Yws*}#y0`dui#vI zcuw^20Mk{B{M~Hmb3Ht{{p9}F|6v>cHH}nE@X_vZ#vh=|Vao&5N8U z2f`;u`2TnmIJP_tA9t*n~}nQx9{lzYqCs5>7l! zk^VmNAQ3)~XOsRXC0uw+<3n@gLsk_neQrD+eIA{U$Afc{%}!^b^CS^m;S* z0r>r+eHyy=O-8Pd%8URnpAq{D`7);1W;|ClX3{?c4YsS@aHuALbaXz?wjh}2$wK&? zY|~sJ@$?sgFJ1_-llfDwsLVn|u}{Tf=ec6%$50zqx2U_GVW{@Oy?bux!UsWGEXG-7 zxx992@HI@3Bb+R9b}LH?oH*9df*j=RPepGb!)RX=2jj`rc5Nvc!F;JtH!1b0Pzo#f z`cfP_x0I~)Ym2F|bIYNtqSClx*f8pCWRp?2NnT`=zTYhGC+Tr1uj5QXWi>dR2M^?j z+{=&wqNvfgjC3rtUJ|dy1r0NtClg9QC~}_ZXs42u}1C=!nJ>amwt1>pXsr3Rs7{AGtr{nj znyU-3i|V?nw^{PdYP0llWo0HcU)OncFAaTNRg+G;>3semzNfA{3|QPA2w=e;Jm_wK z>FnZT3%@;TKhMAzQLdglRx(Xq2^eKX)PX)Pu&O|JUtsYt8ZL0SMvj>BAXZ3z> zYdBl!_S*M*ec`}P z?e4Jl=+Pq>l06)(wbvQo>vB+<7QCHbHC^@I{rk(pHLq`N;sYbl?XE40v}gr}#Sgl@ zEq$Pr*OJm0u{o-nqJX;X>e;0M7v?g3uqxI`0nCyHn7vj3C`9L+Hx?NKePU{W3TL`A zV%bK^Ji0;#02_ebcv%~nl{p7pH~Vwjs#`a!TA#1MZ7Ro%pz`hw;10g6`qs^=R|ouc zRiE$Q406Re>8j9Sq&@u?3(+~1|zrc*80&l{~6;5W$5F*ZTtF38tx zCOS~AXp%O94E^dwbP|5X66fqQ}ued z91jMq?lA1v!)6Su+HE4L(P(xXD?OMqbz7EOQ8ogQ3n$AF)#Brw#pY)xmd42v|Pd61fsxz)%h zAVrh@_)^5Y$y^&34QW5y9^hc3R+9fT;Mg2gIPsr`G9N>*axn@B9kkK;CXdV}TVNjS zt{E{ygMA!~;w&{q+c;RXwJ8^U1ch#6EFNuWCg(^hQnjYBjqwk0qyaJ`qBk8RazKa7lcBa; zCfdt7-)W51&{a^Jte!-slRavTw^4c9zpSVz?9ASIX{QqE26Z z4y-nz<5>+u*Ryys8S0FEI%IQ4%bIG7{oW!N4k{an6=a@VZEkYIkljfAvKs1oHI(@Q? z>%)VU`m~ue`uOd&08oR(9G!JX@^>~am`4-`K@WiL{OvoA?Z_^60Kjw^?A8iQz5e*Y zm?~wmYHlR`8CM!TNEaj3Me^L15FT+!FtICD*(TErf$&~JgBoiYNmvMVTW)4ij@nPj z?5b8XOA2!zAX{{Cw&)VO=5AyTwR&P8FNAa^c` zr|@!aQOI9^TrlI%?f-owHx<=>3lFL99T&_rvayvusPUE0S+P6Pc)h*W?X4}-K>T65 zv({N#A7v?Si>r%DFWXtr0^H#e4n1*3Ags9Y|x<+@v)bxzr=T&^rm>1&w_(5Zq} z$yKyaCDIa=nMv(*@2@ho+r2NT_t()Dh>x6YN`9wt)UW{LT0@Kv4DPQ3 z)J-p58F0xZ{Ml-6ZLOkQh+cHIw$?YYZeU@otTy_a?M+BM!e)14rQ6*=-Elc<>}HKk z)?|>BvnFoV#AHne_`4jp@EHx(IR@O&nCl+DV~uq3dvM~csFyTjcYU56m-dEi2`nel zkcnDO9EGV`PJB*9J=2xgI}en;EKj{rh{EA`8)#*D+QLeiJ^)snf`1`a1Zr$emjRz| ztVr!~e*ik-0MeWT5D-`>7?+jR5` z%Y&ZhFAu^812T?1pbDUau!)`D!;FFDT#=ABQrlf40M~>{Eai0Vah;RW$eGL7#H5($ z8kbCqiLQkR=M+;KWgXKPf}a}G9ZqA+N!qx(LCU(7i{qss4B(9XC@7o62`z(Sn7U!2 zM>_OXaofpxNZUWZ@$~=}DN8so6+)VMQ!gHGOJvtXf_Jx(Jrfxta;hU&vqI&hliUp?Z7pZMt56N3=a`c z>VYw-ckiW?2KY$8vJO$7&&|lAvGG+~#rI_jHu`4DL7g5ALT`VNZ12MY{iB_BL>?ir zkbtQlBsw8<6IOKstBTx&HC zuWt5mMz`8)_qVW|F*2?8{f({rNbR<_HrKb1h_k=DjKFj4IP2Nt;!sk<7YgA^dPXBV!L-OILxylDW$0Du3XYDInjafP6y%{V^n%qN_rO zt|Aj;=qjPHN_5q)IlAhH{Azt#&2wmeL-QJzH$!1_jiOs7g3?pH ze*FSd5vuQlIDw25OHGFpY`mF(k>c>zc`5pI?*vfh8Vm@!8fKzzCOXuSiT_Wj^#@P z+=+Y|Q-!I7K3{xM*2lf6zpreMd((qs7#^d-9_8!D^2JKU)>tYPOJh~(iF{i7Vv5_P z*oAx%s?X{R#U9I-6g!tsQ|tp}@>1-he6iRQ{q?E;R=%Xzu6&we??iAfi?XDP|a^PB=9`5K@Q(vZHUAAi-*5b{UiBe zjvv$)2KZMGVafMYzL@WC^2OAb9{x&+pX7`A-pd#B{Y9B1|2X&xq5VN1rgI~l;1DZr zDK&^6r6JUpqI98#1WBt9A9R`Y+nG-zXR9({#EB32337IOn<}9T@tXhTY-TDpnfHV6 zNa7IYzaF;rewd&wt%&JudENUPV{KJsEUOWU4vvF~KRt<~iOx!hI;>ORXHL}wf}cX@ zxKhBgy5+5{qE^;8i_arOZLE81J^UXrXR|5BJ7$HDw05`FyzVM$IPfPys%pKz?seAz z(gw9W6w%Itv&8ABM8^=(QY$;^K|t5-tb41Bj%Pk}NzBB|TPiBzQ!l|xRW2vU+I{q7 zQza(h^rP+^XM%%sFbhu-*c1Xn^snOyAhe2er+_vP*(h{Z@2e=24-r}9Q9PXl(Ttr| z9mc<|PNEel1_-&;KNC%ROx6Q&IjNW5|jT2co0f*;MhyBo7mE--R%qhMxjm z{}u+Sv+1qrA{f3%mI?=O%{Cm*4vt}TJ?gHndR&&BH5E@gQ(e2xnaE;61*-rAS-ZWS zP6&M6WEX3ryM^gpTh&RNM>Ue0J#V9%K`JR~fIweu-pBuQ2|+0V*!H)xIOJ*}oE!M3 zQ|#)*BqK?NKL}1w!^q4&*TtraO+H?jsqNnH>iG^&^ju-F>3=#lD8A%3?-H)maX0QTwg>B7*dFmf+W=g$3=s&mJ(+N$4Q8(mF=MF zKB9}i{dgAZWvl)no(@P& zQ%>{@n;*4uF!k8DWsjlBznBE)4w7P5kK;6(3mHi6Ug&Q^KazC@wBvynxZhK;N9gA! zI}bhrF`weug`-wxje1{5D>4a)oBE&BEq$y|6^*gZqA_F1u|Wo$0}RvDKab4P?QtG^ z?C~_fI>)X!Je1{bCXJIX>UNE6I20gb(U6We7z(x95m5<(H+s^7#xN3ZC&dh}w8MX0 zQ>U6BENL!lwX}7--f*ZBI2pfLLS+GG0=9sf@2~23yQ`V9p?9@PvDL8U#}_wn(^-YArC?2E%inKU&Yr_K; zmPt@4r)RTM*kWPcHgQUzw(fnClnpm$0eG+5UA1W$8twLY49Kk8)Ke;3?7n4ByX$Kv z)j^v;!N8dc$E!qzITfzIj}#(kwi-^NY^C=&+e3 z%s`)Ek}$L&NJx0(&OD&Jj)_uO2eCM8B~ne8phlS%jL<2p=3KOiZPt^W(9vmn3j%5M z)-iDFJr(Z^co$eqmD^Hj&Uj<$r7by_PW@B=!pDG|8d{8#f$=yE{Db4uv%^D!%{hYT z84R4x6yC&yc^k}`ZE&E{UWZXI$R*wZa9C6LMO1vQaG~C1f|NL>c4f-)m%+z*7GU~p z3Rb`L6E)lMlbwQzzcAFGI{g&|FpDpIy`wi2;+I8{_>;*rFa^+4QasoP87k5Ul(Ufd z(Zp2V1GejKta+qov+c45T!BiqHYGAS2Bt7*UPd3$VGuBR8~O;Oq00eB>w0!BpmD_^6r=@yM@*ay1w-O?%sv{o@O;aHcDFMA4lJh zVX*bR_V=`Y#bsD}m7%Fef<$?>xx$eb?Fmk9w=`jJ>^qGIiiHTC>g{QD^2kOv64SZ#?S`y zVLbXA#m8vMi11pV|0!^_6LbwU6|7~?mgXKQO@Qn@;qAO@lgM>#0>g@&ffd89*(7>@ zS#ri^E(v_1XVlB>1J`+Ie3l0PQRY>&cfEn(V9tVB;Ma!Urk_qo%>Rt>^|c0)`HK}& zTD{bm^L#388pB(aFQS^<#}8**+h{oeTv{)k-bmSnE8Ayv`%GWes%d#lZCv>pm;*iQ zEN?JvH*9B>4uiA1u$Qh8m~Wi9XM4ZjTO+c#?nP@ykoTuJ=TC9YpW>W9#W{b9bN&?P z{3*`)Q=IdsIOk7s&Y$9(KgBtJigRu%&d~yz%`(sBzWM@LOUZv0IPC0Jne*1mtbWT^ zUS{+sbP|(EWZ_Ho6o?~0sD1;=5fAOA`VkTF>+EoxdAGyH14QY$iTS+Z_US8$$UW7O zzld7!*J`970O1brnAs{-MYpZfxI5KFAS`fh&eCVJHI}DPWN|K3VM7_wwwGxcudtlB1-;y_f~Uw!j%?=cev0#$>u^7Iz@hb!unuwsjx4H$rE8 z0ifbOVzUW3nR=ljt<%Q`B}UdhYmxiX5)}C%*Rb&IEBAs0E6Bb5k~YrdK?~lQR+lpQ zc}FbM?Xc$`4LX(~JI{u6Gt;3s2rb@*E}o(O8FHM5kwvTSL7A5fJS}`mLTAoh0;k z&WC0DuqMTRQW;TC7|FHU-8f2*<#`bk^E948gf2}b!R&>K#44CbsU+r)c-ftBZM=qE zi@ZOx?2fFk z1-*Aqdna^Pf{Aojl6|7sacQ_89zBoGXb35Tqqkm|Je|c~0vuU|2wDc3?Yo`L%3x;1 zrCD6g|Erm{<2pt?lYpxU8BXeS6zxGU&EMjH@X~miyKUnj9?$29#8?1m_tCDLiVEh& ze9n<7#11MldaAf7AX#+ep^oHcM?ghRb>x(hQyr;hM5n00Ad6Oc(k~}E1HJ}2Lbsm$ z^zN|*8Q%jNsWQZehY+so94au#qE((#11>fdN7BF>(_xAMS^|SC+Iwwo-aqU#G8}GW zK`WJ`-0oEu4f%_!~FK^b8V>n zdJWatQmF!FYj}6MSin2n13M{~NYp+%<$8G~BO;|59+SGo+gMd6;{JSYDG>``VWAZ6 zE}3c`bd+iPK@jqYoX>FM5dfMm zw;}Fvow3A{akFVakDFoPmXu6P)K1P$Px;`2u-QlP7^>Okptcu{YR$M=8!v%u*DcUHv6Hnk zZXjpUtg+K>G}NTxD0|x<_||nstEZoIK%~6`0@&#AL zavT1s&f$>3ChE4N@NS+Ip46ev43sO4A|VRShg9gjdp`COK8E!fNmCS<$d@O{CZOKB z5@HLx1c9OC=2w3bz_1}$VuaIFfTq;TTX#&Gwn^2LKqsZD2ywX|XAz;%_vU*0+SNF7 zSYFa#S^GKvRs8qyZ?l%v7PkD!)bmekJ}o&ja^9rIZj&*%>kwM64f$LD*(2b?PP z;X&J!0%kU!RQu-c+_?rIHT{x+V09XQq^+6t0Hj<11`h|FVKl4(N$^F&7WS&W^8;fW z=XROjpr3l}hO(hwdaHLEO=oC+$UhzJ4`yXY<=CM>a@Ah3aAL@t>+~Y?UdGo)|5SkX z3XWRbx$fgvBM$5c+WN@b7dRMIEm&|19C9fNhwsdzcTm%Zkw0BnwLJb@d9%zuoU%6> z?In9}$14qa?M*)o`H#KPd~f`ndK{E5>)JOX_f*`XD{1ycmX|O%5ix_j0Xr)`{)#?w z^>X)P4VzG3Lchwwwu{X*F)#;IO`Rs%JVoqM!sg(uJoVH-o&H$!P$a+^w0Ghza~HyL z>(&xz^ilsemd%ZJ!~02gzWklfpAtLEHyH?wQEp~5OC+>iBX|V?)=WsQY>=&aGk8cONQxpBqJBsR&~}l&Ufw!pms$zVp)PUlw0IdkzB6zHz&^ z2Vx`lbm?AwZ`7Fc2bBBXs6P6~-gs{`UT*A-8QbP#sCj87`KoNhKpM~Iv-#Y=Ty(w7 zS@fgU9$NgzcgxLT8|3?FZw!H{er@%hyBEIXPfaCgE1wDC@s19syhM@3?xW3|h=}Wq zl(oDaTXKh$VsOc`fJJq$*s*Cs;MS#k-TrWnJ^0~V?9Z@1JO(7~GJg|KEd+f!-@Atc zm(z)3Q_Uwhk`F#=4HjI{c&QYbz{Byo?dWwZNL>C-0gP2B6P4&@2+*gxOZ|_ z_nakVyOS+L1>bB~|GQ?%c&WI8Su$Q78~q>chzuPU8)dG6OJl%vTt~~|JKLMGd*8Vs!AsYcc6Y${?wHhryJ<6R+;xub?^HS;sa3)zU>fyhg~m$=Y0Ja! zd2hX!G1SdLJ#9se724d28K10|-u-@WtH0W9MRzyv_OiBupuid`FBC#W5tX<^nwZB4 zQ!QOjATUb;Vf{<7_NjJYr08h3Dj_)rc~eMHOl7wxFNcSa`iy$Pst4Y2K^e*tl;1#! zd&}f{C}^yr1Jw`}>R4RdN}q-yPYjKY_|-5%aU@obMBR$5>8L4NCDY2X@0k&j&AISl;VZ#5lFtLlp_+H zMM+}f4o`!u8S5g(5r`<1fK6_Y2j6J%uG!-?>32=gcTTJi#al^|4B98Ka;_?r3RX0a zQ+4&OrVTJ=uKDz!X0(bD+n5vWGNT=_%Y6Q!0KyQDpct{|NHRud&(V*u(ZCcpSR}96 zdwwa|q-Z(8jZ)kym0(HnJ!DesS7^U-&ZLrzI(Wskg)$5y0g6Yv+imrUezo<7_IF2{L%(l9Y!qpip z{ggZ%Qw_S!&1Iao;C)eB)S97WQ(9#{)1l-6IO}-utR4;mW=;CZLsE1@Ml|WuI%zT7 z=re-BhWC}YryqLI3cWgH*ZQ$TR!z&t_JGY=j72OIyY8R_vFWPN#Sn0;pp%wYi63-_ zbl?VB+#i^FT3xBBA3r=OR1N{uAZ`_7=}<$5n_cuK3j*`R=oIx_{Ta+8&>!FF&p~0L z?8Ko)eq)drGNK9&R%=EtZJUlVIEMty>0!mh!7%6>dTLlynuAxcN;rL3&;xd$jz;^^ zXyA2SA>pL5MMo}GuJi8Ze7>2%A=SG|;BO+wa*a3ySuVandA+Yr!x30YQB>Jxo+#^% z8(dKK21Kc(rK=1SyFgUe(Pm}PO4Zzq$UDEXjvEnq6a4Qg!YkKAj$*r}V7Zgm(_zKY zEw*=SNN)++w?Xwyqwvr6;VPhRRpJjD%sfSW`fZe)#tqn?3I9y_=O9niZRTk@vt>aB z&&pd{318+3}b+DKO%Z-6c>g8%IWX4F|H0xD#-SmcFT~$YN zeI0=Isv6=esmsHlAT~dSK}b?>-0k+}^R6RfIMHjGDgoYTzlqe{*sj#wnicfet!Lo= zgfDX?Ye&Vc^TAXid(W{1aal5u1$mWGCK3IB9zzS_p3nP1?r{a{Ag;3=X5vGYAtgd! zQ=<_3E;*fsX`R&>GeJ6wc((j4K6^JSp_YOUDV95zRa+O z+G#31wOIy5VD!Zok)K2eB%gAvnYLP&VY6wpt$B2WhAbH-K#i(OV5o|c@od4;XaJpzz>lci}nWvh?T2oX*JE|P`v`&F|KIa;eq`QURu@DxnYj3~3SZ2`7eLPPE>G1ShndRO1YnMGL++6l0l<)`uj zF4s?+jY90BX9R6>c{V($(A2KA=@KU}IW{*L2mD|EN6hcQ(i#no^QqRZs4EI_kXD(; zJC+_RSs58z8TOP2Av3B=w?)}uz!Eg&nAc>W$oq63?9)&{7p)$MG@3-UEVBc~>Esv@V1JTQ^?czFN*{oz3bV$757d@%jlF?=sO z_8{U@%nyC7=ErX#HwiXa8nq}qSB?PAD)Wfxrju)8a+yrPIj$h^qh;+1!a&7jVsk+u z=-6yMsgj^X?Fia}-{Bm_SdVDOQuU#r3&ra$&5Sd-rxFZ)V=-OqW04urVjs8O%>;A4Qi{|VuSOqlnq5n=CsC?MfE#w)XU{91EIs?5;Py=J=($!qA(lL1Dw4uKTB73Be zQV3p4#paT8rH9;->9E`H^i6%TizFZ$Nq5)h4sk-*8cqm%LfJ}3!Dme51+5)T6$6X` zyFRFAODGKbK1R$D&V|mjz~)r2)=F>E%H&4>pi_K*VSr8B?vW$CH;q+1bs?4esdvA6^atz!Xy?eaj~Cy9Tg2|koz^w1YkU* zYM9~+=dV9d(RBF)t3|9<74D6d?|Q!4r8cy04rng)x?}hb>tX?Bw5nemQ!wmQ!LU<+ z0YyLq4Di*%;aOV(cc!v*O6`YNw9j03Xe24q6@IsJs1Ysfox;SHdk#*} zXD~BUf<3aLFKvd986eYe><*n%I4=gac6tv6YxjqcuQby>zDb01?{_*3IaY@`meaAZ zfl*Ckyu3$)muN2)gBQ$amZ1*Av835B@nF_ZTwAAC1)}0kFrQy!LlZPedl}+^W^;}u zoW-sn$gy6kuq#bbvZ?WMCh;$9)1+<9I(R`!SU4yBf|n-;PxEnkP#l43!kYpbe%__NMG^!qj1ggA(67vm)ZK=)MdVET`2$83yjj$U-XNHpihL9ew=?!+YiO|H0|{8{Kv3 z_qN*FAQ0+;1l5g(tQH_`&6Z?wo($xTazcbj9y544i%;bG(Njn?_hF($&5%vw*w*G%Ztfj3ae}7F8Q6R2+Swxr4c(wveb|g)@_H9U*GzvZLvk7|sMq&k ztmVNfvfHCriuaUAi>D3uxOiD6ZuHY#9Faq_WQ_5ikTUN5K%#DQA{Q?}IYzxsUCO){ zG)Ox5r0yYPl)qvR2)y~uV#y}rd}mFt0OqNV;}}v~ZXZ|+%e}nZdh-z5?JTPcd*w@p zo+Km(kVy?djjCC|XoU}irQt*P0C_fc=`u#eV=z9_5 zIClRI%LF;)WK!>XwFzbS87F5pl(S}}8uMZpaivIl4joB>zQSj}=5xxZ$Qe01k z_wLn{{_Y3@xa@Xt=aPN^OSV~xzk`m*;bl%i#%RNs0($g2=I#6?NU@pS70(A%Xot z7s$`vQ*FYIB;{=e*Q%Hiw8oCO_E;|GfHSk^&g+A$y9bdA8g1~elsemcqM$oy)g%TW zR8wYdAnZLM(%Q=C;#bQLitz<7{peRnTluOqdAzKwth%Sum=_aF7P)$9L!w5Zz@+SL z;+acoiY#uRu%vnmHEsWPhLbvwAO!`2IT_%cXL1evjt3f*@_{pjNBPam&I*|_bifC? z1&1L}{I^p@%WN+Pa)ddYdsBG|!sdV0HPRxe=@_PvtuS>wy28d&AIf4w^Bn zv%;K3-Jt0=SC?naZf`lVSySJ75;aH?n9(%6f4095DUACjPO#{9;4??y`%6%`?c3@u zJ3d_z0xEDK++F_TVwEYU3D!yk?JPaeR->GIc=u~#OpcB&e z0c@8!i~c~~U7XK(`x0o^;`=`FP{YChtyvb}?G54WGo zm&|wWV(6|fx7>+$ZnJ*@%w|qky6a92j4@okvioxImDx5zr-_FKiBPxv9pme?-~@qB zUt#CU6q@TLgmf4VzMdrHE8K18O@#Zy*79~GO}5k}&NF4p$W1g9aW+it+?@>~AIE(> zcxm`pXuE-puo3_&oj7A}^t%A&>qWnVRvy=53fmjlqsJ16Rp3Mdi3%hVnCcXUu;Yjc zVo@a_mXu07_}f*Dq6UZqFm=*4PHp;{qU|j;oDzG7e6BXE$ zK%xQ=B}CX@!W{7FS&mY_bg3J%sCw-X2Y(GG2qk4{EMMxWP9SwGtFX-s4NpE(SQ2?M zKbOdg`3W5({T9NzJD51asm zKzqN;WWvLLP$OGIO>;R1n>lJMJ1cRPtM97|Jyw8%yx%c&%~GU0V-6pYspv1_a?oVj zV%6UGq3Tv)0HL8x4PI>*_z0BEAr3U*Q(7&XhL7ASleU^y)Z%(r;4qX;7jj!PfAl`?5zY5FG>whf^W!!zs$>a_-CKkdUNbjqY~D5Qi=CDzw5 zeB+PA89StrV9m_I=^7l& zr>P}tOWy5ao9&Q$%HE=%DG9}RLzoJeC^R=69lQ0kV8o`gI#%g=EPsFmaYS*IqK?KO zfpU(>($f8c{LTx8ph0CdGKb6oZwrXwJY&4{ArFz1Yx~%Ew^H{uO||aZ@#W^IlFQ<- zdZ8c>m8=AWzN3TNcKa)9AueCd(58B_DB`>>U8l)4tGK95=O)W6V`T!%m#GiaqH_Tu z*J+y$*^y9VsRfg+`bD(s7$oZQ!bFjHk%7bHSmqbUAPHZiM75GO)3924SkcCzj<&nC z7Z~Xl2bKimffSj!MGRby<)YJ{+I}1ZLpmNEp`F!Nn6YmtpEI%_ifiaPfbjx7*v2b! zZs!Io82XtGx(^FR>)XcZZVDM(Gi==5L?3Ec1G=$sXCP#IWP^OkHHTl(n9aJ%L`)QR!CgXsq@49Dl z3?$t`Yg^D+1uNaPjm~}NF3M*&k4i)?W_FAe-8>6yVtuYo=hQjBL79xq$oN}`GUPI~ zV-uFc0A@{slAFT5@KYe?2UZP~es`c7!yGx5Om_Pyu8&+rLp+NR`ycZPAK&i z@Cn0l7RFxSv1r2(aYE{pg+XCKLz0EDiW(3Z_zwoBvvz_*a)c&4A6%yYfH4xGV?rn? z7(S^<0Ldp3JgIphVq%?q%;cEK#}YiQc`;%VojhT3!sLkrCpC}H%S?6hE|aHB-j(2P z&6^_TKqp@?89x^_@4zaZ&%j<_Z=Qj%7&L>2kb!`!0A2DS=UVm5b#vrQc^xGhtvXgJ zPP(Rp5#RD0vKN9%_i4-a)j8i8vZeKE7#!N`+|EV=FB6&!#xem$0 z=lYDIhK9%+W_Q8qdjbFI2Yu+HEL@=`BpHNvL119weM*Ng!GSj!%!V_tI8VdR!KA+G z`lM(NJI(J_#A6E3^ReP{{p76zQ{Rd*lE2#P&Q48QJRKZkcZ2m~slx%rGzT>#Wr#X% zm>efr4(Vty{m7}o9i>7(GwG+z+UpuDABKl?)Ah5uFDC|?55tkbo*V!J4PU-hgFe|I}%5x zsXbb0$9R+sYF*(&tX_5Af#Fe>Dj*}U*hqzD^ap*v0m)?kZjH_#%5IsP*U*J%zr@;A zYZ%Ct7IDJoy-6wGzS1uovsJnJQgRKp@haVZWqQ*77+fSn=R4PLVsW9=exT@{x{!==Q}&{XUPBN7^>j}Kk;yWK8ok(U6s6ZLng1v0 z?|b?C7nI$b>`hj@=koP+?Q+HYg3nR2H69|of$+~d({RQ6O@Hd(GbgB{{;KNfdaEe; ziwUsWADwEu9xMKP7SmkuzDMYnIm4`~KJ51qzc*)?vIy8|Kqp5?45Nw zk2)>U9Nz$h(z!yf1?O0^jQQOQa>8>yf_-HdPxLx(rGkU_YR`LhIbYXHoZwS*xLS~ zj*@dG`Dh!un+{A9j_+K-c3Nt z`hpZBZFqM&Zt820X0mZep?R-N2r|{5q=SD?)fYa0PO+GDh~ZySEGZjC#E&T!Ru+-P ze5qT|OcDgE5VL+Ub>$u9rD9G>J8Hvm4}rTWvwU|R?}SHTs@(L(2?gw#1IG56i-aI%JL`?=%|x;-h44 z=Uf_9w4zZuiq94C#|NoC1~a>GqP-||f#*r9dx`+YGK9#gwrC|N+x~ zJ9Jr;htXhVXB6+ia!nmCdt)9j^Sz|eBqYH0Cy=#%??=!fUwn8P?9b$5*Pk66e|U5{ z3#a(L`0)K%6yVSF;=`k}qq8La@HRM20}6ycygEo@{{8?{a*5ap4&fDog-jB1s`aFj*X7$LuFHZrx2uaSXRGVIjc2Pm{%6cGa!FR^U|Q8wW8N~u#csnm zx|13Egp*1nKHen0=xs$13iLnq~=fyLQUmu$!MznAnM(V!)-p0F3@( zcNgG^;%#$_T_!guRDqNxH!0^7;WA_i)t)MT6O2>vhOz+Xv?m3OW3G+_rfHc4j{1VN zpIh(yKn!o8X9q3->f+D4vmoK``(P5OuXo4b8~E`QMxFS1>!b6WDi_0CsESw%t6*^! zWEmF7<^3#qkrg?S5&4h}xr!*~Inm1V=bC=22{R*$5~q(6NGZZDkVqhnQSIZ$tEoMG zS)Mm9)uKP9*sJp5J!r{8W7aPGJ*+|sckF2$qAQ_r?c1v{ahkVts(yYId~TN(L-+h@ z=&q||0c;R~)_ftd?9bysC8A^%YzU&yY%p4&Z*`P5&SME%9t z&(J=nJPUEIoiq;AZ}yu#ex~biQl4iiBnnVFn;3%`Q4#X~@W;~DG16S_ob6QK)1$^0 zy8D?XFwi-4t6Wm9iM&2>cDfioi+4L~l`Y$swUEw2H_O$iRtbP7+uxXv)8>@Kw)DRm zYWq?_Z`;1}yXPu7`ah(`G~xtiL>bxMKLU`Hvwc#(Jh%G$**DJK{^u;H%3Pod z*Xc-qW#pfZA+3tMA!4vuW7PRv}AX}(Ij-f;v5T(pTzyc}%uusWGi+|?t z^{4tk7W>m^AY=XAe5p}45|P61sO_QVW&@%l{8u0CHTO!=6Oil6zc3xL_1!C=(m-V} z-3+As&usyE7cG+cc&{O-HIj+e?rv*mr{=9#pk?gj&&pT}Fl;92Pay;3YtLGv_v82P zTTg5jGxUWV`ScZ>47Q1#TmxSr<8oThHSHGr`RCnT7yND~E2mQsyLD;d5HKv9@3WR{ zqMOEbpEYJd+(Z#b+GQA@KUYHH_FMcQtgyg4p^Jly7=A$Q%cVCZ3Z+FJ;AlDuJ z@`d7Ey^2sx16$|?@Xb%}!15tK{yy1x*KhUK@bMNOtDTPbm@)DpF;Lg-N(?_3v)1c) zuNfmB60-&KyoGlb1|RF{^}8iVpFY7{YeGA)C>DK+zXU~1d=!OW5dG%qW8MT@g0Fi9~eW3DWiPh7~&aa8OI??c!&X2=`W77bzd+0;azvLgxVyHY& zXlWl>mn4`W5KWd~CYGSOq`mY5ujZ=uSJ*fY6Ab~f!gOpBCI>j8{38I$qUX@|(I3w& zIDs%?BAtO!_Y_uXbjow$|B7w^0Gha2Q@2@g7(m7r-_Vxr*Q7-_N(O8>zBhk+gco0$ zjwgrOl5tF|WRKHBWcX>NL&oSWRs~}awuH*sq%^-DeoR_Kp9@M|51*<0eo&tsH<6aR8P}*$gtr5#B@ulG1z1DmW6a%r| z-ekEkYA^8-B%!Ct2rK0N#wQ1%Z;B^mHEiss>t_M zkvkIkuAK1v#`V5cfNrO08=}-_K_;#D5T!}ps)uS)xz4G^=%;7^nF1^#VH%0adoMv+ zQG)VLXFe>=Azq==G5>6u>MNoSIrPpP)tKBuwx802%ABKL#>%qdFZtay_4y=F(dPGs z+EMOKV_rvINAw6&KvId+Dcg;kxT@&6G+tv{Aqb&#Yn(py@BRnn^1Na~4uCWePvlr!1_2&J=*U*E)h?KRpa) zICL*n!E1%!Ju3v)b*b(a%84-?FZ(T4`a#O3F%Md1^JA#OrN`yQG0<8D=Jz$JV zs66j7A4Pg)0X}dS%Fa*;boKeGbd2UKKG8}>9quY%PVA(yxSlkEfe@p{uq05!@|0p^ojg(FB)`=r4rMgl?JSpTcWY+Z^+jc` zFO1R~3rYv8*Ox}|%|*r6ZcrTMw-%LOze#yiaDPz+8`Txa3eTnilcHB!F1EWN3k~)E zHPzUVK^4|$N}5;6vKeLR{T7Ll!f#ZpFvIq5=B6nOV-RQ}zSj5&8Cb4~Qa1a7ykD5N zh>;EiBXN@IwN9Ha#2RGuOz*nP-qUV?FIt1h+nbN}_q7V=iyKY%uG)D1uhC#XBlEWZ z8u3QU;HSvLmyv+FkCoX+X@QHy7o5-AV=$?ts)f&|&eB(hO8F?4oNOifr8;$o2@0W_ zF%E>lRJ>Nct<&cW48`%+G1;7f9%6isO;Kzy-FKCht){`cx@^rWiu93lDLvw?oeBb0 zxq?vlX_#*k9vKiJL?CJ~w@JBUpDcaG7N3yjr!jv6jywjATB~MrUoyX3`u2a;OZ}k@PU^!>(J+ zClpmdWut3a0 zjHIAbt2qZAb{C%kQELo*4|wo0Gt@6csU4jTUK%@t+@8s8lG8Xz^(IO+5RjS`Hu?g= zfZSlu$p-`#1nx2)f+hT##=^>Ythx_{o8f6({sx=l`0T`|_zin1$NN;itZ6{~AwI8~ zPlX+jt{hbcsz4h5&OMVJDU0&>_v~33U)8TP&h-i`YE@RXkiECcQZ67yRUewOl(M>M zm}Hlcp|Y{ddXLHBQ4kF{YQsQz8!-0tMFh!r*qu@274yPAlXs5AVNNck52UAf zWP5q^VdVHtaK4qfpt+f8Hf8F1RnUD=mz@72I`hEoOs)fhv~u9Pd9$vhKrd0@w935M z)N6GCXvXW(wR)pQwno8VE}ruV(!S}UzW>cQ=~zR#z3AF9=7P9eNMB%Q84cE3obFZQ z>&D zNWLhafB^dG)IUlp+K~s_HC|Dz<;1JzeT0%L3iW`L+L$kJAkraF!(8;SPloe_T%tJo z7Hab)^D&=`w}I?I#u93D@1)6lx49!z0jico4%2GNO_K~RN#+<9Lqw3LwOqn1yLAkr z-Jx^j(-05+j7HL5B)1&~*#vj~&6Z zIQK;KaL|jl`R3CI_lJCoJ!dO1dN+1;{*>uA`ft@UjoGCE2TYCXRd>;_lLSm}>t9^E zCWMmH!rU(Gv(_va;;Fu}yrj+fpz*9NEw40`8UoCL%2@-~R;wvLVqqeWf{2IXU|`)M zIXoUn1^ui`dH@}m4v6IU7mTe`_KRlQAxRiP9?<-sdTsnaM2Px~QbVkFnjU+7RYz{7 z^zB_1e~>o+XH;v9|EG$xj+(P(t#asUP2a4T@87=qp-LN+8#^;g?&QehB&v?`l5=Y@ zi%OH!wIHfB42ZP!I6ogH=8&p^2}f?>fJdO-yz&VbJq^%v2P-4A4QRY@JS2sqcD zNlSQm*U{B{-qA7#c_k-~Ru(lY&bRb1WE&${Z0onB#e}hXxj>T^O>( zDtc}Tg)U-Rb`B%;Qi9a0&!j>2>5we>_mRoHXO0(g=Tx)Hqsl$-A*GWSRoz^7^-_`` zY$Qau1Pi?vk-E83o{R6?xo|y~I1@wA`J0DZG5_UZm8lWZtLVi=uNlfLHVHf=p1fk< zjy{{xpH;0HKQQtP1sl3e6VinjQE^c^he~;QnEDU&F=mf?E~%ijcq*!|uE4Gi9?*m5 zvS(=Kujeb*^{WrXJ4Rwe8J{yJ+8v-l9nKrSdgo?OjBFR5=ne+zLD}M%=mo;j#n8&g z(s#2NTz24}0$dG|?4Ral>x$jnxVw49%p2I;nfWJRv(91cGMrS8PVQur*CuUu?rsvm z)~2CzvphJUH}y&|8nyDecRVK6E4fG|9&A;osmrQb*y+4`eBIEITI7lps&Q~`creh5 zjMbFm;ETj7s*v%0 zC~K^Ca;%ziqb_qmPcK2^L3cxWo397UgAMy0#+{riN-7!r!FOuko2{dJG0@9LyAh_< zkh%e+NhwZ+uau=B9|S^GchGfJMwxuPh+fa)BYK4x8eeU6M$-yaF?q3~UtNHX*DDj0 z`BKh9np8|1^#vuwEw$#La@2}KKVjbtfFh1yQnN_hn31L(BXX48wXlF0=z2x*{P1=? z!wp)AxB*K>%i#bm{aYZ>wKpuOmG4;;+O!E6c2U>swgSwYJ6Ldzfw!{m=6!yX zOL3l>9BN)77k$|@v_se`UwqzVyPum<_KvI6GF z%AYC_I2<{HJ4P(FXH~)hHIuisYh}%@QL8HlwN#SX+IQ?>q8(3b?Bi@!6j!?0eo55| z>jATA-X4b#%TCxwH(VT`TfBIhq^(3%QZT6|+lP+j>~?vqLWiJNR@Q#rl~yiE%O7B_ zio&0a0@}kUsFxl1QjqgNfh<=DG8rubd45>G=gtTeciFjQ^-?2|!-@Y;KOt06`i`Y= z%8A;b;g@Le&ap%IWr6j9xL{xArvFQEg*jVA_5QJAmO#GmX?<%q~5&lfT=w zh@<+D&n8c-E=a+c{B(M1o^ZC_)<7=Y;S(Q$*TYT8-44J=WUUws%fWqdnjlpRuL91=n5$>h83eA=F zz$neQSx1o_&9`;GG4ySbzMl==-3cAxXh8fVeJXCBDwTZ|O#}}+!YfXDS(Zovc^pUf`XtUsaZ|H`wDYOt{+|R}5$^gNr zg*%@gMiA%*v`v9nR4pCM2A?*V_#`%JW4Fqyn$ES?&T4RaB-bTx)-B1JZ$P3Jbx5aW=Q3uGL^ML<>$CbE+)CVr1lRjx!3-8z}q=59o9f*(UW2A zJ6f(AE1wdmSJ$cBhFo1S`eOFtNv>WDW;mz>68m#uJGs|Isz3~jkQgZL-BYf5)CHu4u(bRhGSj!c{PrGG97NT6}-x(CmNxpWMk*T*|}xnOeTJ4^9m= zzB}YBZU_fdAGF8p^@ozK?z)Bx?G;ZV$4fz_!CIj< zWLwk|B;{%>p43F$t&*6l_r|AYu0ZbGJihYW%$2iyBj3C|A|cq-67$N#b3xi6 z*y3W6IaxQ$2WxlSkkOgB=WD4B_k^uVtUM2``>Tq>usvLG&fco#g=cM5^~K@5u5!8& zyRK?ecWwqt=Xib~oRhqw9~G$fjM}T6s#^$t#^nxeDC#u~c&b0TfThiYBsS@uuyUG3UQ> zaH>!3GB{PkR7prw^rT|I77`P;2dsFO{R>AAtt|%8fKoMbCaq%JY!Aw#mT#^+W;X*z ziJp?zyA@+pI~5z=Kpx~v(Lp87~NVCx&*7`_bOSG+m0^avv@UQDX}if zSH!4mD^r0^N21dQ={XH5yhPjp8p!;5Z^Yc3$jZYZU@RKg+QuWE3kCFPM z8`7Ejq(fU@eaiK)+2EWtxVP9E7<`G%A`+8LT`_HVQx&27t2ev@73A9ErE{HIKgZ-v zR9JaXhvDVS(cOEev%%LS>94JM__OYv@Xv9-*YhU*-iEi^?{;CfJj;gSWR~-aU{=D3 zwN<}DGbHJksDd>uuy>L7QS!3#oPz$xsOqH$_nA?fL+JGUbE8>l{W4qLfRyR^n9Md- zCpz)Q+CUeQfU&RDvGQrna7|X*wo*SyqAQF<$rT`5H%2Fi#_w!WMzGH)u9QT|#Gp9Qi zfsK8?)UI9i?5ae|pOuTCD>{p53o3kZtV%1o*Qem-ULFnr&cUu9b@@SKs!YZqaAHyyt<+^)1||Pj@*6UH|idS?P%PX3x4e>d8;56_f^v%%HS{6`>Os>eMTUE0CCATk&Lc;EjIgmC4uUmc=m7V zUENsE{(tq(*8j4ikvE*&S6QoG1pHR1HxX-Pjd~@Kz$(l6?GC_b=nTnoD5Y9#N7x)H-FCBiynKbOErFpsVwdq>UVojlX{HsYG>~$-BP|BVttXL($zT2 zlX{X#jmXwzgOA*U$x7V+2;{G(Vq~z%t+Sn@NsW6qBOUeweCJx7(`W9euIcsR~cn!VLK4Xr}f#es$1x8*~HL1KQG&Sxf%_U*Vq84Y;_gu zhvDGw>e@b`*ySewr3z8RM(kr<8oM`0U|f{2^(ppjGMb5{7krJ`4zbqT$k>4EPL~Xz zC^M~>ccmr6BVyxCS+&asd)w1LZtwXfkiG{SeLMV>S=ZwVAVhX`TSeyPFJRyGb+$qB z_D~ewa!@h`%o3_#BG=OTvf$fwcjkcIB$5N)K*1-r!blHTnq%E&N=6vE(*}F=i0EbO>rMsF=8+8GC>L;lGy16SJY13P=nS{x*(L@v^|ZxThB z6l_m~yi@ZEV>qhDt{qIC&#Wnw6z|j7K)Y3=cc4*}2R3@cN9Ed$-u56`5QlE`_Ir7g zgf>rJ&-%p5)bTC)#X3i{{UIQZXJZ47E7R<=o54X!MAx1 z0=4>PLk!GJz9JX<1{OoX;i7qi9yIlGNtVtcpNU5W4(H|OSj+sXUbnA{<^uacG{%ZX zc2k7&<@%(oq;qWm}#*-&6;#^uu=E%r|{rg6eJheqNW} zaC9PoyMbQs#H%~EawR`pLf#yaxmmAMyhy|$oz%_M=1h9O)+c#Wwx?(1ye~?VFUoxR z-NtNMg5tW}tmn$gdEP$qGU$uMXRW*AE$a2jDfsleV+I4&6YIQQLQdKg`Q1^`BYsOD zVa2$65*rzj^7CCrP|*>652PU&GQT&yvm4 zGJW!VQw-gp-zWE&km-{@BzMfl^ojJ^T~jfADqXl~9;Q#FCnMB8eJXv~vyG%rr88qY z0m*Rh*ak?r8{LA^r>Zl2vOt4I51QoI9v@e@LHm7xixr>2vO^?#_@te@5)lAG_?)fR6NX#d@%Bsf}m4 zi|C9EartDxK#2z%&U4ESx@B?PN~$ZH>NZh?5CxO) zhx|6+k%?v+@zQmhEc2tn*8r<;L#P_IFTbPD<3U1-hwUr%HX5MgZuhbIh|U5?IN8y0 zh;(-=8}5fvV-QiX0h{NU${{*x&wswtv=pR#HMzQL@a!P5|!3SkA6TTb;~xIgfNA=Z7lb`+|kwR7o@|K?wGWmym$8 zX;dK$LAZe%V9;_hI>i8qmiZgaFZz1Rf)|3 z5gtDtj{&hH+3am1ay|E~-vY6)jy;eNKUVH;1H4-WR8s@DdR8RkLY%`Dp}G+r*9VkyJ7m3t8c%81}F0IN`G8tJPKc;%|Dfw#S)p#5np;kQAIl+3=fm6 zX`QZDAV)Vh*SE<+%21sL!APs8SCL%5yX3OdI(c^`PpgFWW{CPNxjasDaebV;UXkYc`u5Uaq%`1`O*ROC@|l{T|w5aAa$f)K3SogN%ScZ?EM0j5*wLOx&> z0s_;`mAYrBD~ZYbpnzhjNf+QAma{)bbmwwGhlIN)|duaoY4-{=2^W{ z>fOpO0Alv4OPJJ0$kmrynV(>%Kl+H!d}jk8QBp;}Ld-;np(yuUur=iop=j0xEB+iMkN$B&vtk&P=hzjx(Q1Abeq>hZW0LmW~5qgDKe6Qi?) zTVX+re#Gz8zyB7(7FlE5E<#-qC3E^pvk^WKV1+01)28+>>$9WUbnR-A1)pX$PiyYX zoxOAy+jZFct8wl3|IVHhV&*Nv^r*xlIG?vlc~M_Dwtd|y{Vx6G6YUj>;#MAKB;=QL zk9Tb(j0ge=+1+0rwEIiFJIsB$p?8eDh8N%xeCjhwa9o6gM~1ySZ;Om}=aD zF=-E3g-yM3b7NGWcrI7K9RU_a20MYPtmIftX9ubktM>5^IekON!Po7Tdw}+;8XY+D z73eU-htwW2K0v%??z7n?ePPykzYJMGj3pmOzYLhoc#7% zw0GG)QzwU^>;~PZE)HuMt%t*E+B)#s_v;`mXE*5Hbr9yW@yo#Qi_6LX#2Jt%bmCn{ zwdhO!%6hQ9Vs72!y`=L+xbK4s{ktt00OBliJ{ zqx==3j+{8A2T6c><#~=QCzRR!lVnE_XQ+9SUYm)MUi)W6slx63IOp;v&(lmekJCZgdRr^06$*H@N9FKOa10fAdZSEu=pG=a|6{`f&oKGUj zSwBpYb6S)qr)?1F8xD-gayo*SStn!@rRfNMFdG(k$#Mc&4VCD9Uu=-&ctRMH@;>$S zWI2m|S&k=!F(uqdb3LJtQ-a=3eSQyYv3i7D-!WP6b~qmwqu)I}ymjqT$t0P#7+@80 zQ5GMVcbDPD$(&fgs|mJo`W=Jj2pyv%eLl~$w%2`_V%sRGbs-f z{g~siR)5RGLoENdMrEY-6JWH@@wcH~7%0m5BLJPj6apG=LU;D&Xd%Q?)DYrs-qZ@` z3f;{RU_Uqs!`NGTqsG{4xV+t*2F} zAr0*1fpo&GeZeDZhZ;p3@F2TE1;wIkob-uF#RJk&e3cY)r1>Wb9xwlk3LY>2I}0A2 z6a4=ZJbsMeQMOM<@~8qfh#pl8mObj{Pb+*>xyGfBG&w>Eq$5VqGlDHPY!pAnzcS5+ z#yci^tUA&!vd8H48{^yL`JW^E`!6e~y8ORSQ1#CcB>rd1W@WD3LpZA=_Dg5`W4Pb% zl+WIdG?3%>pB%^`NU={3&Ds4ZXwL2@f#x`~?H;FIy2;%iO%{?mWgD_Z2W8-XKt}}f zg9)o28V&mifhf|`ABjcziO`js0T}+O;)-jjaC1KpMn43DuQ^F!a#t9OuymI2O5U6$ zTw4;mjC?ffo9U!`N-x7xx?-K0!{ihndrs_(K26RMfk(=o+ber+Uzv0JGB~%N>l1t9 zVlQSZm#lnM%mGVY4!56;(p8topw6d3bljgU1O6>tc5_`&a&Xx| zsjgQ@vx^g_yx_2@Lb=0!=I7x8XZljTAgXyrY#YAuU}~bF8Rk=B7EK zdaYMu;n|bk-`rv^3u!Lo1=3i${TJK+t5Dia8=R7M*WOy#*S)2xjB^Q7X*HtW+omy9 z;(j%%WzuZ!A1Cq%c-2ECl?1*RXM{H>dCK4dz z>=97B9;i2oZ|8FL;HBDABd3A4hp6-UdUZPd{9wKOY`)A_t8DN&B*Nul{P{#(U3l@i z_Bkh;C2u_DxJ}%g9FvHdZS+}5Gt7LJKWIpDEhj4R**OMpX^LK!FAi4cIe0Xd4Gpa5 zXfkKv-REP@AP^~GYK}i2yg1mQw5Vi4la*vFoGs7XM7<0Sc2LN`!9eKX^%B8|_76<7 zAw=T3*V1cgRCp6L*Q0oVBW@ygv-=UG36U^ruErRB|ByRvMtmtt!)(md=`p&+;ulFqTqhcdrB z>BxY=J6JIwW$Z|7y*J6w5fXA{u3*;43{5s7mi6A8Y()BMvk~blHqgbQsMKy$>prDD zNk4B(6iDn?=nsmJz9r;wUA$VhkQ<$R<<8nQ^_jd3!k0OQbqz zuuQ7aFz-sJs*yUemb!A;qdW-NuNBwFjzQ<^wqCc6;_MkJK;(t!&1CzTxMTh4+hkrg z^Yz(r(G=CZNcT+mr(n{}>eC7>#b=8i>b_h#Guy-^03)qj&sZ`_Ygw~`6eYRtw0xIY z8<$r%G}sTO5_&m>y z)Dv>q5eN_X>|Jofy9AN(tsn1W}&L-3J_+X;nrYYq6V~h{gPy9XBtKl*6?fixv6>qo6h4=l;`+kP+N7*qO zKiWOWK!)*b3V;0AJmOn&MG@_yd;Hiwo22e%=Y^7AQgU7U$B!pLQuDz{@=}#(Q#mg> z;nXeDd7%tGWT!jR-QDCJ^}!`|pc&hf?aM9t1M$){{V+-{=>5XHQ#ZW~5?oP&E1LlC z_@fitChw_~BfJ?wxh~{IP{<2g$dw;o%6Ji!q2u2sud-`_wxglL_uH3~cckG^I#LO{ zLfF;lcHf=IJFf&on=J7pvDM6;sEo#((UpF`8gnMMjR)V5*`HrJKpUtWh@{~Bw~d9M zx$?|3X*i#Fc@XFpoIwM+SaoBc&b(}B@U~9DD{=~9b-&}CCL4MYCtiM|9X=B%qGM>G zK$DS<0T+MAq5X2p%f)>A1>dfMZwt^0UPpAgC+J z37ObZ-~#D1*#r4>Ud}`0!*K@r@^afdR6w*)C`JK~4kF;COK^whvh`Mnqpcx!BKO;l zLu-lHx@GXT$N4%#0rDD;<4%o>4UDUg&bTiUV?HkRG{u@+o3~%UiPC^D8fcLqTX{SU zSfJy?sb6}MI4w%g6q|E_juIpWxWoXlK_^H)KOI>-Bk$|sahPP=-GREf86Jt}P_7<( z4zD1pGR&I;s8NG8nI7sxu5MLwWF9j&yYZ1fsGf3nzxyjiXcbh>(m@a|j_TjvBu&=N;E1Qg`xP%RF0KTr>jt5Gs=mOC}{*2@OGzZxMX ze5P82{(7VfojI&ZvD1!-OX}pkt&QB|v?4_v?dlzb3>2&}g-u zA2a9KJ2mm?gn(=GnTJY6Rd5r&UmOTx=%5q=O?O8xfLLf>G&7tiN3$wzblV$8u<~&i z?F~vs{Q21nvYLKanHXeur}YQI1QHHKJwnK-5AYF937sypYZI4*FeGRAQ;s9hqd?+v z-^;M~)0c$$kx;Y1HM{Fvf-gNs6YhmORS)@Mp}v1nEq*SLU60Jvo+iweMkfk08AQ$Bo*xzbt+&Nm9T?a+6j>(t3_ad|Fqh zbcU2zDnk3SDh#``JkvQHyK)`0n{*eZ8~HBxsbuA-LRMB4a_*h$d7o~F=gC@-M#sSV zl-bf1>R6Lyw!H?re=bNQ9X|BlZ3;4x`i|#m1`gI2ouWQMIuJfTEtd<>v<&B1)yY^5 zdI6ko>&KaW1R7C4CaN?jE7a4>Jf*P(>eZI`LtWcY%+$emBjYg6c^GnY)4f;fQacY= zO&L1h&fPc8$T{G;@+uDjZZa`7vTrsMwoI5Wz4|;Rbi(6DL7YXw6QnAiEL4LjxrgHx`tV+MhCdA}zfHfIyWB1_~( zKgfdLoJGUI@&g;sDGNf9qK9vKyge}Kf5miwFfJUyjTguH&q2ML78i9!PZSJBi63UOvj%@VTv zAQ1eymQgkbIpkE$s1D9bb7H3GxTHxL4S=R2mUz{hh;?6Cl((lMgwG_t%F!ojY)ywQHCdN3uFE|14KKagxj<|<?Kz!|BxPX=p*-zQxn}vFUmc7#YGXT9?Fp%h*Ap7NZF@o~KAH`ZjMhjp`uQU7y2U(XX4ZzASYQn+H0-??BJZO?l^loc zRtN?;%Lv2`Nl6F4>8e$3ZW!wADkE=hY9Ft$Z}togx^VccxfCY?078tr?)JE!ic004wAa;iiHO)?JT=b=b7or9q0mvl3-e;z5WwjiX!sSrAJ%l9YV0QRALRb zU?DdI=5e5|_&BWC$055oTm_N}FehRkjtE96MuB`oNf6XvK|OwKuAK3bB~f5$B18A-u>8NDspUil7K6I+= zoapDy(EX%x{yXh4>UsOJC(2J7db9XD=v%Dyev(%@t7J`cEH%H&`F<-TSs?p>9xm5S;USgE*w@t$>p z>Ngsucwn&~ZHvO$hwe3}ayzH|^BdNfnNxk^3N zCfM!#p|D%JSLq81J0a;Z3cHUS>z* z(=CGWUXF)O79gY_vJRx~{uw_AQYReN+`-nJL*RStA>wvDv|Ka$kY2g$QUr*2lwMl! zUG)1)MHbf(R0ABKFm-gsjv(m%Yv9)+YbJa1<2H4^a$Z5F&U6Tl; zY#ruMOQD4kq+4ejp#X%_)Y2&3Y-=ed`AzK4$}{o^&5H0==;urJ(E&Az3Ax&cgN)G> zLvcdEd!S7*w8j{PP`B9i!zK#>wI@j=(xrukAA`2MyP!~NO(pi2fxH_^d5_{8I>kk~ z(u@1TKJQzMHtFcmSPz|0Iw%7a;(WQg3|a7$yNgt?y8F^G`Qbco&e@v$po~M4AC3-{ zPF`fMLw=N~#>B8@J512keKpDs{~IcULl$_yhwpU+c8y~s+EcT(zM55Kk&^>voumZa zGwRl81hdwlM~Z7AyK3;-)w~v37fAOpj`17M=a$q3Xx3@=+DvL7#qv&HR3qBq^pIs*=<-aKWDsG@Kt-QbsGYK}qSA zs<4+2w4NVVTjmc}TYlhpqW~y8J~Y0jP%1S@khCd{BCpn z`qs25^g*-ApHLfZ@_W~_O+ojaHU5O@80OcqmAy|bTRBij@&=Krd6Doi7VW7$k(GE?<~Ti*0ojFfx|; zy1`K#TupJFvi-(teMT=Uato|W9bl!Pw;G92S0+PKeE7lCf<7=$V_K%XCui5kO@3B< zWm@@rtN&d=$%M_UKL47ckU+C3{$pLNS}6xY7*kLHaP&_#`#3X$GgA3hCmDE(eP1t| z+lsAR)hwGJwVz10#EbUZN+i0FjTG7jE1kMKvCZ3$3=huQ(Y{v}t6#6ZJX2`u{Zwg- zz9X=7q?(T(lkk5tpiaubC($HZfOGnEG+&+O-;&L4@+t=(2fDrRn$|pK*RaU9zDz(Da_5w z@1}N63Tn29%*m1I2xpo#ooTl1tY_}3d&efD>ko)N&Zgt)AqigG6;~6U2Uh#O+1}kc zp>dtUy?K9ECU=(-p`PRo_Q8pGrhk0Ohc)v-Q{x`9R1eDR&Y_O%DGzG2PW15Z@>2fR z?((90^w5i{>1G4EIZDUlM%lF-TEa7FM?1x~w|9DUXq@GKmX42`-u*&*t$zA(j@ii} za$a5Jt8av{$*ynZY{-Y&EZm}v)F4sF@MO){aCMR9k-kU+neO1N1b+6-oA1B-_6!Pt z#lRdQ8r>VfiL`!=%2g-B5rDB?{FhuOH$e$C-SP0zP-G?*q$kw@2;b;>^`UHWg2jHP zI5KFGT)!IV(PmEa4%B})aSU9c<;xm^T^&t)PV65+jPibe4sLCL%CTRYL69YxnaQ4P zRXbw7>OY!x_+&KNa^C=$D3l+JVKb@8i^zDs^Ms`b?DAsRjH97RKH1w+VRzM!9PbR$ zbvBiXy#Du}-|TG>Y4_Vt3CTM*DzZlQYjgttqi=$1ihd1Cfejz(%T7&y^gx*lt8?tET zg*z3%F>kW;s(_F&hq!UZoj8)Jr=r9Hed=EMFV{%Ebky6(2M+B5x~5G%c1KpXdhHMm z=IbmXFk?zbYMx1}oCRZ%<5~NK85x58^b;LKiR2R9M*T{)O{rH$XDdp;_mQl8 zBde6Sj1AQ=>WLmCP{}@&I7Cd@m@pOaebJy7I)`M(Io?}0IW^%hiDXFf7^Rvo7s!2$ zU>$j7j@`5*!C)jJA!Ewt8mL}qV#P3lxG4%MN-X)X5O)j594 z3otRt{?w}cwHV@Ds_Iukwwf;~OhN!(H0rVK7$hONwrRq1i@->%bG-BA8q;(IMxrf` zuZDx80tb)cTcjT(?4YOJKEl!I)rG~QRjYL)n5NY?`9<;VR}y}-h7SM7<}a*hu+?%t zN*aC_b;Ni16<|pmfL0q=heV+^ya7)0O?mDl;l&hIIzNVD&#f~~yGx)?Vk5Q9Uxs#0 z>Q052?mUv9E2h{EPSTv0&P7J=PNO^mx?^U9)gxk1sytht2|<^{NA12X!>qOlShY zMB(2T_B-G|Boz=ghA#xIzNRiL_=N!gvwBC#3sqUl$6Tr0t1wwX9>^V00LTj2e+UyXaKRfHq44`J3$&d!9S$BT-=*ToOl7whtV~WMRB=r>> zjZuQI<*C34Fx@9W%yI#iR#~4Kj7hj-QeEAV>dH;URu$-DBOkd21l@O*Uf2!?VWita zHy5NWMA=Ka4bi9ob<-1MZl1Tpp$?YD30T|1?wc#1*D7-evlfBvEh3aQr>lqOq^xrx z9~wQ$h%Up4EKNsOA9N!B8cMlR0$;jB5(8W)0ith_HwF`cQj*9oKpgZ-OIXbWO*!=K zX^=Ec=mH6-Z2FQoN}Z8D=u3HN_II5iTtZE`g zHi+I?35jn`6Ob>lI_gAw&&I*T;2fu2&;{26K;D4gz<_`<$O9b_`CT(0{K}eBnl=)N zZcX(1<>mPo0}WQ@San zMSi7Rou^wqbjR&&Ihh_37D!phfG}G)QR5$qHzd2U_DED!?-u>Ni*2lP|E3zbUBcy% zoY~%A_Z-)FLij$uL*@qPeh#WnmkIcqhN#uB#qgCP>6Uy0zoFZc_qB&9X&$zx_1fcQ zZyA$Y#lXjw0w4y`rA$CL}R2Y6_ZB zl1$5uin&t9#Kv?x#Ju=Xw5XJ$=$DAjkM<$UNkhHL3OhOY<{C_b-gdL`-;@})6GRQN zWYEXKgj_i~ehNNEjs~%{q$WEuVW!ksq@+#u*)#)jaqd}>ip$|o)Pru{U5hJT?k3{a zbj_i(I0oFY+_*Xw)s>)DeI(_pSgjgEtQ|N|Zs0(DSvgs-0WgiEZ~4I44~Z8ymIavv zxv&sgECYR}W5ywNMI+i{A_S&=H0ZQ)w27@y84GaLn*mHQl`CQLbBX@B8tH?S;sC&5 zh*--HVRT;9#nCXU1*=0ZMQE9<(9P5f5pgT zPIjO318o6J^2~*wY0cfzzAiH{Zf}))DzmuD*`3@WFNt^sTQ$Hro>Ppc#8f=VTsA@<&A+Ts}(kU;zJ4hKl|t4Ip28{pXA#cJX*EoBm}=cdR{RLu9oY z1ArPs%lb-_j?4Jz0n!m0aHY3{Smv!H2oA&d zkhV`JY4}8t%@(g?F;`(!)xUmZ)p2255l{5x%QKwfYCV}2>!2Gtd2YDZ)@_r$Vr>+b zU@L?Bd9qf?6oQAolf}!jKtJv#_sapE?~tAUAq`HB>WTE2#_t`6yoIQ8VfGq=7X_a( zxfjPM6Uv*BOj3pf+8tQl)g63(R)!YkMHxNQ2r99e8M(IXSqZbGArY3G`)?yxE^_A> z0|6Rhq;?Pw1yME(Za{3*)%qjw3`Jg9Ly7u+ukfkhM-gR{vPWc+-<2x}>e;WglH9P& zcl$gi-uef!Wfpi*ln7u(MZ{WpC(1@kS#_|yTC0}ko*yvf5Wz0L0!)1_CMK1X*byNK z6FQvk+?6W1I|?(md?nYfw~jB0cZSp|i$N-S(4a_sky1xkNHuI=An7hPXf;^>&s?<& zc8Uc%GNy}G&!4gityg>F4o_RteErMM-)-mT=Sxumc`=f_IaxFP!}M`96+P;fR&&Sd z`1eNMhS%b_0YZ7v3cT~de+XcLA%rP;r-gwQC#(%wpphhDGgGox(BsTnI*u8<;vE>Z4@ntyp65{)xKjgfIfRF{!Uh|raxj3!7!Sgz!)qbJbb8)IHNw) z#-!1k#%6-d6l3$ixl-KqpK0A50UGYwUFZW-7tWnD(yF@mjWzDO)yBu^Frc3?xa#TV zrU>rRxN1r|CX@?guJgKb^3pbiS@XIvuPY}n_k6LLx$t>d+c{uSRI@jy56?U%1F3_x z%N+B|?&Kql028gWLvE>#wF+8*08(H}Z3`+e(#Bx$x|7iy;XvQO`Lu@P(H*P!9`BB~ zvZQs}DgCaaTcqGh3a&y{D_U^tUoJ1G2F_IPIy}SDh#Tqf4RBZsu-aq?!~5k(W@IVF zK?|m&7?l{AjQ+5G((3>~9O&?*JKEX;=|)xBxJ{-_x}6x5hO!(Z(K3G(9Jv7Im2G_Z zW(a7LyJN@2y#=OYOzi4c81ERnEOH8g80cvgtH0Pjlg>JGcZe&)&) zgrB*#HSA@jz%5-aNf;=$I(b?&WxLYM-t$ickkyxT1p}*yiI>K3al+Yk5S@;A!ILOB z+@HRkc_+G)v)1M>r?(07^*wR`1H5A~Hs6TkC*!$Y&q0hE9{C=e`;Fq_3o2^pThHpT zM_FBzdUBk^o1#d{&gW8zp}%0+sw&8JR6dzX2<>};r5uyWw@E>_N#4=vHwWKlw+K}h zj(MveKU4ol)Xh1WiI zBm-NlErBdfpB(ACE4M(&5h{lOJ|;$UYbsH(V+ywtN(bUd15HUDJk+hh%y~(7-O9Kv znAD@KVq8n%Zgsd%bXCkX9Z11VNxJuDZZaU*?8{amc8h4@%Lz>@!n*wMHMlgI=vq0G zTzT(TSmPKQr2_?M(3MCJE)5Ea?di{XH`lYgwlit}J} zFE6TwC(wfPZ~|i0G#P}-E1be8#S~{}x{0e;=^rs&em7t-LDsO@)YcI}llXL$qH@qE zm~!2-gPBkyroa-Er$I$dJLuV_0?+7N=E@fJoN1ay=l>N$&gR-};cR0RTOeUK)@`xS z79+_U%rf?==1=pCyc;BI{462+RbE=QfBNzDw{O1v>#KL){_yp;KYaV<7fpZWH#h5< zF`hD?wL>~-Lq)ep)_7S0ctS6uR9eNJQc6qhLE?daCi>F3x~3g+)rU>%r!JD`Mq0n zJGIF3qUSsBd;!t4rPgk4Ol73pD0rhuscosk#sYU=%yQ(es!ig=_ z$Vzk-aoX^^f}8D_hva4}K$5NjU4eJAR7u;w#vAW6d{(D@s~J_8_}c8QT!g8@eT$qq zBUTEI#5o5kFu0qEd!1%eErrDJ_y6Njde5pq#w`4Z*;v8K3sMogo6V z1APFTb>+ykzcDDM+f8~R|AtQ5?`z>*T}N040Lf`5?~Z9?9#T1GuF6Yf zu5x3$y`lSx<|^S3%HAVxuwMo|1u^{K;guna8Chg>ca8(Sd(H~1%e2CF;1m@vBT~Yw zm4u2H%0e2g!e`NJEDMF<59H>02NDMcMd+-6P=M4)=uZuSf)I)yCODy$+aJI~x*M#* zskxo-_;FZUakZv1)bB(Cq$(Ep7}=dcNIBEW5;&nW1|Zex9rI<@Gn7sgrZ#>rQN&7} zNqE*nxaL|nVR=d5Ojz8OX|_Z;Ew=a2+%BY|$wuDaI$g~J$hQ|5l=YEEG2hvGRi8$9Xgt-%#~nNPB=;D$!V41?`+c&#(66_h?9cE zC^$X7TdmQkckld+sc%RF=T?xy)}_NbYEg)>;U2m5IUe8M67t-f3bTl7LpkH}vFqz) zowI`2xp+x8VW78Mp4F>XbfkU6kPjyL5m_XhgX04!aE;v6>%i`1ZAN&rl}BxWqmT;l~VYzw;2A~SB{Q>AhAvH-4D}U%D%11nj<7%(O%m! z)(fV8AXNy(|Ef4?ilQ$*;_YbjA!>tTzYF9eqH8b3n(Mlp6ojxPH71^}KuN8skZP+M zH(O*1PXZwxt@a=ab0D_|j+ZRD+&Ru1D<;=$p(HJng>qOyu6}qrm-&iuU(v?=ZZFGr zXS?b4GahVf^|kNZOe`T;v&9xoqH=cWqyj2!DS{isPv`Xq?2dr@pxt|;u@iQMuq%X- zwfjh-8i~pvQH?~UN;J<_JHr*(jaX+(^|XL!YB*Oiv-yZTc#M)$3S6teH3hD9k6vr5 zuw;aqYPs0ra#7h4xnM?d9KuzlD}Ur!N}`TW!>AIXqH@o_`swwz-~IT57ImmssH2L> z^r_$3+9hgtdk|wg=;dLt@uIC5(>6vb@vqJQobD!P_(Kvg@(!eSOLf@`=WX&6+7hU$ zrfc|&Sbh7|%!8X)7lq9CXh9O!`u3$Rns@^Umi=f95@nNsta2LAGfEbv7eOwwv;gi90sm zclLxSV}nM?!tE+-_k014`wA;pIstebx7TvN5B<%=R0FD5uA7<>s#dvFZAf+l&i=e( zBG37YeIG6|vm%z>`k2$oILQ8plGoW2$0!j16kNn|YrSRi;qvBA$VmD6{rDLYnIH*x zsYjJRL)g2Mo&@^aCL!-Xq)JCW6WPn%&W;Mns@eRsQ9}R71fB%#hz-2U1$?+ z9It{{e>TOBRq?z_X#3cGOhq+oUl>*sy-0Y<|2Tx{u`1||Wvvi6D zd5}#xG~46g>=}nETUsWcTX9Bhu2!l`lNr0JaqWjVI~-(UP&9s9{rftP0&NOXXIP`G zu{e|I7Iyt&vNzJ1^~W6+JK6TL(ZO_v%^G>LYs=weqB6iaM(6R8d}a64$f;9rwCUCm zY*n!{MV^#mY_r~wEUX`DNEJlovOUShwvuhs_SVqvw`jykSjR2weL*Ki6LxEg(wxfE0qsB_r2eMw`r?(}ca$FIrBQncrc(JfTP@~9y30(GcLkHY&hn3@cR(}|PE z1es7B+y-o}#BQqd@&+cX7uAZ#XfG@dtJW4r?!KaH;RQ$+Ca3OY-f^cBJ?m_r(W30h zLl2iuYG$9eqT`8e+w8chj0!298|N1wlMyq?jwbMz-4R0W+N>g?4MC1^ z?%r}T*{R%_^u^fxrAz&!iN0oua+ zOgmk2-^AO`oXJW6ss1k6?~?xE5IoX|Gd9!Y-kG?&fzAkAvA-wWD>u7VX&XRO$HR6D zah~lxLl|1u^%w_nfGId_s}K7|*>Ze|Sof+(6kKpr=@dvl|{ekhLKm+j9RF3OC`8_3TIrVVLVGgn|D7NU?FIKp7! z^zm|8B9v|Bk`#;XgRSSM#cF>^?pO64XyD_rCEY!kbM(K1SUa!35IBx(3!0Dm`4?@7 z&yiPi3l*#;8Jq(WjcQED4bcGSuJzqf+xnbhF7A%WPL3$<>D_U~p%Fzs2WCZFO%tr+ zxSh-=i{u!A%HcHKfIOe9C(zlbCPZZ0(0sK=9#uDqT zJRd^$f`SEH-dDEs)hRv_N;RM>YpBGca4X@wMJpjH7^;cAZQ50i2_8<}JT(slnT|j} zNbNw#3`bK_DeY9@-^Dc@NfyZ68@qtikj#nD_oa7zJ1UCs6Ze5qyuOC6vQ_@K6>N=k zVq~dPAkPs3L~ywQlr$5bn1h5aG!`oUpqr1}gx;8u%u$n*q%c{zHb$f1W(Sv7Sv;Y$ zO4|;Z7~c`iEPT>aIPD{|%2}+V9LotP#i+lqiYREW#oPr%N^DIEL)1>3p($tAwUk>K<%VBl?h*(A2yz9?-6uS4 z$AixXG|eo*s!wJd69A5%%{C zZ1lP*sKG?b*#QL5MQ%I>0z|M@8dE~o0Mvy}vY=-Z;*{E71W{_Go-xX-ojt-^EMHU_ zp?6}X_@{DnkKaTRj+7J zE?sE*nRumQK}&&E#*v1SeYGBg`0W^L+%bvYj+==JfszaPLs-EoP5FlW`0u#%(;y_D zl>Mp3d7^S2y9W5VbP4IElT6$Tu<{g2gW&;SESj&y>Br-XJ%TCOT0H0!v1qKn{KLs#M#^VIpme;|!*|yT2Qdz2y=sFu%$MN6UKtoTkpNvFp%u!_LC z(Brv2&kZ27s+Xt}B_p1OKQq_DPhbo9S2lh;vV|G!n_sexMnb3o3)ZaKm*m8Ll#r<( zkVs~8Xs-ip8g18=m^Al*Q^2W`lLy1G_l}L-esOSbu3m%uu<7W*c2Do^Q{E2qqYB^} zs*PSPbA|R(Z!w&V7oi6#V|?szq(eftstX7fMyQ?gDCbEsA+7m{zH_zQt9XP1{3AX- z3k8BUUeh9l#hS8~xgUs0Xgc6lYtUBwUq(aIm*vMxGctK#$1k4E0%N&y3n2 zlrV>y%*2ClZY=o``efqq>&=ZhTI9~rLYFm=GvJ8sZV~b$bP1s&jx0$t`OEuV1*o%O zqy%+Laf@(VPk<#9!HF(7QQoq=SjbXcF;wtJ|Et)jadUO9DLTQ}QJlAQkG((i7!eBx zLK{izH6j)!P|e9bj}>gFw`0%UUM!{vd3P^0z2_b}U1X_~Ct101?C$!$X*`!OUOeR* zhS)DR9C#ncgkazDIVlS_E*mre>B{*e zhW~?<4fN-)(J?B@|M&d)b1(es{H$DFrGwAEDV7(Q0Q3B_ABuJHdGeVJp_eb3GGF3h z1;pnBJAZlXW%HUYVo&$HAhstksOsh{Uk;MhY5jrOaqd2C3L=(hpvIZjt2VgtP*bJ!;^w;`@Fozh(L2V0E73sKP>rfwc!9 z^gg9xe6t7DVQ4jA{Q2O;!474EN+gl^Y_yHJ5x#HG6M-l-M;ILJpk8zhMq|)*@Op`0 zMEeJDQNsa5TG#@xES0gMLf^yv<0rb@?^*cIv=2ZYH7xxvYuD0|IA&ox;Cz>!pU8w- zqMoG@w2KQP)|;F*eMzD1tf*Ie2Ze1!hYl7B5f8ZcaDA`7=8DAdD(=e{#V8NHbcK(v zu7K(L2Bh>?Oz3<$G=`F|iAhd@J7zaNFB9^cw3`Tf3~(s=PT3E#<^_+jV8zJ8X?l^I z@9Y^H?V5?j4u#}*!%B! zoS41;er$Gy?=u~WGnOjrwaNAM*vfn;j}JDF596ccHTfqNNf33VzCE|g#)$daj~?2H zCE@{#R@qXYuDU+1fb=i#lY>ZI`?8qdCkv8?_GPfXPXK&#Ez1ngFk6k{-#dj;eU_S@L}>Ud4<(+IeEGN z3QfOw{P;b7jhg|9xay z&mp@VC9lWXMe_YPJF?9voq}1&Xy~8Wc4ZRCl%Oq4O$Tf`w>s^@n_8{jCQV)(fXK9O zxxsiR`_*dKwBZ~=UL0kAb3aLtb*fdt z0%C^2WP%Dvjh~`5qIm>--5NWWXk8*B{IzACjnM_`D*^{>b1d*K|1bxsuK$pD1R`6m zPD0L-ufO$oe^94{nzQLj%q-q8lL0Mx}d=B>@l>#0emfoE%*egowklPOxO~CE1LWsV$+wJ16c$ z;-p`fgqebxQvGsN9q2ehlUB(_iG!T|fR2i^g03KX?;VMz@+a0kn#h(=m@Xs*k|-DK zxkNZ7I$Wp?i=!KR_o8_)#|oocCR6xA6TZ_qs`oc4g?jy2DKSjImsW?NIzhW--PLYc zcQIqTqhz|r>3#}x-uk*mrY&6|B9xDD#K4KReS)S`1A5zICBKo0G1(TCq{&bRv!&Bu zc9<$-8sHf-<6iDhp#$RNVyad46uy*7$Omdc=z5xtV;zeWIAJXzgk=N(dO5)|^#w+J z&s4`?8sbNxAUY!HI3la^BS{z`>RJbDFyyO-1f8oQB;y#NYUpwPsKWCA&Z=j#;jwYz zU}o>Jo}%S!x{G5?Y9dL1jZoP+Ok55b!4k~CX>un0PL96~?M1D255X~2-nc5OAM`SCvQ*e1-NlzEB-=5WXNUUICGkm*fc=yF?qnS5zI|9{vukD z724<(I=@Z)!hm5hd4dDgBLVJ`Wh~s-qs$h2#g5mP>$6Iaz#+~F_WMf^2stmz$4C43 z?9Hm%n|oWf10U3vAI9%q=vJWDa6EbG^qM+gz8vX_(t|N~@RHQ;IE=jO@5##cB%P3u zyOXDy*5mB*R%4G;5LD7?itD;5q9X*xT}fSI8d{p-d85&MDrt_4tRxyEbYOTt0@fu~ zeAQ72pm_~~q-g}#(p#293Jd|1;y_pw9b80d-f6Z_)JnJ|;6nl-JW(Ybhe=S`rHjWl z2GhkdLKn|W97Pw)7+pN^>Ed~E3<|Wr?oyF;jEbynXJp&YNGfF6LeR4Hwqc9qjY!-H zpZYE`JK1p_49PIopQ{H|#z`M3o!SNTXcq^V)EtUZ^9$ly+~T=RIvaTutbP!U$b?g)poxhniCnU^-J9-J$e-v3Z$&$eb_t-KLss-M{g$J05=z zJLjf1sdNFk>6vd6{hM!J?Z2GWa1Q8+(ud)AHCl=U? zwNtPvQ4TI{yAH}lV+p#V^TfI}&TpPgKZS@+i|16!v+H;2iQFCPZs>CmsN?RxJ=7vn zz?9HouV_uXiP#foYt*6Qg~;0KOxD$>D@%`!Eo`4`Dw8?4R_kXgQpb{`5`u$w%(3gT zz+odw=$g^>%%Wqexy%k-zF02rihi4jGrY9#R+<-^>6>GnARgn5u~2%UKPrFwyGS6JDuL=FNKH)}Pd~cHk&; zUs|hG_hw4!>Av@g5CVp`=35Cp0%&0{PnvQe01!9U+=H%srv78}iWN;xne!L_2b753 zeym<<0lW@+1M0-^5`b3Te-B9CcRb7_H2$?{>hGNV^m`0Bv-b>z*Uaht$rMy2%IGFTI7!tb`8F{lU$p-VRiW%5k@&f8E$-;jygkEf z*)*sqqB)XqM~v_EXubx@^nH2mKL4cU2O?b8HBRO+)J;cl&ZgxCgE8FE7U&9f5t zJ(@8*Ecia>*On8g7*1yW=_Fqa=zI+ZhzrnjRr2lq!Ws7`bmiD|ypvx?j;&tY;f~3% z?>YILBzEq_B;XI4%&*;~HsAl2GW4jJ{2{&H(^=t?dDsZpbT-GxdIJYZ{F>TCA6!3P3Poj^K$F_@FId_VV$E({$bURW?{>Tk(}Pe!22Y*HKku)PpeM;2IOme z0drJvGL5d}Y|}@TPa4LV``@waY30gq>Z1M}!jXv5$cK$YGz(`W?kXV=uF^3pk4RHX zd#sht^W3dj)9}< z#tJUFa!pr}zpi;945y<>HxO9D=ldrwfPxCT>ws-S>$iOt4+FZY&8oH5DskA+kbE9% zlgrf|5r=C?KNq8My|V`a)fF#Q-h26Cw%dnmibFC+ueTAF9B-YyaJ7KfK{1nw5|#wv zkeZ#K^s`%hQ2c7ARHNtdf+r?{K$~_u_3EbMa3`UFoFI2s)b2Ntq5d2~YDdbW2hlbp zuz76OYWM5-T}R|SilSW2=oOyq;g0RnnBy!PlhsOcQV#iRF|H?4`rtnO&*`Q#y&9qO z4XHNih>m@7xJXV(7JnAaZMCu9CvL}V`^RumrU^T{22iS8eXTKR;B>8;J($Pg>`ZOU zbWS#b%*lU7=Ua0xY(49Km9&a4cIYQ!4%g%cM(K>npxarhDyv>cP^8!dyq@n(I7K1m z6HM7rk2ey{BSQRj?z8KC1~P9b<+c{ov1_M7mR@BS3SfLc!nYO4V!YTo8eeT4?VFA@ zCOh2DG<|nTREKOs@Lqb%<&$!Rf;R7_A2!75+fkvOzbEm3f6qSH54Kyrn&-utz1w;@ zev-cQw^X%TN20&q8e*#*A;||yV&Mn?{Mt#cCL8b_BI=o4WV=wfgv^yuf?OQDnwbfD zq35cLR;k>>9BN<#)aeajpLUm_g1V^?>Leni&2QP6I<4p?l@Cr@h0n#dW=*MtaE7J} zXL!gq=WR&;WE6x$IQvB79fUT^(z#Cqw~$ueryUSM^=_R8K^vcToNSU)676$>BXs64^Ew<^Vlu=f(zqZyN0 z%j=Xj>=YvkmuBkQKin|V>d4HB$}bX@!T}RPfOJd&dm%ZTv2^vzssb?V?ZGZiJ_ozA zDs5lTOH8aVB5RMiUHF{uDQ|HKIbzuP zb106rssY?&(}6-z2QU}LvNEOY_rhcv$9c}VgQr?X@Kh%oQZc8x>~g9Xo6-m}KEh!i zZAhg!>}8C@zVbP2Y~RTd-Ah^rJTh=3u>#f}+~39XfNQ!dfxZI}fib;{CSKgp-S0P~ z>g(=To6_`l_v;O*Hg)&+es{l5UL~(b$(zjO{DL_=N`A7eg3Y5#;0%OohX}* z9sdyb$$V#czufV^q$W(5SF@UtC;N}eo0~9O1WiXT>iv;e>%u;TU1qw^E?UqBBi>Mc z%=d)%612rrdV`YN5LwCO7pLuYS_vZJU=@8iMkFpP^2sg`FN*Wz zEMY2_TqW-kUVzE>SYm@Sfbo{aKrI-$Ify{T5j*3gM^A3A(TYBusVR~U=FmEWALW8* zordDWdIUzm`sf-$w)-j;4G_M7=K?HS$bur8uTiW_ndzQXC7e!r#-(azVJ|$%jz zR}i3lfo*L>$YRnBrmGq(Sdj;0T$eGU*@3S&An)>;O z`QKPP^Ep-uckn-=9lZY!;-0)dMrYlxkI_XxV$c3o!Ggi4z0>$N^w~vrmA%jYar?8n zLfu|Y)AOXgnxjpZ zQ*dShpDVBe_%L_J5eo&} z<&@OOS5uv_3f<#Savdj09ZZg&0jCd=b81eko6LP;z`jt^SQgglw6?+aO%i3YN5KQm zP(K=QPER98-}DetAPb}D=8%VRFT7XvRY38DeO4Z2RT=uAqHchWM!px<-Tmf3+s$Mz zuEH;{FbfD8c5#h(IMj()@kBg^JFzOlAdSFhIH+e3U!R-*NAh*@9T^@aDoQI<5Vo2m z$U9+;zwX@!72$fnv!_TGp13kxz+V*&@KWvnBm1k~lO>%L_nr%qT!toRey2Kohg6Q2 zMe-Y<9&e+=ipDtu`5k|>w-pre564n(EQ!mYz0*Vged6@+LPk=UL+)*N+L5Uena#3X zXztl{de7~Wvvk+-J+@8^I`#Zt)MzGu(-c1WQu;Re2ER&{^{Y>Pohm|2HyeJLeG}VN zb#fW;D}^wrNna2)kF4KG=PCRhy&*km8y5>MfI%UI+V&b}?lo{V9TuI9Mnz%XY%h}M zn@qN+pBnJ0EHAWW>)~Ff8x1d*<8BJFyj%=iG$)%I7!2fIhhyvE4VQ4gd-MLCcH7T% zAJ9mLX!1I)?0ec|aRz*6D7-`)T(OVpUll-K3#G^dxa3X1en(7w?+WoRO_%?7pa1{e z=l{>R&tLtP8}+g4q4$9tXeRA|t4p8Z z20)BNj+rwsF<7QqN6i`NI7)(9Kg65?nN1UE0vRq~mW(V3D6WtIR?Myumd$X% zx;!~Y))9%WLcY-uhLdQOosEYVlQUxEm)Y@nctZBr_Ap&mmR~F_zj#I$+tZ85+>ei{ zYoC|HSTb^BxBZN-r>YY{!Hl^H|`1Rw_RA{ zeM#L{4~aaOO;ya@yNJJFqfl@`*kw6kdxqCxy5EJnL0MN2NiqBR-PfquM4k8@_+%J zQgmiYJ4ko=+qz!15P<7jn1tlyde!7eKG)CWLS8xS;7gO%A$MaB?CppgB$4m}%2jeo zz8q&cxlGdT?JrYDnYh}~Ny%Zo^I>T}+}e(5T$b|PB{RI-@OM}IOgi#+!ikgp_IG^e zjzPEYT;ocnDst1P1ydg?$Jw0@T{{x+Vp>7p+Z%_ANgLmQQ!bt5+9Z$gWzzGj?7FD( zqh+z+8(nLxs15aP8_3qd~&6{OgcO=Fr#Y`J8s6J$Z%BjBeJ+arU`QsO=md zA0MlPBB4{4(2nZGmCcFXI*BOIOLJV;w2Otcl3<&eyi2{HGe@OtLazV`_KLXD7qp%y zm-bOtLld~m;C-HBCa_7#XUV*7s-hv~)_R4cXBejP&&Ac3rptBd8rsem&;+rMPD*n@ zM{titF%g(3tWOua8c;T~B#7_Vu^h^{N!hgvcNYtHTc+uZpw4Q>=A_gv1;Ig5iL6esQ5es@t8AM_e_466lZ*22ZoF(RjVTCeHCu6DZTYo2mCOeUb0 z#EZbU{NBjgzURTy#d0u73mIFQJMS##n|Hag{oGi5ORnD$5?*ut=>XnNcu)MAbDrro%RM{Jq->Bw3o2I$u^2^oEH*nos^`z$-elT zf%@V#+}jyc1UIZhmWliILXvkj!0Dkdu&0Z{?ZQvm-$_m!-AjH@w42<`L?@7r^7kkG zO?OqeTj}p6#MxcQCy09X_ZjlJU|%~VtLfOitf}<&ijI_G^`AnWJ*wI6Zd}CelI&CV zfjHKRnJCSTn;ni%fzBouahAyk^0x0IofGXI6pK+4534q;I%}ct#BoX7JRQH-TtkH~@poJkE~$t=fNPqw+y|jR`~= zXvNe5%A@A~u{ZZmr2srY!@odx@>p(BW@e38wi1MNCc&BWAj$UuJz8m{*gACJwVKf;XH|cWQDn&V`i@G8hq{J z#~2MhgW4xO5=%`KoEr7o$g#4TD!W#aJoREF3DOR)Gja=)N@VRuahOS{0p8Aq4;R`LDUE zzX@2IL^=raWqmuU-dY-2?>HOQfO?}>JVwlkJX4=MwrtmlQEtuMx7o0i3|;=#jlV*U zA@|~a-&%XIhbzg?=ZAK=w-z8Hz7uFI)OL{jBHeC%lWFP#(s(g4uBJp{i=&MrxLx8T z6)??Sh~^sg#;R0ZkSE1*n^Ric%5; zL6(%%1j&Z&hR7bx9#W};V=Y-z#Y3*x3+l8+K2bqxNX8khMsqAA`=A}N(zCePmcH7h z_++Y$+PA^hWUc&T0bCtu(-{z_$+1mP7C4+=0mZAXPUuK{qe@59F0WCFDOuK{we!!faYka59H=LS1gsN2gHMHO-_tspI)qQA-Z>xInv()ZAoNj z&r9w^A@Hi8iEUK6ydR6JeFJHDGvp}Icsi>C5Yl;1dlob4XWfmrNr}F_gnj~lJu{|s zrSFoE2KIv%mzlws)3^ZeoYvjQ0*p+S56DK{2J!Z)sGtbKW6W1OPgg|Qm2`t>x)K{K$?!4ytsHBQ2Np?9egrR#R~jQXq%YDk^NlXCYc<=7Ciggl z(0Kc5;=;#P5Hu^YO1G)x5!2PlcQrH09WI=*aq6Q>T|(~c#hYaFZoF{@j!#+reMwyt zx8I+*t4VfllCTk8IoQTefq=F>eok+02OlFqb?_M;RR^C?w?ngr9_Q;HvK!Ea4(R}Q zVV=#batkP|lAM&Ej3$6jXN0zv_wmtaEFl<2Ah0jSSLl93nrF)~S@ChQs571D9EtFs z(@XBxqscjPz<()T5r`1U6Z#RPGh>SiE;DHEE~LB_L%`{Md_|R_5bcvFSFTdm9VZw2 z3rD$l2^iY>X+EsB^wY@mp$g=p3lm#tm>2-9^rm29C2?lvtxhoT3)g#eB1Mvkdx5Bi zQfg};tfX5WtdC7}LW zn`Ubn@1-iTN7mRmL*Bs+Q9C5p6?31@MRV-8Ye?D^M>s!N<6JZ!RgMbu?feisExCrn z?utL)(Z;J}K4!nA#+~etzqDQ6ZL%Wequ?WbX+kgv9z#ie>53><>U}>L7b_3#9TvCG zJuxoXb-Amfy-}G*yS=1N_L(dv!0q%kI(y;mX-+?r;jPQ@+Ue$UT;J|1c19lqs1I>E zR0myi?`FEc&Q52g%aA#!H;_BSlGU0e13bV42}@?<RMP!J|z99mF3|;UuB`+2<$8%D@W6qH+YO+MFkF@%fOfJ41Mu<9Fc3TAq*8CUY zNNFV^9~ujD@KUo!nSF)eTniDgD6%i$DKFF4VeUugW@u$eTIj z*d4{IYk6PUeGL!;#*BZ8qf=os`~n%q6sRn?{u$%aFMV>f#E%}~EXh;sy#6pOCN%Z- zMh7OO-EMf`upHQ}wBl#?$P`5tmJ;B#%>p3Lx#}v50?mCv)8^}@J`?F%lhFBv?9qel zkp`Eil}0S`X_;@Bv$tzbONSFo@&&(;k@Ec!;52*s_6IX8`{j$}{-~UEf+;pcUp82b znv1RZ@*rE1NSV%~Wo2gW*gC`Kq5Fj!E5IRfo?^5{MN@fHO*$nEKSt zm+MB|QIr%Alw!&(x%uR$mM#~@zx+amuAH!+n&P6Y*Q>wxgj0Me{5G)KAq$mAD*2HA zQ+`gu9%XieOoA|3eYa$26Fr%gzQ0sxSw$TA8=&e<0XCXV^Am$QneKx!YE>3JvCe8v zwzotIP6pqSV^Mk01*%X%k86L`(#evbijUfX+&E{_xq@`coGGz$piF&;_`0Ei}ZJv<&NNOf;+OjN42QwQYXo^S#RadQ)_{G~@}B`pY@sNEc
|7b!nU; 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

-UEVBc~>Esv@V1JTQ^?czFN*{oz3bV$757 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 z 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 L$L#&%5a_=EI)YD{ diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 index 734af3ce5..a0c19f73a 100644 --- a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 +++ b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 @@ -1 +1 @@ -uTfl6S7PJhuGfx75wJiQC5gTgaRh17T0kqLDgfXZtXqQuz1kk6ikRGTnaDEjWM9SKks/uBf7q27CE8yOkuctFw== \ No newline at end of file +MUelOl2ppfvTJjzDo62daszJjFfr6trIVRgYZq0yk74gOWtFctRY4rGOXnGnse3z8AZ91oWSVAah0WAjaYo0Xg== \ No newline at end of file From 7f8ccfbdc6bdb2d9f5577d4e8cbb5a22fe27b91f Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 21:00:40 +0100 Subject: [PATCH 22/28] Pckages updated. --- .../orleansdashboard.2.0.0-rc1.nupkg | Bin 163544 -> 163544 bytes .../orleansdashboard.2.0.0-rc1.nupkg.sha512 | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg index 859c6f7e58e78dc7aab43becf2a88a3036eb22c2..7ccd6019f8aec35f64789acae4537eed9ec6e74e 100644 GIT binary patch delta 163159 zcmYg$WmH_f_jQZAw-k4GcXxMpx8kmYGsrNwySuwSz~BzWt+>> zN%r3NWF;qAeMek;oSEX@CV zrX)_<53yoMJw|+l%?YPj(s>!~SuQH+L?n=8$nL|p63fcle)ffyC8#1@x@GW1`Db2! zY%w2%vQ2N_Yij0Td8}uzfrNyP%~}gzxAun~f{_p0lFI;mlodtn10-za=nSUTWzsd@KDO*FF`R z4X>D)L;=BcS6Oo~#4z-W_RI&$?{Sys-rUlOyAT;PMO0& z<7GTx>X4~@=Rd+*R9bN6H|v?g2iRnsDl$cE%fhO+=EC^y(bTGPolCcORf{)CM>)u> z(LtAe3#fIVQVsIlZ0hE@68=Zi=O^@+|DVKW<*)isi2oz=>$wDuWO5@k7a%}u_~Fk* zpng-bsIni6=pZ!>B9kdXZ&=Yn2_kK;|8K&Ys4$ntScC^-Rh(|)`}OV>4{_jRu+3i*K13ks@F?F?B{T1|HcWPRb z@m2VqCn;50^AWN5%}q5HGnH_VP!sIqT zA^H{ljjjC51pl`yafj<=(f%^lR+LtEMeUI=W&F>$VGCpoo9&9rUvs0qDSA3X_!hC+ z(ur&u*HbNd>ohySwx5x*b>cVHF~Pj2)T{rYN&KJ>oTJnT2rN?{%zsMXU?8n?`C`IJ z9^P6_SaRtXv((uL#0FIRxh1#<9&#xuk~Opw{Y;D{PbVbyC;gC~o}Es9c32UPkaC1|IVUx^cW7vm233umCd~1KfKoh65k6 z`r{X{98nE>0q6@HHNGaLUksKlvx5YN(<-e1hcLlHdtyJnW5hCoI`S|&@$lK;uUD~& zC26sNl4a68vH)PB9=QNH@~w!U~Dh;?I#Zm-cs2>8Z|u`z_7 zm%hLqTUC(IVW2)h@r4u(twKRIMdTc$%_>vl@t z)qUBEKmt|NQd;TQOPYPd0PEOE26COYty_2)1^YC`MuF=@1$UMx2AxEEmX#RGkDs{x1yYNOzw1mH z%>}TRJkAr{T+*PZF&5oiR-l0D4e{w{mtGAFUfq(Rkba;NezAv;DT%(#ADo822h*O{ zW0sQ<69fcH8;1G(bZwUI0r^}EekB&x4_;j=!o-Gyx*iq<{oqFc3WW*!;h{hX!i3gI zpddC9oaSe$XJbQx#BkTT?YsD{D0_`F6aY?h>b=H4LO?T$5FeWo8TaC`P-#2K@_Ers zPJN0XYKW)Bzg85~NvbjN_Gw3XK~HHI>G3N-5)7~-pDM++q+r`ADaZ%?dKD3ybB_*U zF^RSejKTm<^GZ_GNeOa)sDe7Mu2&(^_}4lR3uJ0L$POkrmraj?wW=|9bD3UmV5&Z{6e0sy0MZwvF$*DMRg*CkuY}V8_@}x&A@4*SJ(} z5Bc*i@_45$-pZlp4^coJU$0k9X71w7vO}KSnx%gVA_Jcd1SS84qHmjY+&YrvGB;>7 z#^>h=AHFMqZLbma*stcVAb!%!A~5j3Em zj#?YCdBlFkYBVSLmF>4y7U&;ZcQ_s~d#HVZM4>!A1A&pFMP??nSV zd!^%c5FsMoesHq{!9Fi=AmFBKSFajHd~Y<$qcx}l=6W^MKv3fAUZaBZJ<4r+;)C<8 z?WY%MP`?ocmiL$WCmm1++VyIRfRGd6KQgXvI{Lap#$K~WlQ6+VKHyP!GGc}8bG+dz zK=ImeApZP)5b1WG2}POE7s)3v(CR-BgA(}HPFG#up77%j z3?bqbpaCXW$xoc(N@+>*_!UQJ#UzuY`( zMi<*^s{6FO;I|y3GWuO9atAl&p;)od)Po#jUarLz+LZol6rCyiR}CE25I}I)Hy4Dj zQS@I7Fb7V2UjZKA$cIE>r|Ap#3aI_#^TJF=*iubu<%G*FY=yRj@OJ@sL|X1S8)_ z?&x5TAEG`%l#*Sv&{kSfO9fCpD+p_m&|0t1%z}|e^;C`j_I(NnOc)L5=*2DS4XPAa zziZf=*L)56(!lgR4vkcQwSX2xJUs#b@dFpU6}@oMI3aGDIB;^UT!y`=Skc6prJAXY z?FUMxOUt6Gn~wGEAryoY6r|6y?JwcfYJ^~2rnZP-D`d}-85EFmfdD@?rIyNybpDjf z*5s12k{qRSD~0_Ondg2e?sQa6rCM0fSZonY^ir;>LrmF|%1YH&j_n9@b9m5T-Yx{? z$h{`1f3&<>4Ue|nv)NiC$Tm7fVY7;VowH|MFA5HUK~ewD6e^O|l=kZoPB7DnsYjdz zAqCMsFy7t**Ey`76CGfpzDiW(_!RUu6a0{iz_y9z_cw?Zbqfq%9O;=NJzdiKpI5-b ziW@v0H&+`-skMCn=>4e#^Yt3DrUY#P?lS5q;r)qk*%sc;LQ~&ZK1=gP*m}&ZLyuMR zrL0z)AxP6eAV;i?T_baz5eiM`zn@S?w5H5oWoUoPLLJeW3V#J4<1{1$OCjmX{YMYW zNNpMom4?-z_;nIdH<4dB%`|xC@88SxI4{fc=5-!^doh8N&euW@%U7w2#LI%p&VOY$ z+pKe>ZvM4|$*CVfu7v3BCSF(Tg~<7@FXF{pg^1ZP$D>7k%{|(}Dgu9jFC=K9G1?eJO>Emp5~LosOYyhPkqasnl{2n-*-8z0T-HIEvjw?Ri} zlMUMoCjh~#^wR+bpfa&vkX!+U1EpIxFiGcD5}t#2KJ)(LIe$)|If_%Mk}q}GYeQHk zj{~dT$CdW_A`hov`DJXZ=}#maDj3iR{g9i zL#VF~_(%>bL#a;&VNv8<@oL*uYoc`A)I8d?ct25<3t&8~CyA#js_13MBRS%KWo`S3 zYU8NCDw-%sXkEToRo>BHWfm&ttN%XRMQl?MQ4$*<#bT>deCB1;JE7-~55J%)TJ{z0sH zpwl571@Zu;wTAW*cY&R{DILsoF=G~@t{U&Y>;;p#V>}I!MCi9ywAI1p3X3Hi$juH; zb^AsJj4r2VQ@D`IGTGon8Hzr9G<%Xkp@j_G&NXd%6Xe t^w**)=j@Pd8|>(hXp? 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 z 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

24%ukZTmKv2)@x7R1vRp{UL_9%a(NeDVwk93T7 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 Sfr`FhQvYv(DILCG`2Pc4K>w}) delta 163204 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 z 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 KrNb8l@4o>26r3gi diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 index a0c19f73a..842c54e79 100644 --- a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 +++ b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 @@ -1 +1 @@ -MUelOl2ppfvTJjzDo62daszJjFfr6trIVRgYZq0yk74gOWtFctRY4rGOXnGnse3z8AZ91oWSVAah0WAjaYo0Xg== \ No newline at end of file +Rj+6jiD1lwcBLa8RN87zsiegLKLzfFoPnIH//7qe9do/AMQzEXPv202Y99ngCnDYy7Cam5DSuEVolpFXCOGy6w== \ No newline at end of file From c90290c0754f9e2f898e3817001b7cdfa1c15316 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 5 Mar 2018 07:34:56 +0100 Subject: [PATCH 23/28] Better formatting for dashboard. --- src/Squidex.Infrastructure/Orleans/J{T}.cs | 5 +++++ src/Squidex/Config/Domain/EntitiesServices.cs | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/Squidex.Infrastructure/Orleans/J{T}.cs b/src/Squidex.Infrastructure/Orleans/J{T}.cs index 00bb93f45..c6f28cd45 100644 --- a/src/Squidex.Infrastructure/Orleans/J{T}.cs +++ b/src/Squidex.Infrastructure/Orleans/J{T}.cs @@ -39,6 +39,11 @@ namespace Squidex.Infrastructure.Orleans return new J(d); } + public override string ToString() + { + return value?.ToString() ?? string.Empty; + } + public static Task> AsTask(T value) { return Task.FromResult>(value); diff --git a/src/Squidex/Config/Domain/EntitiesServices.cs b/src/Squidex/Config/Domain/EntitiesServices.cs index c8583e713..cabc20e5c 100644 --- a/src/Squidex/Config/Domain/EntitiesServices.cs +++ b/src/Squidex/Config/Domain/EntitiesServices.cs @@ -11,6 +11,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Migrate_01; using Migrate_01.Migrations; +using Orleans; using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Core.Scripting; using Squidex.Domain.Apps.Entities; @@ -109,6 +110,8 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); + services.AddSingleton>(DomainObjectGrainFormatter.Format); + services.AddTransientAs() .AsSelf(); From 56ef76d6277fbf1152ffa4ebc030fd2faf373f2b Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 5 Mar 2018 11:31:39 +0100 Subject: [PATCH 24/28] File added. --- .../Commands/DomainObjectGrainFormatter.cs | 32 +++++++++++++++++++ .../EventSourcing/RetrySubscriptionTests.cs | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs b/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs new file mode 100644 index 000000000..d12406c11 --- /dev/null +++ b/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs @@ -0,0 +1,32 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using Orleans; + +namespace Squidex.Infrastructure.Commands +{ + public static class DomainObjectGrainFormatter + { + public static string Format(IGrainCallContext context) + { + if (context.Method == null) + { + return "Unknown"; + } + + if (string.Equals(context.Method.Name, nameof(IDomainObjectGrain.ExecuteAsync), StringComparison.CurrentCultureIgnoreCase) && + context.Arguments?.Length == 1 && + context.Arguments[0] != null) + { + return context.Arguments[0].ToString(); + } + + return context.Method.Name; + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/EventSourcing/RetrySubscriptionTests.cs b/tests/Squidex.Infrastructure.Tests/EventSourcing/RetrySubscriptionTests.cs index bbb285bf8..74a7eca02 100644 --- a/tests/Squidex.Infrastructure.Tests/EventSourcing/RetrySubscriptionTests.cs +++ b/tests/Squidex.Infrastructure.Tests/EventSourcing/RetrySubscriptionTests.cs @@ -44,7 +44,7 @@ namespace Squidex.Infrastructure.EventSourcing { await OnErrorAsync(eventSubscription, new InvalidOperationException()); - await Task.Delay(200); + await Task.Delay(400); await sut.StopAsync(); From 860658b512a51605f0a89323761470205abe3369 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 5 Mar 2018 12:27:19 +0100 Subject: [PATCH 25/28] Method name improved. --- .../Commands/DomainObjectGrainFormatter.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs b/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs index d12406c11..6d0da2184 100644 --- a/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs +++ b/src/Squidex.Infrastructure/Commands/DomainObjectGrainFormatter.cs @@ -23,7 +23,11 @@ namespace Squidex.Infrastructure.Commands context.Arguments?.Length == 1 && context.Arguments[0] != null) { - return context.Arguments[0].ToString(); + var argumentFullName = context.Arguments[0].ToString(); + var argumentParts = argumentFullName.Split('.'); + var argumentName = argumentParts[argumentParts.Length - 1]; + + return $"{nameof(IDomainObjectGrain.ExecuteAsync)}({argumentName})"; } return context.Method.Name; From d3453ab167af27bb2448723d02e8178b05ec6c02 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 5 Mar 2018 14:33:59 +0100 Subject: [PATCH 26/28] Dashboard updated. --- .../orleansdashboard.2.0.0-rc1.nupkg | Bin 163544 -> 163676 bytes .../orleansdashboard.2.0.0-rc1.nupkg.sha512 | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg index 7ccd6019f8aec35f64789acae4537eed9ec6e74e..cd516ab850ba34fb43966fb1c760f54a59c6eece 100644 GIT binary patch delta 161273 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

qkCr5h`3k- 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 Date: Mon, 5 Mar 2018 15:47:57 +0100 Subject: [PATCH 27/28] Dashboard updated. --- .../orleansdashboard.2.0.0-rc1.nupkg | Bin 163676 -> 163753 bytes .../orleansdashboard.2.0.0-rc1.nupkg.sha512 | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg index cd516ab850ba34fb43966fb1c760f54a59c6eece..b2edaddf60537caea11f2cb35c8db47d85892c63 100644 GIT binary patch delta 160601 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

^ltN(yusg^- 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℞b*Dyp9r$Rvjx9elcpMs$6|3xdz*KmF~PUJ!yXoE|a12o$I%;k~J4;GRIInSR;LZ*^vcH{VxDy z0()WTX8N_!f4dl~1}x!t>E%1n5K3nw@!&^h@kK6)c2VjI*V4$u)1izi@>7t2Pj#zf znkqATiO=y;z9^x13N>fH_Of>6JqBDa-@WbEPWq>({Ulj>T=QPOQ$hKrdx4eR-Ibs4 zKLjPbx3{$GEt!}?)RHYKNo?F(s>*QXeUHYE&M`~?e+Hv?AGrAp5cg~MlO_K+2CV&> zzjOrIgx)`hLDc<87CvPTB|b*rR1)?55A1#T+tWC%;Z*NakrdS9MW9=`In8oL%q%e@67r$`*dC%nU%al)%jYj{V8ytGY zsqgQDn;$(t8GoOi){~?$obSc+y}cp-oA1W+-Cg-JkHqZy@}W&NN){e$}5k_^lJvQGZqSbiGxS z{MiIp?GH}1U5^$2J&S3sc;6xP^PFK;RUh{Ih~J+yhAYRR_YJdlTHE90(f|0Z-}cWt zoyVOPet*`VJ;UG44g;4C5$e9GS_f(m^W!G_e220bs12CH5Y!JKp&4c5KGXt3d(M}tjo5)HO? zzOUmfxJJCM`0PxkPusHXAx&W@8OQP8@PwJ~JU1i>oAtiPGM@{aOSF(;)Rwc)sjz}=KtzPpHb!{ad3?gIMS1(eiNT}yRA zU4N#!NJ$A?QAgFYgaoEp=if&gTVhAphh8w9t4@flCE*pmVZn)j~eE%VbAZ=;gY`5gCPbJ1r)L_n?DQjre`B z4|N@x(;d1j%A;tovO9`*VY#M`m;EshnE8IvXc7`&`%}nTzw;yLkS{+x3l3)Tv47{! z4o^NjKAVM8d|!U}?mP;{MOQ8O1N zKVa65RV!?Pm9uJ7G3#Zutdq5|CRXB>CpNy|D!#Z-tM~$|xJL1aAi&ytroDf!(%v%- z#^a>J6b6)x$ge^s2|3kzQpxM`ZGRKjWkFon)y0;x)%D)SzkhGzf5I#ymt^6*}JDIUhIH^S9<4xkr{>Bx14$c+`eZp>uxQ0C@yL;Xg0L1VXdUoIfpf3KrI}Z~6z7Hmm`g(T)zJVXlVAP49w>~=0sd6#Q zrK*UvunHDuL6%{GT;9);7k^oi6B&^Y*^sM;j1d z(iqh~e!QOA)0gFW^HMGP6NY^(iu^iiYaCy{p{oD92~s2%nJWC@oJF!Zed0`{Xhcgy|9sd~T8^8(5;A~g_gp1M|NGRKMx4ToD1Rf{`^Ny1a<)(Em*-ah zAp6GI+y9&eRhdgv;W{1ZuZ;Y&F{IX~L;P6@ue^^UCwMA<--34j2V@I%$T5^i1EQ3< z2v{KHANDEPXz|bdz5Y}m$YOsQ4P>mpn=du$Mj}%99ko5w+-yK}g#YTJ{pNm2dIEBN z`Ddm>w!U`_RDT+%45r(Gl>fOaK<}bOG9T|X1hqyo(c0TgF5fPC%S*698C{rlEao5c)$AxA!a1t)`TVmH^o7s$Ar)^km}#eVu}Z_fq4+sVr5 z6vS>_SvUj?3+MZ+C7bA`aouN)Sr9i-1d?_c#^=wKkbk)S7XOpv{fW$(n)5aVaIC=O z^D6Us#cZVW2$oeKpVuA^Gv${M)^E z^U>2Md#}f%x4Ywakn4_q{*B^Yy^2sx16$|?@Xe3!!15tK{yyD(*KhUK@bMNOtDTPb zgfa3VF;Lg-Nen+2v)1c)uNfmB60-&KyoGlb27e#x>h-%NNS{8zTx&u*uqYONioXO! zO?(`Mzajd~vnRX>xCCph7jIwDY76MzILeX7ebU*vw);Tk$r7ulmz`e{b#_1TVZ=l_1Eua6tkUR|=hXiN-2ebIakHjwv*0Lzj4i&U zE!!_ii*S?-*m8Vt{`LqjzBC=z{giX#0Wm{Vc&PVPNKpVimlYjvVZU2f@=S;IlCjrcrNEuUc{GT_|Omf$MS;6 z_l2$y*u`C8NB=Xr@~GUEUx25LuwCEDz?YF-Y8jN0NN5(t=+0`2wUHRBu&#}FegI$d zGh+K-W#pTIn(z_$`c82aKkH8t?@ULyk_XT?gVeooUZ(zgQ2&k=teWh51{A7~dw)eJ zKxwm+w?-_l#Fv71_gnLQPz=O+`;+CysJ+BTkcgW18PgQXM1S$9Sk|<|-=wrE{F

$=0C6U)2FE@TtRpul2sv_T4Mea)EyK=(wTi5$m0lJf>ZHQ984KiuHhbT?*Ry|ac z%5_dPMn6Ua$P{1^3DZbS-g^nsihmN6cRKT7X%6uUosRkE(^Ov(b;zN2=BUQx7P9@A z9#-ZY{XABd6@SU^uBp!_fr>W2FVv25cN+6L@;ahNm;z!)1WT;r94J>iLj(F{*V{`! zmJ8Qie`}^(Qoxl9Y(L%R`%a9K94VdG@$vPt7H+wp%G$MWzrDVgmIdZY!hcW{&9On* z$fDoLVk@Fa=4E2&LP9x3%P^JRh#hmKm^v24tn5-nCr(Ye>Edzcp|V-x(AF=36eVsW3o8|J;eAN zo1)lay6-A0TTO#?b=jI%6zL=9N_xawI~4@1as{F8(=gv8JUYttI`;~~&SK+cK83~9 z`i#SZf~>MpoiDivdC>R+-W!KqxpRZMRlHKodlS2KRDS`nG=@yru6{V+vqNf-V85*V zt?ft##fIf_xXFeV$XBuIX3={DIV8QsCW2fJePp;f&=WU@@O^Ij>PE2cX5cc((s{LN zYhx{+MHtC^o{i4hmd&I&1msW|tRv}R*oR%Wnolf2R2d^I2CeOczC13cat1 z8b-)etLg_PHQK&oMZn1vWgL8n%84m|8GJ_DlG82BFW;ALj0 zUx-pWIvu<;b_TgUliMU`agypylxiR#H7jiN1%d&&!Jd;32r3BNWj+K;_$7^nmGM}0 z9|||a)42Q%Hpj{NsZa46_Ee7dseD<}fckxWQGYd`3OgWOIjRg)fi(V|dnP?n7Ul8p z*|Rjhu3u@K>lIkks;p`udvBGcTtJMfJ~U@3Wp&dq$u1*9Wn-854ps%!CFP2vAR2Jg zhJo@nVC?CO2$JuxJEO=e=7oJG?;MN6oLovDNKf&|_VVbX$nl%td@FN7b2HOy%GC9$ zpnvk4!Ts-F! zq=_|(5Gz$=A4Gtv&^5wzzk`ENX;IVvBJ^=yrv#EcaRJ0=xwrjki zTFZ%7&HD%?R}|_2DYY?Q;6S89poY2VW1kG?3%Nvb^exopOXg!f7jFaEgN!BA=zrcx zllN|ON2UT)EsGqc)s&ki8C;UgF)W6NAWv(#gjsg$7(}~6=g6la9{L%Lq`ydRIrc-Q z2}Nh+EQw5#A<}XtMJCZ=r2-4Z9GZ?&a4D+CN*VcZ53D3|RE|#0EDO=IOeE#xP@}WD z>|Aek&9PTj&DCoeeN8Y8-peveV}G$CA5`8^&{H?E&%9-iAg|%D-C)SUCim&>ufuA`ft@UjoGCE2TYCXRd>;_lLSm}>t9^ECWMl+!rU(Gv(_va;;Fu} zyrj+fpz*9NEw40`8UoCL%2@-~R;wvLVqqeWf{2IXU|`)MIXoUn1^ui`dI%ku4v6IU zXN;{>_OoW&AxRiP9?<-sdVg*FKSYT7j8a3acbXo1eN{(pru6My7Jra7|7TQdjQ^*K zvyPgxX03AQYE9p)nD5@c`o2mVlp8xUOYY>z<0Pt%@{)6FF^fu*)U_b0H4KQf^yOv0 zrQKb1*Uvz?G=gEl7f^lP?yMIDwb8m%aTt?=OAm7_7>ddq5jvRTd9sHF7N=brvc)QTZVQDjVp?_%BlS{( z)T_^=LH6m8Ecy45$$!0Pju&$0RI|&Y%02KQrIQy`-CXzeQj#ESBt*Cb3%wVSy17!G zi*MYya6Oke6GPDXn}=I5|K(wosS(nv=*2~^8Okg+2|Og8ykg*vKAX~?RjnC6F!Brq z8@fvq(uEgMaZx&lN_lyh`VaLnW{-Lzdu%xW9SL%p2I;nfWJRv(91cGMrS8PVQur*CuUu?r##n)~2CzvphJUH}y&| z8nyDecRVK6D}T92B_3>5r>V=TTG;8ldwkQ-ky_-66smD>VR$gmi;UHje6rGDkyk>e}9Q|vtCMxm^++R3qM%8k0r z0X@A0jfdS0g}t|+Nw@CVTZr zln}SnnuE$wD+>LDeKP=xID$#dB5`9zns$uHQFhnD0%oA=6~*(z+w}}LXeHtXEEz3_ z1GMySfqz8T-ms)rzGqQr({gX;@(qO>$x%-1Yv&4K!23G>F!xw7OIZ2LEfVBmBj~vNUqfC zQ{P5Cx{$h8`=zFhSEVkaJH4sQ6L1x@M1j2-%;7@X`1;c&-te$haYrY#R+A5y2Onbd z!p62>tVT04F$6Ytpf&F~ELaRhDK)6CYpakfrVhG#kt#%F!5ZY_+6tH>D}Say;Be#& z?td7u*q&7h2h>d7)vlE_yGE_99Mn=tW^3QGhlzGPt+9`@Sy5c+X8R>oE3601rg?i3 zLM%IBAKh?qfbQ_(X_B@QRY}35nrt6Bmb2UCu?ii6URhcDc~@GwBrSh{xhe{OG74x9 zqo7`P;7dWy0|l~NA;@I32;});{hm7`P=DNI7n0RWjYJM7{v-W_P(|r`mcl6~YJ-NK zqrp4J4&mno)(4KGH+B5!Oc37M(^yBfje&t_`z`DMhBM7HQhPDG^3YEHZr37?>O(%8 zJh8eU1!MB#*_nC5*?L<8xp0q9xYQTa2U`j2T8z#L=J@~aE*=6`t$ zDs4y?9Yy0})RpCtGTO>+@nNqsWd4?U-Hmht3Y*6^24|@Rt+rW5xR>54G*{XKqcr1Y z9YuCD-`4%c(6>eUel~dbCv=3P0r8XcnYewbRQ6Rg5j^S)Ysym;kTuKKoJJ$);nn*X zS#t@ROI35lvs^pyQV%{T?_E$n41d@Wt(Jv_kD~TRwGXu>Lwfrudt*zNUTfs&K9*j; zE`K`#&2dOGN_Ps~q(-wguQl!UL=!8$(?`w%qs@Zzy`dYzrqDu+aX%NID+2_h7Vdn0 z6hWXH&^85PQMGh18+_Ve;*;2@jom7*YdY6nJFCIzkzAL&UAH7_z5$6^)PF&hcocng zXBIVBZl$_!GPl>8GPyNL_NSjgkef3maQ)}0;>tl!v6N+E+=lt$nZ-20)JMHw)te!ekIGcm3YDMZCb^j8?vmO+wB%m<-vMvuymVLtnMF^AwQp#- zZmfJtpk806avO4e#psLKi+`uNdNG*cpb|*z&xP&eUKgnXF)Tu2pm^{=x$03bNG}>e zwTiQszGuSDtFpPG6(dzy_8tmX!CcCGpilA4;jePU=h=gEQOUx?|&jo2m zV2g`M=49P0AFSPRLq=!jp0A}k+!MAcvGP2$?yo8i!}f5&IeVv?7oN3M)fb2JrpoC? z?53(s-MJYoo#Xj|a8B}yepIAdKo&H1+ml{gWVy$6)l4ot>wk-dD`)GP(z(JFb8!Qq zQ0(*qQX%IkZ1D+M-oMTnnX7|G*jeQ%X(z9ACgmz{&&N{D1q4t$87rE|j>X%yU&fsO z%E75VwaegC4O1l{QPGo%0b58++#RsuS@tg+J+!tML<36I$eFZ?akD)rk6OOD@|fKY z93^^6Uhh?mQGe}BYa)TQt49z@A=h0+7n>1Fe2dAbgO`kdjDxnQhEXBc91Ykx)P60DZrt7K7bJGy|+;?<0$ z#JVV75u)hBO0 zM(UGpNN4Jk4sCt)Dc8ehgA3N+-ePND@c%D+@7mqAm86Y+pS9*c#5|`RQUoPYzH~Pv zm@9FdPJgCzo7jEH>!sxdk&uKo1!zD}mLloDpQoz!9UGM7xaXZSGu^QWZ0!4`cI~QX zS7j7x16DekTrnLbO9>GB>Z4>XuQd1Q(z%MQ+%Y8!c^3=n0A4nZ?mjthvg_3J|O<7-tYKN=XWj%vyl z^%Dp3qgMJ-4=on)L(qjb#0nw+xi`f%5aBx$&_#C6{l0J>1B78`B;B4T&O{-){VQY) z@PF`3RGaa=T8$e4ei#LUauIYzXEAL-g)fd(X+`(?6x`g)!vUaN1`b5%g3z^tDc4ol z`8`Tjcjqj!Tz}QIauMa~+uqYH`plR2JW#p5h5PjBF2|tje;%-0ML@>85`(S~sw|va zF{puRSGi6~yAcY8pft{C}l-U)3L~&j{oXATIePlF@aq#b$r6Bv9QG z&;Culs~hXt|Eu2F`d?Nw@`jW9Dr?n?fZr{Ez49)NK1-MDNe=fLF7N1O&zLK(i6K9C2WR(%lqQ~hr5X;P07UhV8XrCZ9EL#!`y zRJs~xc~Va@sS(+_Z19nLFj)f@6Mp?hc0MLU;TD}QN+d#mAf zD7!>v~)PgvhRLtH|8^ z1?;=N&NfKi9*V+S4ob#=Swa;|{|a-dX z?`RkzOKR{FWmPa9t;k*$24AT{I+qf)+fD1JJbPCu6yUJQuC#a7JZrSp9)O#Qm&F?} zZQny?*8;yv{ezBD#eckqjQcR*zgb1+R7?+s&q&7nfvBB*^U}{GW%onsrC$`w0^l)z zGgOq{>CWpnr78KN)7=N}GLPXOCHn zg9MexMf&zlq9~Js?TL_gYF=RsN7dN1gUR!mHHDJmeL5Rxw`%kbG>Y=TMsN72T)WZR z9z+Y`(2d@HFK?32=E>_>pIDjN-lF2yw};8zAJVsRa1}|7cjlnF{Ac?gAPd;7gV57r z36v9kg3ciLHh<4SpjO{(h=G~OSL9;fz+xykTr_XcgQi|C$-KfgTwp(l##qtFZi;ZeT%VMcbWTt5=$E!^d%i3oH=|qZu|##fY|C@!o9e)oe%Q{N z`KHfHP`ypx&+F0~j!pz{H_+>ycy;GiuH=VH$eSZFH-GDOiWiAEq?5Y2+MG%6*ZL%H z%J%fEocBd(@Iaj~YRdw)!N+L=B9SKZgh^vN`dwlICNm-II;eexuU zw=I40H0f(t`s7)%d0M7Vo^Ohw8}$3+9uqQs@`vP(*_b|&Ub|~5rcb2{H_gNJsq|!o z+NV#YFMGC;^r>`aY$qTY?j73z33sDgQ2JDLW`DS|rB77{IvZj7RP|PTCrO{Go(gDs z`b_mqclSu21sx(=NBS)23~xh9p9Os(yGr^j=mx!Sq|dnV(M=gGrxr2leg`>2vO){>>qM&YjiW8Pey^h&}pa zmw!DP(2-uQSP%9swed`M5uLFiE}sk-DDhweTEPjO55$bl?XB=*Pj)}Hz(C#?EmLSh ztk~&C7ORQl=7J5Ki50!~kww!8ZZ4K5Z>-2CA6cX!>YK~8#4uL)(~m5i_l&-R>vIZ( zkW>?{Z8?U1Uo+@qbDFB6SwR9INlMkE*YT^{!9Jf>?TeRxb*i zM{vf&{JTwLxuw^aUtHqn?KM>)<>8__K!#URHtFD~Zrl27kd%vba5>2@%hhB$K%K7c zNVhDGTS;|gQ{5(t5Talb{*d1WJTlQtBVM|0lVyHX_!?mKZ3tDv_T_it1mz$g0Yr=po-W5`d6bo&np@^b_Jn4Cb%Piq=E$%WiMnSe*Tw|%3IalH*XmTC&h z6mI@#aEont2p~Y4zmiSr4P|AxfPdBY&w9^FN=Pb7mRZ;dz`YpD+4X3vlesSEkxu0N zPz8Knun?RoiDo4T!Cvta5|B2HDuf{jH*f6$-bd{X4xWr{cE`@u{j{Z5t2dN8wAf z`KR)-SR%7I;!AHRs%Ynf;bD?Bt<&`iG#z3WJsfdCcFRupatl zy{wyby&Z(iIw2`fOlXSM#TU{gKQ>&KmBO5itBf_%G22^`TWf!`TDgfm2WQS%k+aQM=` z%WlwhItvz}>?&9-ja@AzXb&NT&B_3*d;Y#yjIOm&zMAYi({#hKs{@L(%zjvtU*sVf z*5lx}E%3*4WI8`6_J8MuKc+m^+3M{a6BHQ)m;uk`*7P?-L#A0qPpl9yVulY#w zJk@2dO~L!nL@yysWsCu|O~X@YeNuVLFZu0O-__^U%>)8{!lOfWgx!x01z{@w^BOxr z7cQ3EyVDK*B9qz9w!q{LN(8&3a{Kj&(6%%4s{5v#zXz;tI)9o(g6WzhujZW`2OV%g z%7o%*%Vyc#urav9cG7N)GunaLJgav~y<7POK+Ils36uH=x%zS|^Aqg!M;{TIPi?}q zah3@sRO`v`8}eS8_t)q792_W!F@c>m1xtwt>PM%69)Chnbn@k-HyT)x4uy;$2sJC< z41d5K=()hR41e6R-khSLV2M^ny&nCl48-YNd2U)$t4<=do@b=QaC@zy?D$c$D6(L*dl9;+eN4=qGV2AX*R+q z0<7?4e%jRjWqo#3o333=vf$IK=4s8HxwDt>>E|z)LW|EW1-tJx7A-@>i}?QadWeq*79q%ixS@=vt>0diQaa? zYlLs!X@7uO%|G<8-58YO=4N^~_iYAKjax7#?IEkMsaI}pjOr85!6Z|FGqy1jA_&|X!e14q6B9cK8D+C#<%h}X=0HoK%R%o^{PAq$AH zf|t#-Jtu_#bGU@^>A2CTL)hI zejSA6>;~Pt4#Ipkei;~kaXI;)I0G~~@vfsPbO;UGHB;ibOPZi$V z9c6h#U;C$uaHQRHh4*%!GW5{ak#mKS`vApJ{t8h?P8`#NBtX6LJV%xj%IyA0vLlEy z)PFolugyeBul+NkRN?l1azbaL91N_jW8qI<0R1{F-tHbMvEU2<5c`Iq@wi!v&7XMz z90Xq#-cg<7ZM;Le$=8)pT6hZ>M`yu#>rHY4NS*E&rk`19Cdn=XX_`O&9Z8#!s{LP( zGzfslr!Hg}SbPbSIfid6z>&VMJ7@s`%R_d9Qhlzg7@mQ4Wg|68LnQu_%o+UNM& zP%jJ=<@^zV&R_}wjW?k?dvml9;(sY>2yr)WYK3!!?q&$EA0Ko@Vl~}gA3WV(livxh zxfgYfsL~Y#WcPbecLK4|W%V4*{Zj9`lm8^w?DuS~O{@s7zJtB&-G>@j-%#`rdQ{^!X4 z{>uugF8}{0sQPCJ692PhvohE2A)M6_`=zt}G2HKW%4cs!8p!ecPY&b|q}Zp2=InkH zG-vmdKy#egc8^mp-Q@0%CVvY_ow5ztqJuJUKcFK5`N4$M4~>TXgg_MO>5s&s{6y%= z%>WF4RdL0&RJgex2%{f@!PlImFu5y?MOZpZcqMPn60R+YT}D2d_04qBJ*Ai7DP6Hn z&0%tik3A=LMxQ3Du3pHB`=5D&qnF0 zOK&=^>K3yF-PlFPokLLP(;zzT&z1rImM*)wE+{#;Y@k%vE2P=QiBn#1*i@n1VL$Wp zaDg*@sa_D(JR`OZ-*_-J(NOZKeN%$KO=zc31}vDT635$9x!8M*p;q$y`Cu$Zn2kzG#By$ zX)N9Ti|zkaDD9>VPD#6KZ!PTW-cnV@xrC{-8d2|U)0ir8zZ%stX*Tzd6L|!3X6KeP zf?RKJlJ|QX{r<<{0@Dvrf7?!I zM$T^hhflE^gZsAoF~(fOqqA#s465(<&{(PdYF1+|$`<#=_k~bc6+$L^Lj!DGK zHu|ij8D>7qAAd9?xt0@^`0N~mw=_jB%NGZ$^Bg=H%Z3J4bTpZ>@b2?5XAp>#Fg3@Y z4_+MXP+C+np~*@z7S5JuZlYcW2RkTa;9wwh@Op`0MEeIO+7Kdf-D~N!G%CHuThY+{ zV0rIu#?mYHh!aTgZC|ONnTc|ipASub&W>AzCj|(lh<{j^Ilp_zTQJXbh`@kreEfLj z?yK{xpF%L4v9r?hX0BaXw%ALtH5zFicB)Vi+zCnN*yTf+U!HViz~CLM7?3h{B(~n0 zWatP9IWt!!1?(w?NBw(|cO_KSNS#JvqcYeU#^^)ZQ>Gukyfr}EE%P>tbbWSijrJ+TE5GyjmxVW8teyC2_MP7 zf6>foe!gddP1|)<*XPX7fH-&2RGL}>N5z<`im_Cci>2yF0V+mHwT7hKf!AiLEizNX ztI#zS%+f|v1LpEwioj=WmY)MoNT;`nznGS+g{H$GzC+p`e4b}U>Iu2*2!scG_Aa>L zU4H^myD|Z0^@D+8_THP0w8NYqm^mrUJ4P%$lYcj~ACt3ecs$Nbz}E2ih1BP#Z)cNf zdVDa^Z_^a={V~Re>L>ml>(%g>_;!B7j*7S2@**hYg)QXDk1u7s2+Gj$Z-%gH;^a3~$Agk2%*YIM8rPJiT` zSAwBUmUxobYGzMVMq|$CO21!?Ig{JQgKx;}&o3RI4O9+9QgHs;#zN3sd1jh4oKL(w z2y_e1paEU1y0K4ZUN$s%Tc_X^Ifbyg-|C5IWmu#n}6N-$RAWsxx4Yy|1n2>bs=t(&<0G0t5;yM(779@p$^_G zR|Yy=JwteRu8FO40wZXNqZ|SXa&)K`2f81q2glVY892+G8hYzx1KwYa5EDLAEkb`i z(uK|(R;Ac!N5my{_J}y!$o5GgB~X6acqz~^QjQX2aB;srDEDhZEPnuvR_pmObDq6Z z6Q529xJI9Os8m!1H{tumfgpwsN+Hm6ck}{?h4w`=!-;YSF9A9vB-pk&0K zpS>Wf>4%kxL3Vdqe;`aC;ZW2ggq->SAJLT1=`y=EaY+b6a)v+UI08KiBrf;840}I) zNvIzQH49v`yUr!}(tmR_;a<2?^^h+X>iZYf;^zX{^~g-^X~Jx2bfPdb{tlU7w;U^2 zO=iur*(BoXGn>q zBD6oN!mvBbGo911E7w80Nq1qok?(S!N>+|4WMx$$=ia%V_kZbjc%G~UX><&%Pnj)U zp^i0KX4`9^`{#m0(&0nz-KHQDsqc86X5e6b(JAU9qyype({i~0P0MhORh^90pclaT zwtk%1N1ze)W1>ofvO+!0%u^a$pk8f>Kh(7i#Y`Q1H!=?6oQEMdH{E-sF17Q3)s&(0 z?c9CijGP0mD}S%@5a1>gQzQFkGjVJ3GC!A1)}&McHY*+DJP2?yR3R$Qukw{`9KD#l z_{+KTV)LLkC%w2u^>UFQFE17Ayc6W-D`6`4f5WQun`}Z%-Zsv87-DlaK`gRFZuEmJ z_{~`~94tS;k!Wi1Z3U*0jDZks_@1^2 zl5oU6ps1b{@lxZFQGxgeNL*>Tzp2mDQ#wV+>z90xK!}_uB=G+fO^u)sXSUQVA-fL( z!JlgxWpj{2PSuR+;H)$!W{QqWnv~H1XgXqvSG|c?_mxF?dn!Us5Z?Id%48LPxKSC_ z5nxC7On>659DS0;)^zAnlXWRmF6D%`mXs#HPoEb{11^cZo(3f_K(rG|xJ}zr4qf`l zUUH@K59uL?K639kHPNl~qTHibTokeD5gVj?!_^vedLm@2AKnv6vGCxYknP6ygw(`q znT~Sbo{*||J)yzdwkMS0quC(IXpJPJpD*&RTYt<$W@c@;i3QfMLc`vRA@V*NRLOD3 zZiQfwvy4F8kd$=ro32{r=7yo(t}^oGruOj~`)1G3pbLl3noDsa03gJ;`)(3I-e~hM zsETej-;|x4Opu$BPP69^K%qd%mq0!ZPJ9;9^OV48>hQ|T;1|G75TB0z3ObXW)3bnQ zz<(wNH}0b`l zT15MDpWK93pv>%Rm(%3A7~5OKd%R1$oTxU`ji#&-1kpt3E57IzZ*0yQ`hXq=7%m#e zQHMWy^eBu-3gIBB%dS{>(9+Jb`*fa}o`2kdE?_7Lrd8VOKhdQqA|G9Pv}N8Q1WQXL z)?f=3azkJq2kMHC!-{k2ED>%5#feW59L-5qmP%o_Zj5;9>8S(!)DfD4u4@%XM>6e6P}j zi0!kjcA9L02ro64S|6;yrPd>WAb+iBjZu$IMx>fhAY z=R>E;&WV2R4BbyE=fBe)qn@`fdm{bfM!E_j{eWsvE>xXP4)pOC{qag{mGtb-)NbrK z=Q7P?evLNt-O%g2QBUg%5QXR$z_>|+f*;YK^ftXOhhLDC4oX_LJ&N{An17l>?ag& zu}YWX*?DH9AP`xk!(k(1={4V5{-R}p7a562?hn3&R?blzyU;lwlYjd^1ATiJ?3S^) z|EC&R@eDrDJqfJ3jdVq4v zi8mW}_BKQ1>JIiaf`6UsM*6g1x(6ZOlu4KSBi*25qH<_(=vP%ijXP;u6hx-{lu$Um z4MpH^!7*bKA`Y53ntu@dY#^=+MUd4ZfuOk;)24_GkXev8&$lmMqUr_cE}pN{^BL&G ziFdrZz)pGrnbLTCG4g2E1<|Y%{cKP}GlG)t>|TTG(O!T81LnH=wtyx`XTE;>h7QMgCKRnVa*+E-8lrl#~vbX*F(!Svk&Q& z%PvKLh)3zA1>Z%#zf@##4M8=)0SZ$`XY2@q?!N|pEwaYq7T*13U~z3~+BF>vTh&>h zV4@X-%nYlGUw?xX^p=%99}8LI#@q#2+i3w;vyA@qQ#1PPqGA)1?^<~y76p;Cq`bQ` zN^bvb3{`jQ+=QySb58a_rDRqrCj%dYe(JH(U<8gvK+AO7VRvcI@#Zf>y8DHIa{HUV z^FZ2D^eTdAS_OzE@7<InQ!mSXUsXH9?X)*>YGeVja(6tcR5dhHnkvX z>Hui7l3@9PdWnHH0feazK~7Z592v^ zBel8LHHkpV)?p5{6j~TTx^=b@3P3nbEsfI6ww7X&-^Bi`JR^_LtO##~e!gTM9Z;i~ zkgJV2$QVsA6ekqC2ig=vYm89{b&Fj;Y_bqgdw-HdB3)Wo_%Ue9y9)}X)>LAT8OXb# zl=mpkp;KIxE4{cc?DM|GXp@c}jrGt8rGqj+AEuQBI^;)*YD^4kw!;Kn-B+XR@V}ulIAnqMd-z^QVAnWCqCGWh>#JE+ z7JoT8VAe@W&^@DWjYcqQ4SJ-wCbFvruU*Y+p>=_DALAIm@qB*SoX-`KYjq^KbvzIA z5v^n_52e4oqaLE0>`fmjzcELx%{J@3^Ner3-XBwTb>|tK$CNaJ*Qh!AWK&j3-}uSx z)jOM2pezbCj*Vx-#e3Uqq`RYj%pav@#o%lwPR{d-*`?`Ej*n{&2PBr=FB|n9%2XyAxM26#8Lvt0fMasdbw1`Pacn zKg<$;l$*%!Hpj1TO`Ad=G^_jxwb3TOcRkw_bl+LyPneEjel1(s`_!_PlVyFBYk#pD zovp7IYv|mFN1YZ=k|HOILg@g%#gFUu-`AKw188A>YU-1wSQ+64^fL9?`Lck7K|)CC z@`cH?*j7gYBV(Db8yv;K)fDF`+i$GaXY{fnx4^p80aglntC1LWWim9yhaXHW=mYaK zre(@|a&~>(hrHD3JElu;y>2Ks+DpegfRsL07w5+vyU?~ zI3tyBb&`Rn*!T6axvkjBRn4*qQu~Q?OT1{mtwf>=*+`*nu+pi!6WhG~$nfB-9qoH% zvHJDe%QJYwF$rI}TTE|oe~C?K?W^bkP8JlFb4=Rf0ay~v8Mr;GTDvPI?kGE2RS4S=0xPzK|iAnPF9?Y zNaMsGy=?~ZAv%p1DHVOdSLF$Uh&v(n#D?@Z0&O##hYKt#g|VXbYbNQ7DLaZ_mhBi~ zEdVr}uk6voyph7(y!>uz=YOQ2W{b$29GQ-ArdiXOX4}qs=B~PTY%;q3fav3FI<6j) z;Kf~WHQ{++weOql-K`TE*D2ha_jhG-cPSC-N#0-|oQP-o$ESQ)GaocH?lDXCpv>+Z z>d2n*phoLN5AQB7G-(m-7mD)>Zc#)n4KIV=ha2N`bHR=?D|&DhJ2{a!Y$fJ4HAV6Pu7eLR~Km>>5DXw z=?>mX;Ah{w`To0a&!F&E49p>-(Y*njNbA?ATy-)W0T}DWf5~-n6O>TX9SD$zvtlA2B;kSwHX9il9`$8$yT)^=BxgrX@^fnqb>IhfQdr+!5B7^n!JdN=Q~eW zdcZC(hRrw{n&gwcEfscG{mAjoAYErusmSYp|M|_{7Lj(p{gjZrbEAJEYh=GhC-6V| zCb*{P*RUiglz7Y%x$ zb4Yfa`$%AUyC8mrK)}vWUKj-!XyOnMWY_u zjzJQVYnvuKw+M{HI>$R-t}#tlU?ke|_-Z&fDsb>9zD4>$!VY@c?IRqWUR_u`TD4j? zf@xZPlV23yekFh5M{DTte{BB3iUwOP=cABVWsn9DE8bsn&~;EpgUy5{08AAAePO=?{zHFK0byhKLeT1K>cWCw7yvM< zca*$Pm8E>lmCC&elNIEFymCcX@V3-4jRs;!iK3&{kh7_HCc%;i6P#?$!#&IeCqLI# z9cyjMacM5zcL!8@5u@28bBw2LcwPO>pU9$67zW}x#~~c@odzVdrdgxS4iWmZv);@A zYNnYCX@Gy4b?0}Fj!YvXNr)ykrdZ5NQeVN*7$pc>o(h}*(|rQOEEiyDmG!B?n1nkf z)zuxTuG~~?Re?S>@{wym(0ym=h3#+R@S{ zfVDmBzPSQ=tulu&YZ2JqB0_0%x_Wp{$~qVFq0xVnjOa3)$kKFl^+6}{uc4GHCGe$7 zBr(8+5+M2(d1EjEC?$#f0>nYTw1m}6(3C^po(6fuZoHniblZ|w-%82=Qmgpz*=l%Q zE}%s&7m02`nao=POj*Bz{FGJ@x#e${yt&Y2RMQv|JxSqM!LlEDRe{7*CdHdtkzpod zT2p^4VeW(h*TP{s1GTd3jwV$TBdktbzAMgooKgZb3CDKvkjn?hRTSIX6Sy5&Q6+}@Ux=^Z?frGnag8U0@8dgUZh-FRp!#%~ zfUjwYS`AwaUn!Dq$v5yDx;=Scdzg~uVS8GyJzn;fF}YO?d~7KIqTnq8{idxE_b`7h zybQgTcS#WI&2<-3*GQ47`ou8xWFGXW5@^zR=uy&nbT~z}Udh9SDc3h*I<+YWqAs~% zAV$*#&=%hI+HV=N-;SEigP?i7{hrpvO2;ussiq!0{eI?j(phGnX~w~@fz%x($g4qC zLfgSVH#Y_(tAfgHt+E>#^2F4^@E(64O8IzQTnEGG^1Dl6>d;G1hO33}Vj#(z^{+)fZR$dW-H2NQDT==dr4965g)#MY9U z?8t48+B`XGJP5hd)sdx_x&ou6Vhdh+ES&htlF0aL01v>Qq!$f?D;F zlxVFQL#!P*P;THreOWnKumLcQq;L7a*$;^qHzHn9~dV*##uGk__kawUIEelF2JS0jCpQXBv{jGW*DM3+}A+Sg?! z#_g?gPh}Q&IlGfPd=`4H#df(S0DQ)1Fz<<>xRvU_W5Pqx0)vr!HeUt)HS5-(@7dW5oEK)>sZWH7*+MJ zA6a!=7+1s-efjbXr?`JwPo~8>=!Q<78}7Ar+hng;8-*p<%HV#UtW`3F;Gyqi@vgeB+x+sKuR+&RWTfQEk=BvdcjXF#diHCrBsVPc-9FEWxBh`_nFU@HB?6dH z5wTX@iL%jBRvmvVuhy!ix#tH=IYh9_uK-h@i-}1kC3Zwe!h{Z|J9ni@?vBFDEnms? z>#gI9;+-M2%3_d;9yBNtU!>F#7E%ox7)ZK{4O$J>|1($Zf}LW)j*RJ|)$^yULhIGu zxWm)dG++Pn^LN|%`T0^*KwgX_Z%)=s|1f}k+=pDlvzCry25-zk9?Gwfz;E(uK_0%5zY!Tk z;n7`VlGSYB0sIG$yaw>Ctq}<^Y<5 zOfSeCihW^gauT4Xk{8Jf*aTUdwyJqaXQL#EPfEK4gn(&{?u4u3qdprYa02F^D3SPQV)WCz3h6IGw} z+uCtTK$mnZ@VGK3CJb613enR+H7b8}tuP({LyHw?`u3tS(kqP6e#1T7$oaP0GtAK` z)n(OpbJo2m8>@Zqty!o`?Zwv(*9;w1&b==hZnBNK!8+H4h__xWB0B7l4?W_E&eV!GSY?HA7o0Y!2R|U5{KkfbFK8wd2MnDaZy$OH2c}(JV zif8fQv;?me`vCP$J?vyY3P-7Hk=PXE8ig>0cvgtH0Pjlg>JGcZe&)&)grB*#HSA@j zz%6|?quA=?Y0;GJN;7-UKM_DyU(yu}tRf~}8pFj2XV*b=I^qRSqTq0U`gZ1>=uXaB zo4=giCd}9O$N>!Sj>Xt~Ba(lgjOTVe2QhAVN$#D{I ziXtgHpGzf%{(@zzsvy@<`D7{~wC@F$a!e}UCI#Ilc}J(;9DJMIB2-y8=B` zeR8DluG|78N2nYE_?Q^Yt*J!Cjw#$qC>@9+4KyWr@KCn~Gv_7Ubt~hxU{a5^ig7K4 zyVc=7(N!_mbRY#cCF$OqxygWJvoBkP*e#-oFDEpu2Z^71Wn@8QHshzqhQK)&kkln zk(dHYP@V=AIqjfln+iOmbD1k!)N`h38lC@F3^|)?w}rEfQEY#Kgxy%T#X?(*ByTXw z*r%F5%`@_DkgV~ugzQ&&Y1#hi$JgJ!`S!1`-hKPS*Wdo|?VDdT{h8m~tY^k}%6!%i z>7)%6-6C1zWeMO3y^K<66?;l4Ewu-U2l|=lOXupEcF0vTE(o*e3zCVDtO)PaR>ih9 z%!=k&J(=$3FGzovI+=`=tw6BNSP7_sbzmae)|xe}@mS9NI6DudHmgisWq4m)v1(4- zdT2#Y(vvwk3qDNfF9}9UA<&Uc(Dj)n$U#?2i@EA{!>q;pA|R|l97ZX>cWZ8^7I|Kj zon}O5FjC=_df`R=EN4?33e5iLYO`9>Pb)N_{!R|h0%(6D)d(PJSGDC{II*P~S&6P9 zP8)t#aI+orklbtqNYXW+EAVcXDrpqHKPg>Uz^>Pi!fEVZ;>-+#7e=D zIOiY*26r=YuhVSGr3b*Q_}3LSHNna{rA4wMDW{$hl(QG0As9F{Y2%23O{V?CALIsz$TebW|jr+}U(-?=lGz zr;wS2_#2G=20Xl(PBqZ%F92+=4viPUNAyO}5>|g&@FyM{zXQqCDoBe`49G7-q=U4= zWw|L;XhJ!po1>5pEaf)_<#fAAPvqawN&9^*ysPU7>i{4*?d07tjm$$T$IMlEiOf}Q zY_~UbU(sA8975T9#0~b#fTtjaA3VG=WHBR)jPA~Hpm)z%fpwWy*bbbc;$=iin6;8n z@j`!DNTXHwESimFp)mY`++6QK;=rH?ofQxYkU9zdsUc7hLh-`{C$w_=19(VxgH<>+ zw-X*e4r?o})^vvYooIkm#R4BAyE6zWXIfbTCzQqjq&mH0zRY@t(uu;<#_uJHSgA7! z&w2>gTjbijK6881lg+KLV=`@$~_>;w-<66p6Lg6pJ+&=_sv|3bh#8 z)L4uZeWE%a{qX8fUwG#ut|E>^pP+v%_A}{})j5lCS*!9ynM9%|hotzOK_96DW2!8W z5$H~!DKVB#sS?GD-Ptr1qOhz_rn^!KKlT>GU;E0@F%TrSDZcw*x=Y!&HCc0nI4d+T`HXo4(k5O_;fom1GrogrC z(Q9oLmW)tSEf-r{E-E`B7tAP*L%6DR<&Qi|N!0Oa7*#@4RPOm#KfV6;yB~khq7L;6 zbyP8#KJ`0WyF~474`OTwy*w;7UbGcs+QvvF{Ce2UF$vN^Bgi&Qpw4C_$#zrz zF>%M{`_7&)Wo*zWS-5{)h3%d%z;Rz;xSZ=MiOg>!R+zA;eU%wwe zLn0F-0WbBa@@EKpchZwUf4dy*JTbi)HxO+Too_WkDI$!rgQ ze?NPcPO%^lvMGOuW_ui*J>zg?OUvYQE6%9R)k<|~GGkXYuKf^ahl5NEipFoNe_!WO zpiM#Q3~Q7%7H2Zu!meLT_C`9h{1a%Jkwl8U{)}8(h`uH_DS&H_YF}j7SSRNH5 zempge=t+$>7}H!~YNs82WmAPilV4lN$DO^epakn-_94KTrc=9g_n_XQQJ@Z0=}~xJ z22+#4a5{f+@|YkKs)O5r&6U_qbza`Ug!Q6Y@fhue#bMRj;>g`sbS=C9>B8jHz05oA zbfRaS?K4`GJ$dNi(n-zi^Hy{`v2B|jHz?#Pp}Cbm_sr?frFR=C{};%JcZB~KSO(Rkq08@!|4vrKa-|A zLdad4RYbHQ$T7~{TTUiBl{>Tkt2D)H3D4g9?%SqUK3-zEE9(mx!6M;dX)W}4hP6L&Yz8G$SI_k?@p zX4iizZ3AfPc-U?s&a=H|=mKsw`pDZaI+3VkyM25KJXqj;P*;4ymMFNT9Ek{m)B3)I z(q{+LoxSbfKb!r2``Pn7+03SCaj++$=oIyVhj05C2UF$fhvKQAAm-loo)h(tPbhL2 z}GPO?gJwhX`6yJlT0JaxH5J&ue2~A1~I# zmz$!Xg&V)un^UjipZlA~w>qN@jNHwS9b8DHLSDqx-9^4EbaPWM(nXn3c?0=5!L)xN z?P}%6&0LaV(S5M>{Ipo@FUkF?z5@+>T(+dU2Xl`8cMxmm z^%nxik!?ZqQ9u8p4e>ehYHp!|)g*&+K%!BN3ArH};M}#oJ8D~>Q_RKPG1o`DBqCBT#=ioTeL)=acmWIvaHyl|v-MT8G2RBpdCVW5tT$ zRAZVva*5ST-st>CJI6?^Os#H64q;wJ?&d^N3V=DygwDyiFrW1GV5nlkAl9To0GGEd zba?!UV%ax|qrJXALySSz!$pX21V;7Jbk~tCjzVxndM@12S z;yzG{*VoWhw#xsuf~}EGj4X8uJ(7Icjo} z6ecUz#%L7W?BMb$izjqeY1@Ax6XQFgnT1b!3a5Q!Rym7xlwi zk#6~z_6RMzt2vf7+4e{UVhvIjR`1;+E-nsdFk6YZEc9Oq9T5XtMv#?!_iejRTe_xOqa8|?CwXnnhRy;dH5n9LIl)oDpZ$g_hYlw@p*n{wo&lgv5*;WOGM&#)%uB4uUs4xv z<{%$hgM7f#BQc3*aep(y{+@x2UN;3bm}ogWfB?G4jmJQM2-ZqtO6VGZy3k1$^lU<$ zQu~V_O0Cp0Mwzv+5H`$#SGk zZ?0IeZVT>rd65zH-p~h9^Kb~Jv0Lwaq^6ic?f?;zlrPxoZ&oS{mca0TJZ2M2WZpK0 z51DR62l>z=Ez^HN(}b44>J<&jr3-C86R%V(XeqGDIMPtEuhwG_za3+ZJ0|hlaWhdN zP;w!E2rF2nDc^sPAO9Vfej0@2ld?b6I8Rj0W7hybmo6dQbdt*EtkdYyV<}LIs=aH{ zpV7p0rOM-H6h>wSM(Zshn$uTyMfV>ofge}ZBOA}>%%swKwLG{(nLCGFwfKY!VJ2?3Yz~&XOtoE6*x7Qow zCelPFNlqh!RV#N(4OiTp?aX;77F8#zp*jd7g8ba(f61G2YVVg=?` z+2Ckd&)-vsTo5BsmL}=+cm`GxSQmOc*XOwbgjV$ub)sa%)9`2JTKEZU0sqRzk4LsJ zgMIT$w$Xn`2sL2AnpOLfoY;>NGW7!z$!reob)Ze7?Ya_^<{oegI8}1;U^w>Pv9a4P z4(`p>Ymgr{9X;6Y>Aii*+hKlG0bE11(W_;y(0=MIhLiCk^gv~dj~$M5Na$8|0l~ru zwNoDDJV_>`H6PJ;u9kZhk8ps0#K&i$K+wi(TBLulSX0(A_X9BrO$Xd+4cdyI++A^8 z>Bo=jPMEj`@~TNDN;MYm(bQbV${%I5t%-VItPr(U+neg1#(=riVGdN?dZywN4ycOe z5A8+KDEg*LM?ir94kgf~qCtqhy~+`tZumoXh@HQAUsS{G>Bzf$M)#V6yGrTa6T0d2 zhlhV(pVWxE7=~S$V6_)34R}y{2?1xrW{|Y83-Set>ggGPsZR0_;k#Sxm0~51uK9_d zSufZL7!LLp%*Yc%2j~%5ouNL0x#zKh4fS^Hx!a4y6d~{K zrKb1XL#K-@b@C)DH;&z1-#3lt62^sa{lak%6TZ=%UMo{i0_!1w zORBAZS)Zq-Hcxj!O_e<-W#PtUg9ad7IiJMve~_|){`@sMMn(C5ob8@f|nWk*;`ItO_j6a`9`oW9OEs~s^ zkXC@QM-4nyeBV#yw=7>Atj=>BRaodSu=W6i-ltTIZ}y-%46O!?KOej}*r9)HP>CcG zpN+OLH^TP~dLj^|<_Lp>9n_1i!DtM+4qh)2jA;J=E^0V{NDEs4mZdUQROoxSfBZz3 z`#lT)nf3w5qlTsbW$juz62~lT2b}NH^Anj+OVqP8f_8CX#Cns{rY|Y9ofY+J@1U@a z=+MDJA>sk|9XK25zqec;#13#g9hzR&gm} z7r#2>D3satSTQx~2dtv_4`V^UFPr`O_6o~6dPf0Ua(C#b>Fx-Km7XuuwhbBf zC7bjXr9@1pSvA?)s-b_-Y9_nTV9^>l17vstkrP17nnI7Yo^O<#K+HEe#<#itwl?1` zGAxknJh_q$g5@|X?U{+e#?A#}3;oW*HMC#NSgdo$f;|}}M-z;el5M7LnzQ5>^`Wo4 z8h~C`zL!o-InarzwVk%06Jl6Py5%yflb87S0W0GjA%w%WkQsk%ZP~-0AeUoQg3Gi{ zo0eXTmysBAo%7nwdG4kAK){h%rByW4$W zq5J74k=RiZbnqwb%HPy!JpAvm8a_(UrGC3qvyYmOzSyhx1;3sIJ-!`A7@9l8KqM& z3mFalGuy6A0+|xDg{kR)P3KmpU3gQg)!U@Wivtju_ANIU?_|GP?V2{6L&%Gx>~HQT z39{}PQ6G}48~4%Ac0aXc%}^XFJTN#kIfWC8t#^l%_ppD&jFlXDaOPOy^fNWbiTLFz z*S?o>grtlHlD?$l3u`~u#+Q^TLch-*HC?9HHSuoU9N|Df%rKZtPywm&Q?y1jkASaR zW9JgBOJsz6Jx?p`p;DBw81>WT!<{;Je9}h;NKwQk9*G8_JKU8!N~?H&~Z;hTRIxVb6WhAtH%sskNI zXwoX#C~=UpAJ9>eR?rnh@4X|@RQ|-eM-$l+3e$z8KoaGGJ(mc_M28EtVR3Y0?_M+y z=2(AWbjxH4UueR2I!E>XMx{`%KPx4M3HZ|LFjOaKx2(I`E$c33YR`5X8q5w;WlRG+V`kjT{V8-n zoLo$`%AUfPQVID$EeKst({Ze0kpd^IC4_&li~v9{Cs?Mwz=-de>KIHz{3sMeMtGFreASSkb5(?793xZ>J^;^~w46IFup)fXPCzwt=ibELC?)nr+CLi4clO4$k0ju- zm0EuPnO>tc}MRbI~xGSk^OhZdkJa06bPbJNfk(ESagbobvN5Hzoimy5<0W^QFL69_! z;97dil1PCefKnU?i=u;zD9t;~7K&O4w*-7hAcQBXq~kCND!X*?*v4SGSVrjLnTez5 zVi}{0Cq7*~PmV!>_Sao1vW`)awe5^-`x!}vEL#X#w%#^uvAhw9JKf>7>M$-H%I89hid03vZc!d@8WDl~LJdJuzi3mV-81WGEVp+L;wC%G6y zwm2rbOazM$TcDw94}Rqi%pTqp7|SH3UmeSa14w1QNDH78xCQa;uo3g@<&3cKyr+$a zs|npu7@;e#5Qf#|P;-AO0!(LWqdSzoFE%f;51I4jzS~rjt@}3~cE{uIVdvcRCY3HA zH$C%hqJQ)4tNoX=dR)H9Fr9`RFoqHU!dg^uJeG)=+XM26x?z+q#vgz&6rzvh61g7x z`?5~qw4cjiPbTN4D2QB#b+Vvy;t{qyIcC)IOh<@Caw*@*1?_*!8A=*wrNdZB&Dj@< zC2UQK-_rXvOBLOGuXx ztt}6Xc5^&ls*NgJyqwh?2X!Rbh4fR2wgiA6LWJQp_FwD70(-G`3RWe` z!NqOYLAhuwL05F1ShvRc&9mvJ5YcJzoN9S?{Z2iRyF=X#eGUS3-2JzQT0{z%5<2V^ zt!XzAd*W=3I#j$6SzDdSy83iw>9Mhe?UPMqGUwK6{cL|l>R57ALU8boId)wZIBY}- zT{F6#S#(S_m)W7q7t7^c(QgxRhL`r;O7mhfeRHh#2v&exp|QfZ3q=FAI4A4SZwqZe zydmF<0!zbgz$SzuxHl4d{lsMwQxy?>Ijf-+CR#mv!YlR3yjd^Y`jdLr4jg6fOKY|2 z-b_h7-S>Y!5kkQ5)_g0WM*uAh=1Eg71OVd3ntRZd&(wd6Ua_LdDRchf|9}$F+mF>t zEr8cSZ$O$=9tJchdI2+rBG++Z*UzJw;VT#V_P&uXH& zRKUZ3ie-6C>fJO6yMsFHM|Q}?4_929hvM4Y71!pDxE4nYBd)boj_4L06bJDNx`a?( z3+{is6A~5d>I_KC|6O@jwi37~5Enxph8yqlPM9NgRsz3A zGlqu+-{<_=asm~@$*ez}K0J!GPm)_x`t|j+>f~=gzQz|Y zM+GO-=t|BueN_3RVVt@D9lM@ZuKcDh>dzq@i71VH*hoaPa7N;;5(42W9kcR?G_`-U z$6Dz;&)u3e{a#vuXWkWft~RA%;gO$6WNXU}sgzJOj|oNRzEG5|LN3XrAj>c3ELeg1 zh)fPTQj$uVM?xGWDLL(lp?8axEq*V1FfW`5G+Kd%SSd64nlLfuErCfo1Em( zXRP3&E7x=t`Rke&!f-m8bOV7Ue7=A30w}1UyAIeUw0_%X@i3sP+N@e@trCYF4aw)R zHo08g5plSN^m8#9*E@RRgZu(N9brOMUU8j}W2*Q(irc^uBp z)W%HbWE04o{AYB&HTS~Sv+h?(tN3Dvej?^@O>SV6&X^3kou#U>>U9J~icP@l`QC(6 z6kNdlLWm_w0lHV7uk3d0w2^ zyRDbwC+SOnOI5pdB>MZUA-38Pl6;^f7LEYGubuR2vH{;AqMq4BwhM(z$XppE$i=~{ znVFy$dak-?mC8NLp$308K%L$Y_Gxz+DyW+Zp-v)F+WeNCsnd#XQu*MdRrp+NYu1!X z2xn-zaE6C$bKZvZPewsFgtJdH-a%-yES>u_a0_YWecAyLRPWYl5VY}W$H^u+CDA@7 zI6}wI*vz|yjYBeWCE*4NFBcFdYNye*M#_`BFa9XD$r1V$dBA_8`ZHA`=kCf;IiG|b z-cg!n!}%TI{5=x?O)v17&Y#Sz$8Ue(15clczc$AH>>VkO88SIN0)}@zM0UFjM9yS8 zl`guG5^<{-dnJ)=gJBNPlQynTr!dy*Ii}lkYjBC^NO!-r%NX2{+|APKVdAadaj>>b z#-f@owubdi*hGIeD(rOjSH-+MbJv5Xkzx-&(cT88N?og=`$cYVw?S`{8BaF?t7*ed zv93RwF{!n@PHDqVF`{s3roR2d4I{0N%&e&VB4H^UFd+m;#}u#^lEWEGSHG+(0K?uM z?Be8eusf^L_60q@*qxy^qYwZUnh$6^{j!f+D#_pvVi14Rv5fG##Ka0Cvi6wUh0pn( z@)oC%BZi$nhvHbP8o*699Vi5K0CQn1D^tpTFHEL!oadZ7c&cRtPj#{(6?3Y~E~k32 zDUBfGBOLb8hE$5fUdA}=E1$#0_MIHjy`*)(BLhbgD`4%x{ari{xTd=j=sN%r7}L9G z;>8`^{eFK#s=n@iwJA++cfa0{YEyTA?|1k6E-U(qBF znc=OU_E!!D?TqK_&vgF~3+`Cl)@9Jfk)YtKoeYwJ;a5OY1X{S!R^yS%7m68~piVA* zYkc}f-ifm5*zpf>pUiiL_sbpsOKQS|c{QsUd9r{1sJyuevqjK!^rGG$iM1~5Q`lvu z`|P3xeK6t;<;Tok!p#i}1ICr;mzkI8V+JrgF(u@-E>8n0${VHaG(qZ&?h~f}xv(2vi)gGfsN+t|4T*uVR1E0O1RGF2J&dEGVM+8pX<#neItd!s(=E zT&iXk_QI3wD0`QE1p&$z*k*oUs5u>b-WxoZoB_=ZcPGQSKK>1<#@t|3Ngw*YS72R? zocTQQJ}X0`sh^LS|Bb~npJSzP2md45!TbLp?#b(8bk_a)7+v%u_UvyJEEtU1JB@#T zL!Vt_SK0gQAGbfNE7a}fG(At+t7&?cw3mD737+@Tiv+=#T+{R_LEyUtVebXp@b~nU zJp7WrPEOQ0X^AJndMxntrA2bQ^j;M(;zQDCS?6TB^+vKwaX@eo(&_^ZH zz$!q*8fh69pb)W8z+FyBjeIrL8LQAe4kg!dlGMTE_!)5eAUUVz#Jb7cCkE^bHH~Fq zola{TY~LhNCVLb-;0*Pn0q68Ia`a6PAqBE9if#^h827?^RbK@ZU)X2mQC5GIp${tR z2Iy$ydvV>}Zw|EGO!nd``~nNJfS_R)*NBHhoro1r#ACP63k<#<^nzX5;h@iscFXq+>U-|3a4hx4lDG`oJ3aK@Cr%G9 zWF&<-_JO}-e~S${l8Dq@RqB5)l;m%eB%mE; zvHvCc(plzzOTKZ}H$#Ip2Jy)!!XUaX!Lw_}3ojcga*Y;gSS%yh-auB>ftZDkd{=;a z0y`#`j8#q))GDX*gbmPM$X~`B2|IYYFze7WF**B=6rT#;XUoyv&OJeZTZlQ^ciq}6 z^U>Oyx)0wBnhDG+I!%A0@p_6zzqwKflbZAeVe`oPopheU-_aY=leTfO-~t#FLa1%8 zapqnFSJPq9*=ST0=FRpZdA`YHd-|yXugda5TecqVb-K~;f;sM{Aj`|ez(sSixq-nz z?sYh}9^P;X_q#Xm-)Xn~O!onebciOe6g^0ra&{iadZz z-URG-#MJk$5dYG2`QQ8e|9hYRKjS`s^;>S#$F7Io2XdgX1duM=aZQwNtEx6bZy91o zmtCFUQmeb_*=kHzlg-6)5(cRFoo_aocduRR(w3nvZTXO^!B%44QFZMHM%X;%SaIid zU_q?KM!~_Xv44M}U=)b0E`5d@05KAgyC}9gX3oIGV3}qeHD{pXC<$i$5OW4(Hcg}n zWVnD?GO{F~xIzM0F}p@sHp2z$^5h&@Mn~`O2Ej*1NX$?4#HkV^oq{ zK{$rjNU7+$rVz8|)_gfhWQ@n5mSD5WrYEXyEmdlv$0Oq^!Ca0q?$^oOLQaBnWF+ySKkg9cAKbM<*qR_0ET-{cvkLrg2%y zcbClYa>L(U@iXbj-w7v9_S@g_ojV5IzH^N$nW}%tO`{e}eW)B~cRF9F zZDxP+F7<-W9F?*Oy#gfIE8lKoo zVVKH47gt}JF4v`NXggm(6U06`Da{2P!95nmL|~$@K3(i;K-tWaAiiJ6awy{_W!Em; zT`b&fnWi&>I;$C*lTy2sE2Re{DXg&8)H{FhGa6f95cf{~6vKug@x%hc_dQEUuBR^hA?g>FEE7X=PVA2P@J@H``txZe9&vyF{~Dt zSqm3S$B3NfX}zWkyV~iVuX)PpFqwc}5-$SZ@_Qp|`<@3+7t6sUEo5wI?!2>{Z{C09 z%Jy?(@h!Q2N0eikUYpg>Z0kq6SekA9sFwy}@q=DEh#~L(N+&s(^ParZugV&F$x=)= z2%J%bOEc+&Fu2Kt0jwenAScq*GtZ`myq>+Bh}o>V%%)4qB({1Bi6QA5-GJnsd3V|y zg!MEyAkbdI{wCWfx^Z4etaVb7?k0cx;%^4(i`Q^(XHXH`unt)!?$--R-q`@Bhr+;~ zE(*5`KWTp_IdOC^`9aZcayJv5Ksw6bpY%7~RpD->znc(ecOjo3>e=6C$mfE6?U1ad zWB0PA(%UOKQi|1o3U&6VX1lv_5w}aSPuU0JSSx0tG&gQ`I6ehBn_R?MCLe#u+rE!< zPPBVaEJjT{tlF^ZtcAW4$0>P$l1Cm&slT{NV%i)({&pLnuLL5EDqN6WrhI!3+PkZ5 z!2~lBAd|H2U;l-j?7D>qqFXjo66r*@iFwRjn(&E=o1m-lbo^qI7u50ONn3IZN`IWVSv(POUw|;W$-`1qrhy-n-k)F8W)09mT7i z^&{u4r0$!zvSc^T-2M#iJ9RsC8r2)UqwkUgH1^F7r4$?zd|HnT^T^=`|)0X`mHT3n-78`^VngKa~RA$z!=inVB_a zCfS;yqo`tVmdUj++U)vT1O&%quijyA#VfXXSKsXy6J}XH{$QrNd{w+2f0DT%;odp+ zoDRy~0rninW!V8VvlV~g*bqx&MgVoQ?Ovs)>e9=ZIQLe(ByAuB#vu`ux{b|S6}#3u z^ZG~HX!ZaxCx-JR`jHjpdXAa7vTN|Qj~`<+_zY^F^hhi?LDy#U!*T7VCKtpJaqkmNC};3~-`i@V9y8;WU31aG(?htgdi30u{4x zsFYd-A`qeb(zIJiAe(DdbV7v?{MYBd=BoZCU~LlVAjp^X?WlTdX=J_QY*+*8jb8B> zF(>j&ee&3{T_;AlHFw`;!%{MI`CB*s3OR<{i}!tN?ZqChBtM@Y+U4F_fQt5S7Ao)pV%PHFuUh7-`q z%b7IV$djEkkTH`mTF;6X)7gByhmKUK8;{HdSyECHBpbFHB6~D@NTm*rwPZ~d54mD5 zsM8wxLSMf1r)EkI-w)+jVc{YyUdo`8ti?SeUy;JSY`1~T;)JkzMw#{`KRo^0h*(wK9HO1 zT(MN59uN<*H90YkeR{FJh3MW%=16}Jv?Y<9JukTvg}|$VCbm)O@_sC?_6?-r&5)x+ zpLV%gi^r#IDtBE1KNn3_^e7?W>6kA6r4ttjH?erjkcYS0~@q z%qVxbaLUH1k1llyxw98fs1KfpqHnYktps-4EQhqX;06v`&+FIVn zN27nSgkT(jz`ht?q5BbOo-M~@#mC8_&UB)4B*K4AFS%cjCg;cj|D||EAVMTh=tq#w zj4dj-%%Hiukn&ax0jKxz6;+Btv`?a3xk_DkoLuZL9OdFAU})#3`LNp3Pb1HVDv*mV zOl+ZHVgR(#n}Ugz#F?45I>Ep%T<_6|6iI(3?ggS6N~x`Zu##?hus)8pxcXEfhGAvl zg2+1pr7B|hSg}$nC&LyIQpMwQmZqDWsH&GLrcpxAQ~nwB#BNyDR>HM;ot_`I!Bd8h5fo{?dPT zdAG@ml#has^rZ>GAb1QV^`$GKT&ef{U|g&`w0BtCKKI19WY^`cj`l`n9_{v$I@xEk zoB+4e*XZnpx2HM%Ooq2E$7`pX%W-|XuhRVE{3wCufw`an) zt3y}6(O-gN7dj{-TK%AefL7hB9b-nP<8L|Hqkn!`M2pacw@&{GgA3N5ARlIg)Y(l9 zDP=jyYFR3w5U8_Qgt_%emRfY*1DUMEs&F~9k7*n9K;QD8bOTYBV(Gov;gtH`1vGe-Fu$a))+Z!F2kaoL&;eo?) zV7JnWpWP!<6jfMCfY&w)fIR1_t1JpM_XSOxubcWzq;E|^=NGa^53)xZT%J}MvB;-o zzG2SZt~o6oPB6(A{6a>`_eX%!?CIMd%&_d2FP8hGa?%N=*bsf$U@>Ygw&u%&Y)K+z zI**o>nYoW2*9UY9e%qCb6$OWGxX#UtXjj>_qCQaNAba1aS zavy3-M+B#Kh%xp8ET)JyA#2EHv{lI=acphYAnc=P8%sKzAt7mp84_i9K=IfR+%$7c zCS(92(Yg)c&8ic@X-Yz*;So@Eg~zrR!6g_M;81wiYFyuQF170rLra{03hRVpa8z6r zOY(Z;t9yTS4Vn)4S zpo;VJf^Ucta#@`O^;cql0^|v-K;)}_f;c91b5$KaGf5y;AOX%OU1I7}J72CFbw^QB zKv0S)v*hNJpIW+H82|DM8M<=9erk$~vR<$L-V;vorSRLpYKJUTBB|s<{!jTi344^; z4KfMBWcA&Wp-uE;R{H)@p=A|uSVeP%BWR;S@gs@t2x=;5-B(t zd`pg9H5{qCXy9d2So&vpC|ec>M)x*`4E!{kzg>`)t_50DnoCY0Ag~4_e4L%CCeqL> zAdts+C@}yan$Y#|c&LzL3LzI%tM?@t6If>pJL2^5SY&s@b2JS3t!L-y{O$TsrI?jB zH*4^6i^&v;sU$6bRInwfkaIJAYRXTgngM6Z9uC$sK#d`8PMu72`2?1Cf>7UX6;nx$ z0f6>ze|2*s)xEhfQK{Na9gv56!U-tE%}ucKmmZ~+v>)5^``Wq9-0jVwWa5@VmlP;;Gs!jLDMz;RsaY#%y-az?Bp z>pKtr+0-GXkv{eALt}>h=Gks0vNywNhVabjo5wWsWkNoFOy)OKoK7bGEYoe}3E^HK z)|=lS{#lzJV;0=Lbopxb0hL_~mx}$&aUnaHm(4r|4)*sz?R`OiJ1tvVI8k#^vC#RGg4T3$4{NGjuc-YkpU*R+jqvV&Y5egwt-FxXY;ENmeZKD=T-$z@ zQZs-XB9cuZFl3I(%~?f8s_;N2(CGA*Z-?`7G5X!p!`nW{g)?=CwkSOn^6VvmkagP}k5-o<(zU}h8isqsYmc9-+42=5eR(H6P@ zYKUwY8p)Ov!(D6?`l!DK$ZCD?bbmb_kEG^a)HR|?SFq^M>p|TKq?A$Un7e7pXN3$B zYd{}Pb4lZRAl)=8$Wz+o#LNsF_sC<~<=6>-fx;Ro@XNl`kSe`*DvGTVUVSW`Mq!}O zpwVt&2mx_6iuT_|mmLw=^W9Ihw_n>E>}KtgvYPKGnPsl86ZN=nP&eHO@u#ZYXW>)j zqOV)5Msy8Iu9?K$cJxCjO`UKe;@iM{0Yk0^=a=%Lt+U`%#K*9G3)>7#?IJx{EO4BE zpH)dD4hbSmQG9Y}W=(3tMoE7O`Q_au8!= zCx;SZDmzt;oqwDk!ARmi#unFKV^|i$l?GyGgWZ9-MnL9vh*hAOkjoH%&`8>|!RGBe zdQ>0;@#Pnns>ALtv(uEq?PxN-LagUC1LV zwdU`&s&|YM8F-qFL`s(d^n=aP#g>(I^C)7p3 z#Dy=?RK-c|g(!Ue!e*g=Y$@nC0K3^wesY|s%ay9qU&~bq9W-i%IR>&xY`wIGdn)2Q zI?uo=`=;Bm)5(^YgLhlYb=US#`Q66BeSx=({*Zs8Q+hd7FNBuYK9ot{FypAx-Q6@l z*qz}71N{TV9cMX1)yUDOdL`>l#^9oBwNz!#L(ele#nL6lk{3TtsS}xtWf|IPrN4RqZ3oX%cQ*808&2E6`5cQ+1 zQ93>H9hmuhrUxB=doD@Wyt(Y5;!h@EsPtBg5z2i7 z!eW#F>fS#Awi6R2ez{sb&Jsfs8E%}g~eGeu|? zW2A9XPU4x29>hC#m_FhI-A*F%<#!TfW0osy?#l`Ct-oP4BcU=|3?|8-YDzuD5MRL5bR;5i z0=Ge2(IID*>j=WYbN~Q3LES{wkUQ^?4D2`LD}pvlIqvU*22%k2kt7fT-kQU!kaZ<3 zpuhIgDm2FH6Eb&SEWT$_FR={qQqC;ASYRvNtg#b+D4_%Wjc3ifgTykMB)@uDqh(sC z!D0uSYCKN7ULs);qD>~@K2r6Q$?9$~h%-FQ(25X*jTUK#UD3^fd1SX9U@L3e(mgPS z%(y8R9mm8=zXtSy_6pItI{{=l9@-D*vwnWDJ6dIBm;pJZR*%jmMmF9ntQ#yU>B5N& zQU>&bkyv)U&^@%i$sUbV0O zW1T}LvT&&%RHUn&Y4Kz<^8!L@ z_q1H>7!BuiH*qGWKI`K2YwqQX>nfZ}Q&NTGH#d9o^Gtr|Ggw_BEsYgi($V%6n(+UB zvG;b*ab(w>;JYLIKNNE#`Aa*Vy}-PsL$9WxWNUfW|^w$_p*O~{gLKeYVX-Fj2UJWb5X8y@?Q*xxzl-pqS5 zZx#wO>lSyoJc_bmBhRphJ<=U;}1?Y#;St0Pmy897UC&untm z89LMbCU%pY+JFp8lf|)v*o~`*O^SM<4k!t%w$h9g&Yl5q zGZHVXCP=gVemsTXi7C=Xnc$%}cJbz2`B}l9Hn$ zDLHbIl3|gQ42z_su@dCaE%S<3Sc%ZN65&51Qqt$pCzN2+tM)5I^0&=*vD`HFv!+C) zQECk|d;z zc1HFCK(8NS3-E~{$eFPhVi$WMHYFJC{8f?OWPE87=N-J;be@jMSmI02g`xH_EplUC zzhZ~-mR%XKfhL#}6XHR{n!=x;r#2TO%Q(0aLgJ?CNzE#eX)b_%ht#AQ0=>Dm09t_5 zPPSM13{#&jU(OS){t5$sAgew$4>o#}>IzoKUF&eJ*OHVxm;Nx@Uw(B!33X`=+RoAN>W#siL zW93NdzM_Zb4`yU2CHvth9(Vh3+vY00{!>(-&7(*x_?PsU0V5{GhQ~E#%CU+7OS{Pt zLv^wO?u?Ql)v>FdO@F;h*RJ{c-$L`oHJ3e^0Vx40muHy)Eq}@`B5d>~bG!jU(DhyW z*T|*1ghN1`M;UFZ8bBc>=ZPuGjw8ud33{4X8QMb_lG->c@s*|ddU9one9shCwb8=I zi>hSt#EUYP5S5BU$T}1{tcy*`+VqSH!(1X!YW3>$a?I%VCcbV(jU)$RR(u{f83si8>mD_Otb! zjtVgH$>BhdRcCs0<3wYww?^9%ipx#|M^L+cyT(BID7bok0XUj!koOK-)&h!%I@*&5 z0N^CTRex`dPoV_U#7C#6i#Pd!90fsNiv5MeZxEDtK|Y7($iF7@pI^+!w^xz8O3Cx2 z14!7?(QT9`w&Gl96bi-H5M>OFLLnDAn*^(%Nb(a5-Q;Y>iF9_11SoCWl@3C<8+5K@ z7RsqHVDhb$e`%Xv$TlNZ9PE0xu|l>8Lo;pISbrgZenr?~-i^oe^&vR^R2^r-iIWRd zEHKC(itlwJu~Nr8w=I|_s~w|7LOSNG6mX9mH#rHB$+TO-u@H&xxX!h!1!}?prm#g^NT4?AdUt79D`&6S~uZ`!kC7go-0^PXE zdX%w_w)cAA>)c%4gagtKy=oO;Y<_J#$)RD8avlbF^Pn{*ne*U{1*m{Sf;h!hK?$AC zbV-T#sE`@b^T-JswtzM-Lo;x79zlRLf~>er; z@1zYj_MS0Bsq#$YlP6X3i9Aa@t2TR;$cUtz9KyUU`1#F= zjHbb}?tEQ|x~)nx3Gp6b5x~-msKOqh3Suf<-tYB2a>+$^^Bx7{7K7V<^M&6hgIgKD zk#bhmv9od77CLn%w)N3SgwJsWD@Y` zn(6jRZI44BV|hkRulwEkiR;7L{^1-H(#rWKuH?6AavY($+7+R?%+BwtHyK_|Mbqt0 zw9}=0L!Fp=GBGxuy~7jP#>VD2?`&m`psZFj zI(Mz%A7#U@J__m_>{=V+h_QwpR`AVlgo8?4{CFxZZthPy@&_6(KUmS*wROO#wkRxU z51hq4d`lHxx}gfIJ>5EZ1Aj@Urw6xhp$cVCr((kz8+>Q$czcEZP(-d(OztWNEIXTx zT}fusVNb|tFa#k?*8Ixz0>mj@>AKfX$conk{u6k*gck%vg(rJ8GB^W*)=7?Nl4vqp-lIp4YWMtF_m1aNOJ1+% z`7~AX#FHbL-o}5PuO_ACZT-^rFV*H%D$PgBQF2tH5R7Z15dglo%4E;GDVlu5TbQ2P$)wk*4U%zfH-D<_(L`RVy`4;I{Yg5m z#e;Tl(ury@eI+NGwXBYDQlnEe?&2R7sKy7hS-Y1U4SGq~sfFWOcRa=(x^hL%%e!QM zK>okW^45G5PARK&)=em6`fUvMdUJ z`YboSXDUzDNXsmH@HDjw5>!dZPq}1w7_lsS$?m&AMe|EWD%@Jw&Qxr&l$8oCu#BEJ z=eEq-C&i!hCwp+tWUJUhm`k>DEKC{OcV|f}JpE=SOf)o)3-ii_bPAPWb!eTyMPzAP z(8=@dy??6$o9dOfdaR`qc^B;oDrRPNYdcZNE3)oRt3c^%=dGDdgQg`HrRw~eGhkG2 zXPRcHu7cZ-n2T$;KXZn91_p1N(_g@JhXv&`)~MoFOsi6m{$%Dl6;Uv?QcWbJHj%)R z1tuhAmKcc!-z8V_8ZqGJn+Qr!BZXjM)DH#(QGY2$?x+mtp=7OLZs7QQdMemc#)A=5 zqnOpkL$>ldw_P0>Wm^OV_h>}BD6lh<J-G0-+_&hgh3Lx4*5AhDUv=SLa>E#w03=2j@S3Ju-RZS|rZw=rI5 zZ~Ji;zir5d6Qq%B8sHU&bfwd{EsA|Qf39&Uj3$+yJB!;RKATG2+S`63IH!JKcCWCB z^M)GByI`dsoXKCph)ETGNS&wLr>EzQGk?qaYCSq{xT>3Tb6sosj17WL6UC&$i5Z(n z@2VmmYi_hgai{GE&H~v^)kr3eYn|X?hGI5!bJ^W&*S!2nCt$8Ww|~J?Ak(rfVY&|m z))#N}mBZki`GL-rg)&Z`OsdX!1qZH#1~35Koj%LNzS=!+K93<($iJSmY~|%@5q~d? zoa^LO?9y&{g+)4>wjkWp?CYmDrb6P(ZLPLo&clYv_woz!YhCO+;ES5@)!@+Dx-ZPR zaP193?pDuP0!(0okLU7>Pnj@)=GE%`YU7M}UMfw&=gh~+;`Wqw0C8EZzceOAD=ht7*e(p1Ps1lse}B~u;_`Hz=dL-=(>*CjD_sOCZn`QGb;a?CVv~B> zWk-ny8%$MaA<_(5nng>H!Ff6`M5tPesl1-$X9soW;*D@MaWkROw z6x9OzG{!E4DmShk=ek326HK7ds(Q_2)yYZ%6r7rFg|lfwWxNS$ShFUyoPSW;W~g6Q zYLaJr+#mzbb(Ce1P!VxA6j_Y(7O}B?wgx5TcjaFOGij7F9?6{>FkqW+RUcp%vj9>n z?1kr|gGoRzA%-qu`LwlSr{4$dNNYAcz42O-CmCL|YRdNCkm-XHCnQ0AM%>=2+i+?% zD*CAE5s&`WZ5?vfo;aprZhy_I_!szu{YjCJs)+KGTH&cKx`(1kGV3$_QH8IO@q1xI zu&d6(-N|<#uH(swDHj|@gIU-N(+#Ft$ktcM6;cmVmhJs>IH4pu8SLjEv%s|!R{hF| z4xH;tqvepVxa)AHqEoIKnCbP1nC&3L2doNUe5CFW6Sd;h>M>oa=zotuPO=hoBr`l* zsbe0~1dQ#Ya5SiUj(oK^t#zW|C?bDcV37|xwNV5h+{Vl9am_K*W^E&in2`=X`d~1i zCEkz6-N|kl0S z(=*s7i3fSshN@0fd;Y2Pd2J8k^4c*ZK(#iNuBF4M9q+|hTz~YoSz8+r!vfF?3(vXw z(YTvH)&i;p`ygSV3)R>QhqWUtYK?oMvZYN(zQ8NwZr@wG|KRc3&Z9ez-{wwZgBwXZ zkJg@kX6@d^hXXzu1O_q~%&!b3>5BAIQ-7cHC4^E7EgfnAwW2Vn6|fV58HOP$<3uSnd&hojS|S{Y6If2lz+;S4R8W9qNf$X23yHC^V3Qh z89jlX7F1n#%U>J2D2UeE28XayK7dkD$<88k_#xr;GVuP4&Ez2FdS zET?q<=6c26-m`Z-Clyxk*#IJWOgrEy9md))!CpPCeJX`yb5uKs`0=P44P*uPY4Y-= zr6P3f_J3#|syeYULPrCTMl_jiTtvk#5iU*xGf@3~K+=h3#Dp18C#ozB$Cq4OMkM0|s9J z7?iLeCmy`>X_gbCk0kiTr3qNqPCc4h$bO}&Sbq))^+D8%vKl!B2WFY_9D#d^%Ygo( z#<1OvQWlKq%IP*8k0x!9iOo-w_%0h*R6e&qBj83tM9e%XlIN?{k=4Ta1bT4!a*3cs zaw%=>d;Ms%4-{^kyamwzIJq|&qG{j-pN)=zm$hoE;eaj(&W5XEFfVmrgXX7SZHlUm zkbn7>piZCP;^rvE@?*f#=J*H~p0p{~6Rk>$%ZpaK#S=TzykWHmHJ~%tDFhj5L!pey z+71CW8T+B;SZ#@Q0l?xK1CJ#zPYP;6dD8gMQ+-3$1Zkl4w)#mIM3++0&(v5oIy4!H zYG4{&OQWFZeh-jaxr1l_Y@_`NlN;iN%zybMSM(leJ?~MTHqvPWMNFQY={|LcXr^GB zq`%~c#vU71b+M{*6mO?545<)zS=@e}Wf+6Q83V#Q+ zTK&DSyIL-|?-%xEWu{f5F?XgB)OJYqM}1p=yt+o+S77NaK*L9D#aSGm%5X34O#S|r zXtze>zoj%B%qm0iRh|3Uuw#zK(V0Sya&M+*;3@`vM~^35F6&9FfSE)5of!i^CUr5J zCz$b)>02;9^VJ@*bJ_Q2ai7jL2!B0gm~iIUCB+6yIfA%;LLos)AK0L-J+&@ZHN_f= z8?#tR;X71}3MoKRN@*zCDrdw5<|nJzPWDCjG)v%a>Vs+*6AT6leG1hx*?piCkAsu) zmM(hj*x89w{t|V9OA9FV!YF0#tf>V_Z*Da>QFOK(U%RhdM)o6l&iuk8ntw!3jqCzL zWjtBMWi#tbmx_&}<)gqHc;@+{eq>MsCS|bNC^=Mu7^QA>m`#FJOJ#7J1+VLi5}g># z(29Y3DlclI1tWPKMSE$G_~s;#i?D$*ETaivJsoX>ooN^6;84`;N_V$V;voBq$WIJ) zIhHzS(&rc$-KShth#I2iet!X3^rhhFOFoZIK&u?HpHSl7E?8B)c=rln>BsA`D@b+6 z{1y*T2{bY2OOJFc2(X)8B_L2ZaaYy4e$#hV)VhAlFZ8H&V}W>7H)hoh=S4@4!1}Ly z%`0H4U~3$EMqmsQ|9>f!TcvI*t1{0;=Y?sJE8BuL=`cbqJRij^s6E&tLWQZB2{cpo zp;kMJhvV8f+)sVr%m?UO##EA`z@>L1%1Uatgi4E|Zn<^Mi-?0d?f6kMJ01;v^37?k z8yO&xvwDV;S<9XkEV!+y*bLrE527YH!Xowc<}tHGer$8vC~{z&VuIC)$pj z@BEM~<1Z=b*|t__+yECOSBQQD#p6Aqd7>BXh8N1q^Q125_Cx}9i^=3g}ZG5CDGQk?ZE4R zrS4rLmoTmY6(>dfp`d14-i|jXO<~=WK1mH$lMaN|4M1?_*)1$CU48x9^&2;DftPHq z0U$BA-;Lir==BH5@Cy)Kc}-m6@t6u`_o&qdDi5MFUF4gZ45)~;8TDbx)|z!$wbxYsQBEU@8RIx=(87}<46Q$DgVKZWPJhR$9L*4bGP4Cy;~`i*(IJs^abZBk z(X6;f6RTde>fGw-DVi;3#LSU59e|sLk9^*1-V8a>slw5IMpSBjG zt9~Cp*f1uK&eV}2cRI^aki|TTlnYXFcBlKbl|N&fwar%oJeQKP)!5^trt{Rixj1Cb z(|9EL?U?{o*%BpWTsrLW*U~v2+z$B?B63DlTfq_}*9GRBY^5ZY0+W!uQ?EomU;y0`%|72&b6bK&`u48_2d6!MG0T)6?rJxPS{t>JR*lX(1Y+osS zit|stS@WlcP(wUDr3D1DKIN0B9_JTt59YfB4fgWCbO0A%l2#UGV1@)!k3zwL1C@irZnF?-d+ha&0tc zRXC?BK@}>L1DYt+1s#e7U+->v`_o#}B%GBg7NwK79G4)n0VN2|xJ)iH=5&RZO|k(Q z0gRVtvH>W67F*G$78l+KD3mN7ZU?W+!vgT#m8I6zyuRe6>$_Cv8sAu4&~+~@H0;V# zqw;d4OI#^xy{0P&mT*|5C6#tNxFsn#$LN_nEmD8pSVRR2d0V~WKy*0@i^uIOWl;pp zZs-P=@@&N9kURithXxI>n{_ zl%|b;Ua76A#s2KafAQnrt9|^HkAJO(62EF!^ZWeyk18^dIj{f_KsLxy_T9_6<$d(6 zkN*0jZ-4aNkN)bT?;@-5`VIT_yWaK|?fLDB@qd)lQyU0zQvJ$B3LXNDyj=Nvq)`R z>u$M3KJDgKYlrTw=7ob}Z?3NPHg+&8oI1A>^b}GnYr=V5y9LUt<9;~EbBD-|(qs>R z@5@8e{e1si(RB!+)2)|MfP}Hu6L~sq*9B{&`-L`#6u^|EmtsUHmYhqWnPp;0Ln? z_W_pTQdSCf2Je48FXcYI5NO1MkmxgidZ1GFgE0f{37|El^8CP5pY@QJcb~H~Ish#| z70446EIt{1a91MhuPe&mq!;ctV>-<((&2;Yz5j>gbj5w_-v2{lshT?t8q`%MZ?Yd* zSx41}F5I^(tvqwAO< zz2d6z!uP+KyzC7hO}pW7!H2VdPW$^`cVw-)-@}W{doug|j=h^)@P>C6v9|l30B|B! zKK@mP;oiqz!Sh!=Oq}=eS3mxhAAgNrI>_@)5E*~rVc?p!`5Foc$?{)*6EqC6K{ZSW z1|;AWy+d_){?-5Tn>F);wfKASbo%gc0=*0L9=~H;p68H;2b0MG)IX_zfILbW=QcQu zpwXZsN8-3TZ3@OP`Ug5pNttIa{|Ee z``^N?L!cN;Q4m)Ey8ZWmFHJh~N*xKBQ=e?N4;85KISXld;j;QkP5#yn7sdu97F*o zw7j^QS~x@_7BxMYkzU}6fzDL{nS;Q1Dp51K6w9oV^@EwVEFsr zGx4H4|8yu`Rmz_1aU~o#sQ!eecSd|F(s`>mCLps)Jd?_Q)!2`dk*g!l)hO{yW~JY< zYG=Y_^Vygkna#>r=jmNRs($j9-F<8$5BVJZ-S2+s?|=J$ z=cDwKUk67Mr|19sqkk*M=)ZmWKmNBbe~n+Ql|4wf?tl1-!q)!#H~#%U{=5H!tN+K} z|G_{0haYf%3;c@~{_!{d{eS-kM_lp|Mst~8qQ_;s9xl+sr6o{&f3abp^Jjt74LIS3}Zr`ji;e1g1u8; z7~!OUV$%=`jW=rN%Uob83Syy~mak_Sjk!pJ0;=DSXuY!`_lx`g->Q<*5;ZVRBf&weG#+y zy&wIy%;*>K@I8K@)R{CLe)QY2g;W(r0xzraeYP!zddw}xulW|^*WaFHi|PIpw%Bi< zx5aWrkC~M~+!OnikN!fG1-K^jRW^x#neg3Da?8!6`5+Tn+HmD$wcQ*as`MVx!I zaAsugFlrY#CdushTsReM`koBJgp&K)2);s>;H#wRHx_m6$wQ!G+5D+r^ z@BaYAO*bQ3h$=XU4=9WWr48ca$RuXu-D=~IB^%!0hhOeX8{;l`T>IS4c=BI=zxPL^ zI*#xA@Bd%N+|qvhU%&q!gq7DNZW6V$AHV;9ALk9#)VtNtd)=MY$2Qa9|NZXQG~eMT z|JxsPJ3sk@KjBt>@{Qm6yWjcGn(y%U|MoxHtcSn*^FJ-~9niw&TXqXS`QmR(YvFgl zl(q1`{-5W!0MHsl^^>#4@`Q{7gf=FZeY^oO5iVbr-)7kFtjJ?-`;Z}NlQWmVya5z7 ztgcNLu3p?iF>IWil@01%pVa_0v$Q1NEo3&g+69D&M!=~mBCe|uQx7gJvU|2Em9%bL zqn8Q20VaP&)W*QrHkflj8KQlVeXW=bHsaDt!jq$1nm{G_7`txkcpIFutruc_<#JA_ zeYT8k=VrN0O+?nED+{7_yLbh!i&w_2h~BZwXtP=FoscDlAaz%9Xuc4F3vt*F2Y=&)dQ3DpxsM@%GAKg^W=q+LV;jyiM{xHP@T- zYR`YYx%Qm*ociAnM+f9qksJekVS<5m2-G}hqm}1=ZFd6DGv?7xBFg`qs(jwWrSr*D zmzkxaPVs)wit5>ViH!xh`OWc^J_=A0?T4On3x(tn4?T0ThLi{?dbnqX zrNfX6&eEfpj4iWMbkYvfNc-k&@r&}iDKEKUZ%aCUX?TPs0s~Vgk0n_d47OZG zhx)`eDSqK`eQ3C43dT6@c^)*PmWFN~37%z{uVPv$3WWq+XYadg%n}XI_b3&EiRFJw z^)QH=1By>UzVeenv`hv^mxlGQ$$KQXi4})%m8DepAXSXoODZYqy%?@!YrB8P){|hyN_SfZAl;|7O#6Nes}Nz?!w%&&90$}h zhVPj_l0fWSt>*8Ac@WqlabDNtj#_Ho8_ z!oeIDc0RvxkK|D`oR#4s_EsR599egEP4STF;e;c68P4{|eE0>Dn?E||V!dcneS?{=b%#da2psK-Gn?>bKVwTxZ5B% zB;c=k#Mtyy_qeUkmbzm6NPLjw%W}@D7&D{yKL)qL7xX7Q9W`>=(o=t4U6ijB%nf>7 z2L`MLc)=ZYsZL!tW(PNk8dJn46S$uq*sR0ZU<0-7jAb}qA)a5Y9 zAoX!rkG96!Rm*^GP+G*xB#U6YwxV*iY zPHyg^SRY+FgtdgwmZU34p0^uWICk<|t50zg__8{|oyrs3Def1{mwRzaD1v*nGVjMS zX(=F1dOMfV!2uW(&zVY$hKhJ|zqqmfn1VqA2E==p{J{Ym0%3WV8NvY`0Tq`x!T}s- zhva%&A^;VpW$GEtSAAhQ$%mWBatq>DU%;9t+YN&tN-w?v9P2Hx#ZS9oVaaB^dVY2% z`?*yAymYXm>;!MMc~>Y;2i>4kaiqJtd)>3rCH#V%eO+iGdNL7hOhm6Z5$%gkMEhcw zyTSoTe_k-G_x!H0l3lfudwMi`g@w#~rA!Quhzz|Ax0FW(4o}cSQvP=2A1VG~fgRVn zan+y3#%tZU?pN^=TQ_dFz4_fRz5HoDV(UiP$KOrz@pt3AI21X<(A!vBeY&=}b8mg; z@%rY@lRFz5JDYDl*w|Try7Tt>vz@mdJbbuwe|K%?{)4A$_dLbHy>S6naCSz@s8UpN z!A2g~LK8p+SXJ}=eh4l?Faq>$*dI1W6HZ?!q!WZixLN<+of#%Goa+Uo>*_Upxl>i^sr!@fi5e zf7N5)O^3(8{M?`14M&i0s0)6V6bbyhlil53WTf&tKHN(t`(3CLZ4wrn!Eg-`+ZxVCpbq{Oj`A{&8#&}Ba zjM?d*N4^*tHB`f;cCNl!J2I8h)RQE}d70MO>r)yldr8(ZZ0+%x#n$q@lk~N`e_En_ zzH1AdPs~kHY|{1|)g!-)ZiGvmluJBO@^+cW@i4zwF+GI1vf?E`EXUE|%CRd-t&$T; z6_%o;w}C8sEw3E{{lL_m*-9L_Z}~?4=u+z-u|-H!9*4(~U~}q~nSeoFoLGXH_eQns zijP`X{qV>G;u!$ymdCCtp;nWQf0H48M$o~2k9DY%yAY9FfBiup(rUc#M+1^UL=Pb| zp0JTI89o8`E*-8x+p+ef4Yjboy13t zqVr^2M(l_*+y*fnVmXUpaVdb(8Tr6BV)BBOZM=~`JzgOQMQJt)z0T(#3kMiC$)ozc z^+&`9me>cRo224$)V-w+j_$}owRqWG!E(_RZd zNzzwb5O(&Q;Nm?YYPvP@FlneQ8NaX2176h=aaVfWd3&stP(o*yQ(9Gk0zCi$;5=4| zz%0#J|Ad!#0t{kuyO*rS0UdwghH?Pi*7X~?`*`1gx2;=C1jDbr(uJXM4|Qd1MEeXm zr(GJ?U#UTR-$<)g+SImhyi(hQBh7p_-h8E|fO%bDN^iYdTiLOkxy4%xuhb$ViL=h+ zt;JVrOJSZfx3)AhQ_I$)1Arv;+LK~hYjKIr*{$;w8`T}4Ks}USS|^uC#{rT>V>3nc z#qtzs(n`Vnz3>W43iDe<6?GDwaJDRhq-lRHlOaXWwCouo#`dcao9ZesqJb(`%4 z+CO`Htn;GN_DA9Fu9qLk0VZW#qw5^RL+NGase8TTXq*)GV9zd@909A%moI@T0MH$C zqaGD{jg&&Kkz)6n5GKNDTMK7C4(gpT4kCnW5r<&C~VY@xS1&AHDd6YcCZ5rJJXM)16KsS8S@FyiD`l*Mp7?n~|QJs>vfGbS%BT*nK_gi#Q zF9B}I+0o>xu`s&rJy2+1XMl)&)bJm1Xf=Oe32V!<^dwA;BhQ=VyvYGL8(|VxTmgYp z78SYgoTWIDNm3K2XX@vF&OKM1qT_p3Yzu?c6@Lj5-=fJJK;UJLMWU7M8~byuDdEj{ z4fS5tdMvUNL;su|7~{fXmRVQsJI1o<4h{F&CIT1Q(7Ni@UPQn^dH7l6FVaet;t<33 zcEk384eqfl4ZklrHjW45ZZwYD=1ekb-|+VfS$JUj<6*FM%U`_eFWvC3E^Yg}!P3$# z|9?0b5*hytV_L^4_ezxlXi3x+sNeE5+W9-UHE9Ho=;9>J2lbA#{36gVO*5AOiq%59 zbd(AWVsE{`zY-Tw1%V+fMISY1lv9)jAo{zUe^QI|ll|7`sBS zgq7cEdCA~zUcmF);SfVBeOQ%bcK&w{LQLD14<|crb!qRSk!~UU)#N&Q~9jijaKKF@Gs^ zu4+*7`NE^pwZ7c2&V1abivUAFyubQ#+6+!W76Ucsu)%B42*bFb^-O6+`9~hEiTo9* z6hFTdwk;xHQ;2{PU~VlgLQ`=H$VCPgxK%^k)*=N1bpzbiBB?7)2m7rhKpRjR*Ds{j zlB>v2h#A0~JLCF71DxY$!=dIJ<4Zc(6;*$)`l60wcoGicKJS(XY({|x34jE=W;Ypu zW567rihZKQl@uL-oEsBJb(FED6-~q@TAeuPHt5 zsY>V<*^l(|6Q1_NNWX7%F|Y&u_Bg_l8eh>K#7}tHAH|)gQj2;d=$5~2fI2o`8D4*= z_f_td{brPw1hWE_qU+cLhv2O!-tY1oF?7J4>kswIo7pGq$aXwF=11M}WP}4QQv#OH z255GAJc@DgapHRqh#umnBBHVxb;MEY^SaFxtcI znLih5qNGASlvJ$cDev%0$xzpW$3iVgDb#_KyaqarE%22Fc}w*2 zInjeFpI6SQj-7p6>C64FANOeUpZUpTOy654>LKfvde53u?^%~9R^v&WK7%l_hpY0j zn4pEw3CFF4!{5=2xHV!a6NZ19wi5GROBFM2=CISvE2|qDy4Dg4u7WO!gL=-#BVOBx zF?r!RH+-{(HZTy9s`8Kt9g*+NE8w^8N7(8qe}PK!1fPmwyt~K4ZZyEXYZkYodG{ey z=lbbZTPNlA01w}}R`zexQ;I-5AelH0zOQiOcWBh+ww>_g^3c3TG z_z=f8ygVQ*npil?Y)MO`kT&PyI-0s4!~zLCPLqDg&E3`7AdkY) z!DM(p5kO$$MVcGnd3N};i0m0kVs&tAgmw-jTAXIEdGqt4ma;Y4R-Bmxy&B8~J(QV) z7~98lTpv*^IzL3pvSEM0B^I;T+R>Po+1*nu&cX&%bC?-pNW3?Wo>=H`qB@*%hm%5w zd*~86w3TcF0~957Z;xjX{2L4)Uuk+jJ*_7Jct>d?Y@(}q8-6bjAlqw%s4nQ4{Hpfl z%cJI$6N&<23Q;fz2)DZ1v@l#ZSBtHJ|BU0@6*Sd6qODu3pyhu&dacFR8TE9Xt=1yx ze4USa`qR!XGC-MZ+VKRR+-#oUoM?qSTNA&QCW>_hB>vXVXZK>?Jw2E zEszpg1g@H?vJf|+EJufnoJ1sm?gIYI;|BVh;h*Dpww4xNciZzUEnO$ra_fSIB3i#< z!(b0TCE|Y?(AAe5xo;J=YVzcx=O0aH5RWW}E1@YjB130_q$CH_&$a@X=5LB5o}Emb zo`OY696WjUqoHd2`1)!n{f8)@&5QoUUpJBit7P z5UaG@ZQ!Y#^h@-SOoc3g7y+RN!Pu{_W1}@groewVdmY>+JzKF+riWd!j$ORY5;SLK ze_i(A1O920WIb8{A_{(d{XN)Q<>KV+2ugaF2wec470U`i%JeRvOb;UX4V?rwXu64e z1bSWU*5&jxGd7M~0vcw6Nf!<0Af~sDPPXZg^*%|KMc=QEAptvV(Uy%VB60_c9KOVd}*~P_vR4GZ@nT29Kn67xTW_(sKkc>47k~1wddnAA9 zyfYZOY=SF&AQa}Ne8UWI?oEnDPGz2`G6E|zhlXUfqQ7Kv7)1t>6$xlOUg8;<`|1o^ z9DPokk&Um)=bO{dPc1(ha-t%0U$gUz=aZQF7DVyyfY4svu|#Qif+uY9Kn3V%U2=*E zPfwl6Z`@Rx29L`XKcUCW4s=>K*;WcP10|)4v~mqC&4c06zwF3 z6$J=+VHJ!_mAcKnI0Fhv_clKapbBTM-ZQuW)#>gE-bv9#HQ$1j!^hu zOrF?$QVk-{Z5#0};l!<|xfhSp@oG2jbu9c*TAP3YlHx+9$rSOh`chEKqP)dcR~T8_ zS^!mtrb%By-`pkbESE1lb*X<)*=3f$1zgtv+`gvRy>O?Y+H+0v;d{sG+Ulr8X7}K|Yw~3s*W5WwTPT1FLosfTk~G;HKO3asUi2^l?U$Qo zE8Ugm64p3!*^Ieu*`gT@*=fS)h6X#Mw%*}X2!be9Ycgd zTFW#`RUQwW>z$w*RZUC0RAU8W1XkRzV z-=)%#N)`IUI!q59Z>&At+1Urk@mh2sQ^uPx1wNhjv>EO}U`GAKog%x8OFmlv z+}h6C=O1irK6v~YkJa{4)*Im+HMQu*THfN&Y|+ZKx%TH=Mg+uW20>vT zBAL7epqm#`;AOui7JUGw6ft`M7;x?xM^+o9VY8G5CQGSLTb!9mL{SOHSE1w0?zrDu z0UY$@QB>pT195*=h!&zR^lXA52KjW3a`4ksdtQN6=`2yZ7Kl}9xqB=5AT-|&w+oda zb5LN2W;Nw2fXY*EgK-OFt+Z8wB3WM)5mNP^Q%OW`TwVFtlsI-d8T@;3~zI{r}k2oNM~`SrE}>OdG_=Hk)fqTR5+2tu~L@}*a1F&OFvD(wltez z6(1H)dB{FGI%*zWZ6>4rD?pBKU3o!YJs;{o-O5}yuROwM{)1lm>EXUB2?|{&3XN%=XZqq?gA~e;0IvtV5_qY5PK4rYS{rsJ6wmZGKAQj zs8i9asx8?#W4CRz0A|TKPBHr-DeiWl_I!GZ^}4n|>*e>#%PD)hAM~(f%X>|0g@XQB zm+RR9B7Yu`UJ~wltvmC-yc5p9_s%<$g@x6HdH%h3U4CxL>wS5>FRx4Y@6*rK8(`e_dUW*ZXVqdUau8kzViJ;Ij8`$=Cb$R{8bb zeR;iq{~iExaPr{Z&YjK8rw{Hv+r*B!^JtBt)qjlHz7uB^YSd5H*EgqR86^preD?R9 zjm&4u|}JQsIw@Svrq3sJL z%OX&yA`xQP(@5NdB1E}-`I1gH!3rcr>ErM*&@%PW1p^^5xD5ysRYM@uzL+5eNW?oRJQSc=NA&|9Z=ti<_0FYR=nsWl*19 z`vq#J7w~n?S9ekS>%l#juhh6%0tRzl;LWkp8>wXFo4Qbi(3h69#!(rObAF*GPXRt0 zzPjV41MJLw8lt05mwIAX5jlF|sLS`fa%Zyp+@%&5PeDX*2+Yqo0b;a9BtJ6-!hiaJ z_;fl7gpTlG-&~p9U-3{tD{ktZW(oDmNam+CQj3P!&StX&mZ;0>6jGqGC@UkDrNx=4 z2ARgGCQt$)AhRUKD@K*jRWmjEoYS21NvBQpxG>S>tUjki3`_AT&B@MBF6>?ycCH z_VGr&2k8zZrC_d)%KKq-?tT~)YOGUj#J4FWq6wfcT5Hj@SH|{4O{fk%MaGU234poM z?hQjrO%!%U+f!eKi*B}A?CV(i%JKNjMXK7Bt~!flU;4yP*@)Rj9ym546n{g|gsAoA zs-lC^wo>}718Z+BmmtFm`Lu#0v&FwSXIx`>TVg#lX+T_7iMSyPh73J5K!q8EMG_NH(l z&Xr-O*|{XhWcu_jI1C1HH66pgKGS~N@}2_3C*;r2 zkb6V>0U80rUSy|jhC@4H4Sc)N!zer~WE6FYLWQhLVW$~(zvhQ+7k{7a0%jl%%^G!j zs?cVIYiDwKw&T<~GD&bk5tt$#Z420ht+zs&DUY)6o}Kf~rolGE-7rvZhnBznZa=8<9S3>st*Gp1Rm0F2~PAf~kl@|yBEE7=;>Y#44 zIw9+r(tyGCW7J}@(rblI{g?^KT_jVdG85QTec%DPPH)o8cYl;W5nGYIQt0I`J=sf0 z<8cNm!U|=oAOuv#|a+PLQaK!Or|HAa{P#ViRH-D}8rW5Za6EK+Uj7C~9d(j_|k>bqy2pCp5#hI1d8QJeyHpRNBUm7&E zPdl(|Sb*j5KV%Y)nq|vhcSOXN*i}o~aLQ`H*kO2ZM2f zbR}X{mb!Pc&!ptonSu&|%L-7!T>66b3W3rT`i7q$Ccj zGcU;uET~=HfJ=7<;NW19knRMyT)0;%ze1@U+9?j#u1#+adbGqZB{1{g-Wlnqw{lPPVb7$!cjtfI`eUW9`f)_|H}F}X4Xx)^q5q%y<4w)$dN^AQm6oj zk*s$>`hT3B@(*}TjRrIqKmiN&k~E7~F67jc9+OMUA!Ik$vYjV+kIE?-Q3=rI?6*cu zseMs&Bo&Aq&r)ina0m}Is=Tn(WUEYOqeopyGH6I|#fZ?uC0Mjwo`a5o$rxI!Jebg*1N9ds6x z-X)lh3!mNc7eP8`bw&gV5FJ_wtgzq!==j7#)J7OXpcp}+ z3RteT`jz0jgE!_OFi5Zz*U68&4*`hUWq%Zpl7mYa+edQV;GAYgh2xT3c9R;ng;kq0J<+qs!$N*;W~+Ld($0i`N&kTNj5v}j*LZnpy9?`qS2 zx@CH<{obR^90VcI4ti95Ug8tL-+!PJ4GCo94BBkmOQN&5cQTn^Dsqn%Q~_NRlSuh5O4k$rT4NQ<1Mcsg{R^0Y{vy_Rvt>Pr_^jZ_;B5?bwR` z4qM=wD{S631q*2fbe#fYb^8+}hF+aI4Vi_sii%zh!0gR4Zj7A>jI_bJ*M9=*Du=#2 z3zW++uFxivmD1kJTxp9Ji$RwA#MOjgZqc`yOxoStuVX;%`d=|92fvFsV9n@G3DMFUa9o@6E1GO%=^4=9IB1$1@C(l-&uu0t69#fS;TcBZ5l{#{k8lW@1Qd2Y(r9W{rk5zZJS? z&~KIV;8)Mx*s|JwnK>#OYJoor5t&!scjFcJUWeq@AW6q7q-!H7*~rQpc*>xvC&KVA z&@t74Ty=>*A%CcCc$`R4zltBUUyUufm0}cE#Nszv_jVW1Mxi0}ZF2-(=O_((R;D2` zfptXumJ|RpPP;AePk&N^b@UASGG*XJFF?vQ6KO;$xM~7g6TgbN)JiKq(Qdzkj)6RE zlLBU*0h*;83(ID7yVP>Jv^z>1aZ<@~?3&67O52Mn!2YCN0N$5dqhr|2bBN%M88J|= zO=(H`$>6;571{I3p0G?|TKBmUI~#X?EK8mF%qZ&^=<>y!8Glzvf5_S7B`$;?Ix5QZ z8`(@fzI_M%T}4V?6pNT51Yf*}#ga8ihxA@ReyfmAqKzFyt6Xr*>mlA1_YI{y>S#IV%D z0Kr>Mpf9{k(P}al40M4qS6L<*Zgku5xRv+ZNG$i4Zeg~0F7c6-#}yr1lN(U}$mmgg zxU}+wt$(CWatReo!mN+b_)_zk-=oqO#(8*R=#KfZWR3B_s{PB#p8Ji(mBsmSOPDvA z*Prs7hQcQ!t7z9AAw0C;yNrlhOCP7gk6FbYX@4!=f*zB-*|7cD&&1+vA=Dg-@VLp9 z7!gIwrcIb@^Lxpn3H!SE-7-f4d$IW4ZMVc4vv$TRBPHUpmaRKPrQTp;lG#FY7lMGg zrEy;;o0e0;vl{bT-rQ)aa=jUH4zMa3j#~@9JWvn^a(^xFY5Ljdn4cLh!~?m5xsP+V z0e`KuXaI79Q$V*206~Ehv^hJZ_V}CfpW{KBvQ5SbkwL_fqGY^2>4nGmqFngUQ`GA{ z!QLWc<^_J+AV1skhJI~uzwp$fV?x!a0CcVJ6s2RXncZDJxTl|(oy$(vQxH1%VV~uc zz}ql?TI<9dUQVaH7(a>z6ZJ;1&ZvXxk$)~N{*sJ3G)OXVP1i>;E&{x9gd_fmHe+sG zYcj<21d0p4@rcru$^#{UnMB&qEocUf!u@^K6-+2G_VI+H-d8_&^lH${nw3MD`N_-U z1X`#uM@)!0L0ypeI>NNv6<6B}em8;^HpH*=#D1Rfz~KZ@tcwJCr`W~v^AO5=^nW<+ z_rQwgr}1#@3zPT|&oQQmey9tq??R^C{5+2KN8~ac&(zXEbPOCa?5k%rgahnr{BT4# z{^h26GTpr-8KOtnZg}a3gLn@|fgeY7G3&0&t2m;jw-@sFp>jOw_oGfs>%+g|l%HPI zy!Ckr@i)&;;RmsAd6PjUT5UJ7+JDB^K|*vN{Tg$P(?xSfF=+b}S~VaSKsBglBRrwJ z9fR0r7uqpNK*o{`RSwz<^puc?Lp-swHQikbUr0V?Q3xv%fsHbH0(i`a4`unUgfrwE zj2!YKz%qR#Kl)$+st^E)pN50ZZbCDaw$XY0OGQ#_?jF13L1Gm4$y+xitAF5#JQry< zltSb(Jmnu+SBkzzuS1;VRXVAZHfqaX=<3OX+D~|r^Uaqf^=TZ@P}xH={Z9H=SsEaY zsrdh=N425H_>9{Mqp?+nT*wuRYha025&1Y!d^^` zXdQN*)ijxmc)>-Vgqld&;eW0IY0zr|6d_N-Iw8T@w8!dggGh7+MtpDpu=)gw)#COI1zyVwAV9_s9+tc_?JD&bytz7h5H+;=di}~)(AvJT?>l%?V+khVa?gq; z7N}}8f$FIh-2_z+gnx@AC0h%SU!qNZUfiZh&%&-Ou?dV3g{5KisU9qx21|{p-4boT zlPCp-K!Ls|1N9gdgIw}NUMyavc0Hpoh==juKpTJYewaj(l-9kQH@xB;Q5AmO$}R#@ zde!~_8&dkFSvoG4Rz0XJf6H@ma&rC*aYu3TAd(<5MH}hW7=Pdb!-xEj#O$M*TyZt% zz&*zfo%5bIJtZskJf7=x3QOEnk)%D$+6EgDkifCllO!-XPX{x-vWHv=D_ydtB-fb7 zNM=0S6n&ux(It+6l^()j&e{+&#?|^qOh1t>h|OZk_U6#mdUP!bOA*( z3>@$&XD?ogSbs~fyCr}JkNG0ev%Zb#S)+6+>LE~c<&^#HWKzQv9mbI5L2CP)8+=Yl z!`e6@=j=exYI||i>(rp_+r`CH3kS95x}oPa^10uOM$OtL$TH;V_4Lw)cnCZ56wp{| zXx1L=@!Cs$DQd&dZd4|~WD)KZujG6)zt zG$w?3GbEWLcnx6x@u`Gr32{(*V8@u@19+|}B5&AKF`B9JJ$4+im8G#Yd_rPiXzu~m zh|diN)PFX><_Z*9Swx+s$dkHwCy;rOwM1$27KRBj}}S%V?~!R}~egEL?@&0k|vmqbMZ_YX*H)Od1P==o>R@)7tfC?k$>HI#FP@nCcT%5+oWC7WvWNk$6+$e zgTszxzFCVR4+;z5Ln3P8ZxwX&RgJ3IL3Ojl+^cSOAkB)WO9-uvhNU6$d*rq$*KLog z+ZKjbRof$J8qI(cl_kh@!)jbHM2M|x|fQ7Ny2PK9h@7TaK zDt{K;4t~P+pi88LY=&SU&bF(M(CHZBje=T{Yi_%v5(b3y9HCL|Tz$j4fmt+wI^-ZX zgd(3HZ6xTHpyHRm1d9tKW>Quf0RzQX#s4n!ugWKGPgrC&k1XA0>sf7_3?F z-wLS-m^_nFAu%<npCo1rr1JYQtt7o4Jr z`Z%P4;;+1dXXF9b;1|QBuH|)hdw=;T?tzbsB>c@@c{G%whari?^;5}gAgMpR0D&Uu zc*>GR(}UBMxu*I+2DFk67D`@?njcEfC*~gUosdS@A-zsiJXEzh9rbRk(pn$vO!BlJ z$%7;g+N0wk@d3R^KdKKMN$ltZ!ZwjWKb*k6_KCa1F88&^{gyJ5^nd>6a(~bJEe|YW z;*fJb9bT7H!KEW+m3GX}X%iXKLv}90vOG^5jS!p9_=LkAc8t$`^`2!>Ge=+ZnadPN zTVm9j^(#|KRUe3vm48^Lv2i*`6(gC~Ow#qDDP38WtVYAZs$1TWV^&K7K2idHB!Q1( zb{6TC*tVQP$Q>t+l6{%Gp?`YfSS>vkJ~EblgZaNLPx!!+6h(x$dnx~BN!%Ev z>Bb825$K~zFzW}ul!H2?@*s&5FpcS~r1HRtnalbX+smo|4fFw07Ja(GagU5+ZDhikK{oTyAciLhk3idQlpTj*KOrRc|uEy@{g(fkUspkGtMXK)cOyHKf`|K6lmz zA_+5Vb>+W&*_GPNYkyFhfu;H~rbPXcs|IkBofT&_VFrPkaxxILDu3$Gyn+rHFl;jU zJI8Y8JX651NZ?a|i*Tz)2CJUl3dDNttxW1_M>JNPqd+HycO`m?3Wt=H_f<)XgMexn zU4Lm-{z6?Wm39_=>%rrD z>u>G6dFS!HhilULEEZHx%nfv$k={xjV^J3%4W)j8vFK1WsyMdX1q!P`ID*WPGiluq z!imBEnSD~MZjjfOX&ot*R{h|@d@Z6ce%MrBi1WlR+z8o3wf0$80Cyn7r@MPLC=asGxA(3u-+j>0SR}2 zP3RQ*EPrSAhpapt4GzUc5ILjB`lu@@>cfYI(7Ehp2*O4!)cgVj(b6U$TH=v?lvIWu;}aoh~5~Vm;uQvIV3x( zJuprhZjhPowCfe?Q`NGYAF=iH|Akkh1xhIMQJ?)Q3Im(()dqL$wJDNPBVfQ{R?&) zP+fmkbd)Hc=rhk0vLJF9=g>}rLaF5Eq)gIilzT(WO zj_ATVWKn2FNP6PTqk|t6914!kjjdEvAgJs-DoZ)8BBDHWUfSbO!K#`^6rhl_Fs2Vuak>A|~37hI#wovZp@*=zpV|wXg zagLle#UKieh|Zt|&G^o7YM-r=I>#(kJORd3tmb^@3=VF0&#h6R*wuCuwxds%F2<_d zGJt)2+jpugA61;7%mFGfQJ`VRQGx2`dKKqyv};&wN%#I<6~4h1Cbm~gks-`(et!vV zMAAuywps`xmJCqNMMV7FDkGJX2mK+Ij#b&AX!j(0Ui3M3EU80kx0_+FwFIQouy|;S z#z8qCJR3FgP0?_>dxB<<*c`BzC(*=LY-xEBq-2y!HP0B#90!a33#b!lzhKrWSE0+_e`4e^)`zg;mb$W}0DW8Go3W*2U#4W?{ut;;n~JaUDGv>?P($8N*$&ym`#p zedb5vm0%5YH_Kmm{@Hnvu{wiU-P|0YWnb@V@5jA?CA2UGwwVyMYDF_f*Q*+!9~z>b`WY{B@Vxxb{Erf|9_4la4Rj~ zxO(+?mjTODrY$a?WaQgY2ByHjv|djMS~!dGmIq9rQz7djG1lqKhlK4N>T-Htn|LQM zPJgelysuU04z(uVp*nvnG3r=x?djcSexlvq>Px2ZyXn1FGs!>7U}aSI}ew+RILo z78kC0{*cWA!Gb4>@bq-Z;eWos2Qs10VIXpN4Ak8T2dF_QneAYLC%wQOJcA5{!U!G| zhzRzIr}ohA634WD$R7mFe}UObIU06GIKBYIpb~=@5+dE#7gFwI@5Sk>iXz6HgI*e+ISW6P!_8w`)j)C;gM_X$D|PJ%dz!B~*?${2mZVko04#+# z?13Lb=WX2O9L(G%rh1!C7MVx2stOr-cxluS@5LSdOq#=(5uON6z*FbA-e@ZCZFNT( z|FGe&p81ab?{GY4S$CC7(3rq%<2&C_yErFjYnp0^^FU{g9#%xdLrS&u!{L=Ohj)SH-Y(Z?mHnfX7jj7)R_^C216niF2nA5Ubdz6wTPK zK#qb6 z5Y%1C^=Y#kpF5!v)F1^(l1&?qV8#d|)>mN8nzq@=ClB06Wq)7E=E($q$s0=rijZjY zN@Ktdf}L!)!LS-O*B(9Dd^<f_Et@W(wX9Eh!SCMzQ3GvwKQhavZY}dw-!f>ZCgjXNgi&_joT^=37mK{yQEk7gSs$s0MMwAtkq zft*}3uZ{Ng7G6GQt1HPte&|^#KV)H^x>DsxJ=lAUUZp8nIGWo)iESLMtn8Kf{>*uH zWu|#D`+u!NZwD2?0ZjRdv%lgTS600}ThkIvUPj)nX?%f95L1czR$?GRv&FKRuU?2O zksBUtH_#F`_<~e(1)NI_Oj`BSP4?nuMrp`Tm~tksn2e)LRCuIxc`U-LI_L6xmoFDE zqo=aYB%Q!{obs_gp~wr=OlJy`M44Dbx?Hu$kbk`Z*J6HIHWO<3yFtYlRNKjjq5=UM zm~=KfqP|3g)P%w_?rXFTVj}`e(-=eDmHI4q5}&JL_Xf-+AeT5H1a<5y`1DaOrx!2dpWJge(sn*i^1iVjwg_mndM33|v4)QG4hgNq%@g5cagry23O817TQs%QCyvyUpsh}1iYM8MJv?cc z9+$m**_o_pTYoC2Rc{{(vM$?;{C_;l_8M?=@_l5ThNnfGuTG=)F@$hBJHa({ zL227Q&l`qF8@ZyHDVw>By^;w`)ty;QaQ~M62cCW&wq=_ zrrnvl>d~4>m5Xb#kk&^fOt*k0XIu}du0E~iR#B*u14rxj!GgFMs3#NcfmF7GdE>+ z@2k3+A*}^AZV{n!Y-zEhCOW7RL`fhrL-PK@uq<^7j-ll+HI_z6CX5d^&wq`USr7?B z=jG}&U6@M6fEkovoYLgh(&DXIEMqNUGSp%gDy?SA+I(({S%0bw9yxBZR>RWlIwe(M z3oXqXF`h=eBa{ZqB+& zPJJ`jlxrXesN9(BjxiK+qJNlOeU*BFWPM751H577yWqs=K&$Obl`Yb4p@$NW^Nui0 zTwnj}&JGlE%SiR~B5HOnU!Eyj{lxZJeScCN-4NCh(Bz~5E-g-j zSJpXcEna60V(XY7ks+RWN}y8ArKcYfXcaTyn{q|~_^wS+>sz{dA(biH-%Rl?-C;*b zd3=x@d9Yp63^La=?0=90W3Ey3-r7-^D#sjAr?z`c-f0HnohElrW4mjHRs;6NFK@9k z-TiG9h#N;oSd6GlYXXc-O~4KEx{Iz-^kA|YAXX5CL*iQes)4Ocb)~~W@tox>Nrcz( zR79OAeR7P0dwCt`mA+n#u*TKZyvc0Ws_&<#ROcdTM(O6*$A21NN|7I&eW4Odo=>}> z;J8}Lf{BSg=b7Em(%LmY3Hp2L^(Lc6G$>ns^)b$zDlG=4WX_8|< z5pRnugG2y^|9@yJ_xkkQZ9Dh9>A5G!{Vo}lK)S`M9;O3nt0F75qim6@3acLnpCb{d zia|P-kEAFnCr8C3joGK94)m#zEaW(nZZWo+O;#FgZMZFh$n4hh+2j_aOk;a_7ueFl zGS^D(fD+Y0IO)X6)CO|)6)Spwq45P*%$>>#M1kGW%YT9Y1?YsMZw<3=;ur8`M$9NR zhO8~4?J>vw{ZFJ)|0U*|Sa2`X_*3$+g-Y4i*0jcPclF7z-4kbA<-xOwuPnFGGBr+T z1lnKVl7D`l2wW>j++M*Yk&f!;&3lbEf`$C@iqpJM-@Joay=F*!o~evRoKDm-PAG=O zXqCM2>jFfXrbF;^o;`iw6fCO?$P(y|qQe;1$p+mCl^@7gLQw&fpvw8Gq7E5w2e@AT zHdU9@+y!R(6ury6UbvqI3#^B|KSdAw(4~jHD}M#+G>{gSg#A^J#u-r-YF$o^&eFD^k19iBxS=O>fch~Bo@?*baSujYb*8^u7twgOlZeRj8&`=f^cFgR%1F@pWi1)DCa%YPPZC^);B z_-_SkRYB_fyTOTg|0IWt;=h#~F8Xf<-ha*x`Iq(l_sI2~GSlLtS%J06M=~EJrxmNV z&+fNmAVLfJZwHHu{ukUXcV5e>OOwIVJa&TBbA@@V%_nA{Z)9`;Oxbm;J!uj{^ z%>VMX`fcsJ(|l+CozC`azi`F>Jo%jZMf@q?x&AK%i_3kJO&xe8K<)YcCfhp)C(~^T zKtD!h2;{C2h~KQmwz!Yh^H7AWORtea1{Na2m%9fEt4gTO!E^hTY*-w z(D=4NZ#eJ^UO$OhE->dDjqZ+8v@hefPecT0;+PPL1F?&PCt8pxx*hVVab8msY3e0< zMDFT|F?FxHOZS{zvgja%rvLx!z3X-xN0Ki3f3G#~0M_)-z_17bBy|G_bAQXabZfU| zX^XVo9-5!)ADONYFv3vl+aCd5Fn7sqKyT(UaUlVtU&bIzN{J*= z8H(=pQb_o~7J1psuJ8p-@qZYEsNo9rhGe%RMLeCW#K`ZdX9NfMhSHcdb3_Rd*a^nb zeCR}}Tqqp*c<&1$4WANIFK*%(c`0Tjlo@ByXAj5J0Ecfw>GNt4wwElaBvY=wwVZ_< zA8YFrO2ioqk}IagD+PMpOWdRsxzGy^gPp6L;M>DT@*9K~y-NiiWqpB04S)A6kLh*K{sy;}$w_o6ID!|G!H1mRMz$BQL_a&}70G9C2PmP@ zo%XgqZ*Twc)XbivBpLYV90F_-!iS8>76tzLG*a4)A*(s8~39i)d zId8JT8~gZOwz;jyZS;?-fx~eTOY1@BtCylrofUcY)lRFOS$`7NcjY|tVj5^?sNO>g zpl_eej@&ajIseT~azvE+XHRNC>=IeDgjiF%z%3|VuuEv~n~`xGHjq=rPXRS}A1ZD< zSxD;Ls0~D#jaAHPGXRjdn>4nGWimE~m^XM0lOeIkym9pRa+Sf$N_(G*WfXi<31F+^ zNtowEt`$=fY=7+Z0tib|u-q+IA9U3|Nr|LN`ttG7L_;&}JxhOHDv0+k5@b}wzkOA= z=u)!7;oD6r0N?@8=GD>~d)(D;Q!ce+XT`iY(6sMPjbKGzde4sXXSw6bsBQHUL38BM zY9N!NS?`B>q9NSWy9!I{7(Ky>LSCnve@zo|*@3pJj(`8NwOfLa_>~=@lV({odoi!K z8b=hgGwT48c4DQ|G{3i_Hp;Krp6 z$jXaK>VJ($y}N(a)dHEkTA7JHs4A}(sW&36IBzTO45>E)dz$JXbqh$B(NYN@w{a6F$|N05Ub#V-LsW9ls?Ja@k$*LjvPM?SIHJoFjyznlZtokX(HS;> zP2&2c8**Xroc2dlwe9Wi)q&sW*r#n=aoT=TtXCdDoLl)B`;!`CWK_TA^(bA7LhkOa zas4PA%A|c?%+C~-XP1wFqKrmN&H%h+_32SX7pSu*=EiELqJCOwdzlEtzl9jbn1(JFCOTAW2;{tX~1VuCtrAZ2AHfy4bKqht~ zP9O?X*UGdvG6#&0J{%nx@{my3oxU}F%!e+~)~J|9xZ5q6L*xQR=eO=;;<>Q^1VFY3 zHHb$}QKk|LE~8U9{Sc460wl|g{kfuDb$>PGDx7O1So>oo>0wBO*dh_~XJrj*T}mRZ z#@19uDZ&Ln$tB2~`Kqr+ii(L8l-E=Z>#~BrAw@FzMz5?CC`y%B2W5KTWCO*5bQJmY z@x$$BD-Db7?X7`AL`xz|utoHw0uLoek&slCDR&I1njMjLMCPPb_jx1(BSmctPJaSZ zx4yC(v0TGlO`;Vl?7uq?*;YvQ;}rxtms^r=bO^kll_a@)?qxt+vx;PC^#p+~V+wp5wfbL-Mma}E zqSh4jmt^@X;PZvCzYnkKW6SNhl7DQ3Z{^qaSFQXi6{Pqb0a*HF_#N_B?Mm=FZ8GOt z6yPJ2VV^~}kA*PT+8`Ia+TXn2c&$%%-)XmVL~2=d59DiZgmMKgRtxTdhjol1D!Dy^ zb4+Y5wnuP|ezm3chG=C)LV3V#*)zFEj1G+L^M56ldzUIC zc;xP#y|%45;KBzG`RpI9iomGfRjx+m7JBR9BX`=i$_P1m=L|P-xoIJu#BHm_dMY+z zPIO!}5U*Sq%t6&WDwd%oVZJJuhSYm8?%+KiKE2xj zcG4&Y6;QF7+ekTeCl(9}EPv3`%d_63;M3Eft98OIVVt%46TTp{rGuq%0H@lY?iM66 zA`#dg`vd|FKsA1oMv=;i0Y$;+Ry1oBSX!K zCRZc~#7Cf$n-h%Jae^Iva!DD_z*WJG;5Gq28y9m@flVfh82vh^2Y>s(9`~`Y>$ctX zyp6Lkd?SrpN6#7O!gx0P-8lh7w>U^F+GsCeAsOyuz9Z%7*ocmMb`%>n=FSXfT{101 z#)45AlFh~USz|&fyy^@mXRhGRBA z*xsi81C-aEKe@Z*e1EzXI>w4=)KT5=e=w@Ro24lW3$# zk3R%Ej%yVlEY)_k|HN{$a@AX=H8UcTrWD%uD$FbhB*J8twSOgNCQ$U2K=I~psl8uc z`Q1;iK@~j69`BO}oeH-_q-G}$a}-IZ9lFBg&K&nPOI;wss+hYzyX7_~It25O=vea+ zQE4tNRwuUP+>+W35M3j=aW28wJ#Q2a%W9&4JM8JYs(wWbYUBfxCd;9iwvWjQi?9zu z?=A)BD)Romi+^q2BFtAqjg%P6!4q}uJk!n5MVaUL&vPU~U>UMuQ~+5(roX~9D4`RY z!P0+Rv$Q1(kJuj23_2lKNWp@j6C7^s?&4Ow6YTCnNWDacKsJq*Uy2j2^4!XcG7gpU z_3r-OzCWdAYbjlZmfa{S2-Iim5vaw1A^04^-Xx4K^^>Y!-;jTOabYFB+m#0Ey#nc| zLbXv0NmDNBYcf!W{(q?L`tm?f&+NC>->%EhzwPazPm;7Q2nC=e+A|MhJ!|Wp*RCWw32Wqq?wkPN_D%VCR1w zzyATu93n81iyLB-8acT zE{cE@mwm|CyPC(iWL&xBnA)lf?}WrnUTI0i#vjT~NnrR18GX^lRVvd*?o=#5l9d0g zKyV)7%wGNWf>vN8LV;*#)X?c|*PT98lKn3E71JPdJD{9IBp6hd>g`f#YL3}?si58# zB-U;aS#&I@;%+o+ss`7fFVv8Th(Yuvg=a5nmK}??-%m#=*qi*!N)q`aX-*VgcSmWT zIEsH9IL1O4YGFd2_BxIs>zJ7F3iac}UD;9z6=c$@Up^+tLKq*jjKv}7o4k{}6}cAs zxfrrel48yzbM%;kSk8klojYKpKVFklUNro$={0&o#_s-R9<P20?yJ(ZnN>1Fu2u zBa^ZbQd(1ikRiDh0;1r|wxPq0<~uzwI3RyeXN#5%x-sNl=89xM;&*71E9an*9?9>tH zJuGyoFV8M*?<-NR_!Mf>+Qa4ENg-N1TsY!(a9;%FZA8MWqT(30h>teB;|O;hB3>HL<4;_yuGf6F$gp{jcKPb>CB z2f|(tI5otT>TEN&;cCh)s^?W!WR$@G7$QuA9g38X{*pHs{Zg4q4)3JrjE`A*oQDnu zKrx)$-~Y@1u=c9{`ethi61U%Iriyw4%Bc`NIr$_D4{subFZM};Xj zr~Z; z$_+h*q0V`}jJi@&k*0kiOR`z4Kj!jUZsh&u*YV7M9d{ifSktGzdUmwPLaTk753T!X z@vzA%FO{R^=S|;xsaz~OZ3fK$uiA)IlT$|ahqo*5S?ZprcBgeNUDk@gURK((oo)o% z%y*Td`=m=XuW^^Ujg^xfXg)%?ev$ zl^0++ogBL!8yru|a#sF!mHU8VN~=#wxma;MPk*V)pF5iR{!ZfFrCTSs&2i|-70h+W zJg}2^;w(c{_GlbcWmULWb*j_p=cCgzvWVp}GY4|ieLcc^Ga`Bun`nOpPfN6s;+9V) z;b#Tbr%Wj0aa*=e#44e|N8SUmWzm%z^I7e-WF5RYSWF>GB%{*A3MSmwNvh@}D=yF= z5+(F{GWftAfdV|SAc0l=HCJho%|XLI=#-xRYY%ZdjiG2 z+ZF`EvVDVhvRbWK$pfAzMzzD>8qnttJfja#KxS)W_P6c7=yVWz#J! z-WX}&Vx{>S@Rlsd62X(~ zOm{fI>8Mpe6MZ(3#KkwmtLD9;{AjW>Thn}Q)&I7%HUzArv|??S9>kPT-Y8zhqXdGG zcp!h8ykJm-v(xq&ySAtV#W>6)Ye6vT$3P>6r1gx0(a}&mCqDwf#()C#=89j7C%brqHR_$ZTa9;`o%yy3z&4iyg*M)J zF!NVHi~8$eTQ&tAt)~$1o51}=QBK8m^YMRggWW9FfZhCNew>%DmMl5N{|k6-zYWOY zLanP6_Y&Y=+SEYBuCtkOUQ~t=C(y3943Y7502U5+h`caq`4JcsntCrX@+>>!xptto zfFMoYLz7)8(ulZ28e??WYv0{bI>MKa05fWx(HuaN0drJltJt0t$#!SBHdFyWr0ak1 z-K>(o7-|0EZ^C9&@$|zYgUyKF48=pW>yomgl4i5$M%d_4jwL975M1#%65jg}4aI~7 zmfBiEwaT_>=91d*x)V_msGO6;cGr^og6MqlwRv>^c;Wb_aP+{Ok97GWZ%ayn!i|`l zh}_ONC~(|yy0h*KTsK=LJOOIiI7NR&DzLe_beVP~$B@s6>cnI>`nE;tMUGlUIN9Bm z_-J=R@pR7H@sWyGQsi!mcOlq_e8?%AV!nlZ46M&lGKrS-&f}`yL4;BUQCc=M^HfF1 z|D?BIAb4GFq=Jw7N`8_nwx~Q@&JvBbG3i8_EkI(I7fzMdl@Pobgp{xvsDVg7021LO=jOGh)+LJbIzN# zQn+&RBp%%;+;}>oozG6Myz&DsE z>FlQNk+#zsC07{SL3%sT^Go@~viH23ayq^IAdy1o`Amv5cTM=w6U zeNk#$zKQzBG~Z53b0fdBDqmp5$)Dd{z4I-rKI4iHIJToh{g3D~B1j$F$-&YS$Uscci`3N zx>j?KJmp2>_@_VmI#;>VC@t^YrABGzV8cxLp6iM$^q#iyD7P}$42cur{L?p?69KA)Z+a}0$i6+DcAP9{d#38H~QgOjm zjEc=++*C%3-PB{Ah}*ZBS4rjzxEI+X$3wZF8&m;tEqzKg?>K3N z$pzBuDmjv*>zOt@z@`M0RAd4{gW7hrLV2Wao^&tw;-x?a+20Z4ZAE>s>L%SmdK>4N z%cXyvpd&P+F*1$&YjA1VJAJNu+Uh2U_DAYsp3wchXGNSQXWdXLC({3^b+NpO~ zY)7MDt0t~%e2OB&s?|Gl^g!Y8@2>;9P*lV`eJs;qHFFD0ClME$GzK6@r1k}vA>$aPzxvN=eIw+djIpM zKfU%D!Y(YRjIeNg=9%qN@Y%pJS~3& zD+PajB?TRQ=Qsi@isurk#E0VBhIVcKN|+I{6BEdl?Z;8pFBO|=W!{RPwRYxUOC=aW znKB~FD6{8N=hLoffeb-NzA*4L0XOeMr^vDZKJPQfhJdUSPQ}2;VZk3YpnAlIOeQ$& zZg9TLKs}K06PA|S`@FJ>XRkX@i%)+Z$lxz5I>3rRq*ZJTV12aL!5oEaEn2Yb_Ny2v z2WwhG8>N?e#*3l3tir^^!6w$w%yi3Gx4zwOlOtl*@C@ljO~<|0hyvfY$x4)$M_!9< z54@u_^ztiZscd3Q*&`KJU?sQ1HLXeeLKUyWNl7~hF$@(MsjV#K_yWLIRg8Z+IMW$r z37&A0IeCNcYv{~Q|Gq4*dI+EQ;K@cNLo91l)udQ4TnoZ&Wk=I0_bjw=ZKbRHXr%*3 zTbAzdr3%c5{Ky>iav$)WG$-UktFfJ#74FswaA+&a=?chly;0m7U@#XVRUujxWa??AU*e~-eN*CyZJkA{|MESQ_p069oCGrg; zsT-88eo!)V98&hh!qqVpHVjW_vxNGBHfMCap3^4M;O0vL3$p##XUa(5Wl3fM*^Ma) z=XP|SjIgIWYL&0G?T0%}FFamOZ&v7&!V3Fv*cU=!sr z@a>M{Nn0%mbs{5EvoS-I%78OKnKdY$I|FnG8r%W;S%1#ZWK8p_wxh`)P8{5KtVj@o z?GY6jnZsu^yn68k4>(BFbfN9`Rb#FjmUq3;Oc=&j5{GcS->ZKd9e zE6OHCJ7jGo+7(DI+ndQ2V?ZkggO}>%BrQ3k();$zTIG>;F@HpeK?Q@ZKl=62(YKF6 z@`05!%cbvp(+j@YneTiP{9*eW?990Te~i&8kNc~9V{m_LGW&AP4b{?d!A62GPB;SE zSZq{h(u(x)4|T^u2)@sqz8M!d2hB|KJx1>>#@;SL`dZ!D;iNkgwf9)NxSBNxfS$i; zU=(0mdTuLL3?-Atquq9A;=ho^N4cG8eDMOW1xgA7m77&A*zR>MZ%&_=>|%celRpSb z04IVWs9k@Mw(pnC@{Lu)AS!T?0s|HQcZu>1Tw};7DRPvJzNAMfE(Df8VccQa(hl3v z%D^;elIbAAg9vxo=N~T1S#w{& z;I++G=a{w6#^Hk9Zv>IIryCO}OWuvSeR}7ZoTYcuMcQna)|G}!{z^x=fTer7Y)UJksbL(~_ zo?d_QY*~(^gbg-Hbu{;wkuA+W$xKvps(CFJK5ezJkAHCKw}^DL@{)hf?3}`vFJ;BQ zCq*i)z*fOLcV+J!Z?!v@yX)vTSP0;gYAf3>t=K}8lDivM4>VHmqA82r#geku3xr)= zIjrJS29xb z1|i?)CZIJyF-_-hU-jPX?A&+1&!rrI#<>-v9PD`6neFUsOD@*oLZ7M3P6}H$aKL}G zbbjjH7GgTzho3Yz6PPa z>a~%@%J!=1QMFx%kkpwZT9j<1!4{9HfI3Nk{SaR-uU6xB!JaRsKsZ08m5;nLtR_pq zpsL9l{L0Y72|g!dk*Yz*MecuwQ%Qfa5C3`^HBH~D(LW>AZsH?Q6^|F^b8HE8j+#Bd zQ%y&G1{BLRF$=JPO4XmC>Nu9Gb2J&5u359(*G;X5rF$FW73ghAO-tHIG3n4<3G+JW z0M)(vJP1o<&HN~+(FPPpgBo6^Brup<)*>cD@i0n0$F*+;$<;R@N7lH!g71HCj&Ib` zS?v%{wMXAJgN_H?QCU`>*yK{wn>1Zg5MremJV-Id=9Rf>Df$j&onSrI#?ejfJg)U4 z;{MdmZ)ywdDa6h~)kq{%8>JB$kEub_2sy$aCSx*)uJzL?_&ronsR^0{fhg0IVCG#G zYW972%WJ+f2auO_DwW}Mwpo8b$7>2G`6mTsU@}D8z(X)|*uH>#P)6t8DT^0FFqJ5` z1xvtQ)fdZXS@Mvlj1Vk*^kd1J6gXoS#PG0pGKc|3BOp2N^@_q=_G~KkMVJBLJRy(l zgZrOKMB59|S_K6v;@Sw0ILpT%O12UPfA;zmbkn;+5cyp@$2n`(O>uv-z%rhMH(}aX zvt7FKXq;*hK%ZaqI5W%w<=z-u61zSfc-U-5s>lyqRM>Z8}SPy7}wryu2}m zrLBzc*Sy(yV`%<6U2A5(QoH!_sM&`&a^R%73oA-K5M2(BL0>$*FvK2Gx7x~ zDNjX+i*woi>cd^|qJ}$rt;SC9>!el(^$FA-rRsZA zb&J;&>c_nx95?RS-A*}@bgWX3EdcFJW}WLy_X1)cRE-H*L1llEMyp6OWlQrKPY9|MkK25~Cb%X%pUvc($hVHJ9!N zR5BM&SyVT|^TydkH{?_8N^C$iSq=GYYlSYhLsuh^J7@`2jU=|CHJi={3-p=7g8`*?(u&nSU`Jc7E|)U+aHc!e?0m0?#0JH|M($b^X1HF3NIKUH;BIoriWg6 zixa?6s-nW^0uz!W<~}2sPFe5X|MdFP>%Y7`K6(4YAM>(I{*q^GnAx-ZV@1kcXy{}4Wk`sdDZAk>Vd|Y7TlMJyhG@*YDULkHJCx1F?jg_ zE0_W6GB<2~fU63@ZF1NJ1@B-*4LbhxViaKypXd&uOvlyN{#$l5+PMW0rOSDn?{pR3 zjLj%b=?s4>CRS(cDxK{tybCre{DBKs?~` zP>ChHw22d9M!S}kfU70&H7%IjcM~qlC4a{r>5YHCY29hbo$j1(??$#EuGvc-)k)~S zAjBAM*WJEY3_7JP<&0=?%ct^xQB_i>DwQ)ts#2PRYKpJ;*qvSlFP0H8sS=tpX=w(! z3x)*Kn9$4>VTwMzyHi4eOnKGDX4b;)(ZU|l!h&Zzmeeim5i_M3m{xhjyrlc&jGSU# z^-_QQbT2{bULDmJy%DaAT(g{py$r|UAe{16B{Hq(Oa0P0(x$}DuqWjJHy<)7zvK(T zcA3&7ipzT;De6~Ya(Z#bWm6wuD}<~p9ALJOd+y171tz?1chrc=jYdW6vg{dE=U#~L zr_pG1al`Ew3|*DhJ(-a&%*o$2o#V=)G=hIujf98U#Ii%HUk{DVY)vmgqAK>sJULh@ zF$5=ea>9q!MaFNMM(81ZZ?#9SV!zJ?^wwMv6F%BZ8V?G|;5cKuxBRkT(P7VLDzjT z@Nhkqi#LD?Ou0#utHSJ(Sv}Z$0vvR~=8QrOY;Gr}%B{iUg9jibMR1unYAbIPW)k=a zALEOP_(81V9YCdbD3^^Hfkh0H4YGffi<7jx*WggTyNl>he$M`MOx<`BH2aN{4~a~d z>6iCEe){?C_uqf|?)9fPZ$G|%6=+1zCia6?+53NxUD#)# zkxaF#NaDHBj*3Y;xalPp1VJ$QoUF(u>%}W=iD*%YmW8H1?W%00klDtXv&OTH2=1>T z&2?0{edu#t!GU9d#6`YZP+Mh~WYjD|V1Y$*awtP`n?^G!XOuJVREH9a8G^fl(G*g1 zuv4*7vT0RWzG0=hLKZ@lL(zX8i#PcsohKJJi7bM+e?OeO3{oSWhQrCxmRlLL?YFndZI{_rWjZ{{&rV{(mFh+?xe{26i2J3+d`0=Y0vgEp zFES){cb5oiS4(EK7_5Kkvf5Fzl1YqJ zO%|+tq*wz)w}+M#IayIfeo5v`jUcZol2T`A8I9#0(9GHtjGBLLYV9DslA^0j16Ihp(DJZ;23`!*klDafIXk6yh5^&9pN%jM5q8}L~9YpO=_*MuhMN%soP3U-mSsI1U}%I z`uz7Hj^hfVR}+8Di~Pi6qj7Q=tv0Xc(!Lee_145E9)O=YXie&^zXqvR?6WEos*0lXQEJqnlGQ(O_>$FhQzePCbR#YIH)x&KCbZ6z)`ofq zWD>sas8|DMB&J_z))Cu;?ZniBm(c_yJD^shkpXo@_`iQGzu`>mxS)KE|7kb8~YwUnKc_PIFYXdRdj`n?Mr!8O`dtP?FRU$HfJ8@PwQ3Zuu z4ENMi(wlVFkChj*(rsYff~-vVqTng#qiE2GIqCw8bd#d&d=$slQ`#{*zWHq>={$5P z_vFCBPl$h%F9MY`$CJ%`2#<7a^4@ioV-$y8otdocsg5E#m^1@jEd0=MN}3;P2O_%5 zdS%U$yF1cR6tG6~b9`efK5EOm-?j+irYw{1wT>n`05efq(qfr4|B79#9)z_30Hy}e zk|oH2Wl7!2om?OqeE(`&3hT#-c5iKwGor1z z2W5yk=dR-tMcpsMb6LbDJ07V#v3HHgaSsPXvT|OiKgy0gVH&p3@x=AOfDGAWQdj}T zF6$ST%8Zwk8CRCc+e>NJ@$@rIw%{U9LY9x&;JVJ)-ubp#$eIi=g`RDu!hJOtFtgI3 z1h#*TW=h~tA(p7}d4#hWqHF^s27#z(N<7s)!#gP!8E!P3lZxS-oRKDBWOabv{k(!I zZn`)Z<7QK3>l07A@9w<8Al4c=E`~VZdBFwbzwZ{Q^3%jA3;Wcixi?XBq}X%C2?>(j zBSP5TCL=L>fKSfJp(mMTYg9Oiewc*pA7+1)e;onXla1U=pH%DAZEs)S-4P;T4_H$B zKw9tWF-X|xquS=O??nkTH`Ud*`FkQCSB!accPZDYce0*#Vav7XV>7di0J#xf7m?6* z!jf0Tf{2!li|)?tw*o3n8PxFi1RI7pH~yfxpATq8>M#P;W|)uw;ee6yRKHW*B$X-X!~N-)E#x~F)h z#-lAnlLMko4cDn}<~7yET7)Hy;F|6M#-!BLPFuSkVi=`jxNyzl8ePQBvGOl#s!~nT zWHdd-3dk>U+^q*}EOHWte&O2G$6&aqR*#l

3B-c3Jjh}E~FLOp*^;{X1heXt*Fw|q6vi!*z-^>X|qed%whYPXI=f4?=vRy#tH z50u2h5diqLlU_|W;5$UrGrP!kp>PSAE29LtICwQP6ZAsQRTr&NxraH_zy^P)(;LD* z?Jh$FbyFeKNkmGU-?B4xTG34^ADpxbpNnnHnoVV? zG}_ikd2;u~AH_B~LcbypcvOFXrb^`8T{$Y}ld!`(O4DpOzayN#N8-Qf1wPaHlbQAS z?Js=b=`-=y#@L^|BjqteCZ|Wh@UDl*ZkK_`nQW)hMK@9+ZWUv%B(iNV%mI4R#`WnG z#(F)+bX#r>E)gB+?zeUsgBy~&S$aK8y!AT{)|SawRMW-Qu-*xq$VPvKozDKMn3ren zdhj$-?BOTc+rU(*Yc+Jg$nEVm=xs9N=|*5RZP+Q+^+z)%wU*Z@ZP+PB6fVuww|}@{ zq}7p`6_sBkEQJFmgaGN70`@|3IAiJRmsJH|*xQ3$oO}*;XI0w1pvM=xGt_1j0-!?k z0gb0$_Hj!k8T>&EVmg185nh*=SYbrg9&@|!Ip0&>;uLbku=D3o9BWkrxXGpig`f^# zE{tVmO4;v)$uy4hoO1_HwT$4YPBx@sPIcMkR4+EA5oCOX!#>)ON^#iB7>9l3bJ*Cv zlOwv9v<`S=;7DQxtUb8Di{}B?bXNj>2Ot7tdKXQ+xTCw@Z%BXD*WIr+rRnYN*Ber8 z>hACT?tY)VN?wnWH<`=%1#@_m{A5|lH>2b$n&crfy!F%m%E6$W@tpmc?jK^o9gEw# z4B9vn6nwRlK{7D>3TTQz3pd(oJW}~WF(VVy$)#_NPv6KpQ8pbr{vqy@`Offux#NFH zO_(sRW;G*E_8)(hH#cFn2%3&w)cYf`)`fivyUcW-U9_MNM!cc?nAuCXxnW_zxH5fJ z7KSF5$+w&0jW2b~9N_i5L@x>IVnctN!c5iO*lVzafjFs}!0P48H*!F)HvP>5HHFCD~XtuTbT3iwa z@7O73!zE~or}PFTw;{5U$uCaZ>$DO?#K9{1a*Rk^R^*diAYK&b$yvfwF1bqHCA^Im$9AQ+QtnqDOce3u~Xy?`73p1zWYU((mfi8?1O@g!J}1)jdNNRF4@ zs{%%RNE$8coJ_agNOma>2o6Fz{V6dR>hycQ?rH9={_L9*BnYz+9YKPo;LHL(S6~J3 zVd{V4od*M^aM_7hKH!(KaS*>0&o)En?Esto2$}&{1&CN9E#m?dA{Gj`%PFamuckU< z6}rcvEh;nZ_5sxp7{K}FpF9gTc1uDkoqfwr5;UR;G=U||*z zH0r3qs32@LNsxEK8h_op z4=Td-erHdSETErQTQ)mqB}{hyMG->EVTpq%eov+wQa@QzbH+Wx3GYv+MMp z+a+h|uH$=bofvfL`M;>qO#Y@ReDbCAZSoC%l`QL5pZYpggqm(P{4)C{wyWyoGUCaX z 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�}B3+%~1O@CNw6O=~ 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

#_T+Z+qB5p=b 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%0DBC_1zDUXetE>YfhEQ$-;{ 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 diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 index ec6292c19..540b97178 100644 --- a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 +++ b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 @@ -1 +1 @@ -M+kAuw0XPCweqsLUsRU6UJoJqXctoVO6xWEFum8ubnIp2nA/aFQlT6hgVQTLMTY5nI/eO7TM32bGSVsKoYWMBw== \ No newline at end of file +oeHEL1XH6DwEv4Rk6JjAABzcpTdBI3Zmoz3tyn+20vBUcvsdmKQMFp8I1rBZmAeOJ9NSvvRYf8LHDM2UtRTbvw== \ No newline at end of file From 0befd7ec78602f909ac0ce23a1bedb37382ee954 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Wed, 14 Mar 2018 20:15:00 +0100 Subject: [PATCH 28/28] Libraries upgraded. --- .../Squidex.Domain.Apps.Core.Model.csproj | 2 +- ...Squidex.Domain.Apps.Core.Operations.csproj | 4 +- .../Squidex.Domain.Apps.Entities.csproj | 2 +- .../Squidex.Domain.Apps.Events.csproj | 2 +- .../Squidex.Domain.Users.MongoDb.csproj | 2 +- .../Squidex.Domain.Users.csproj | 2 +- .../Squidex.Infrastructure.csproj | 10 ++--- src/Squidex/Config/Orleans/ClientWrapper.cs | 3 +- src/Squidex/Config/Orleans/SiloWrapper.cs | 4 +- src/Squidex/Squidex.csproj | 40 +++++++++---------- src/Squidex/app-config/helpers.js | 6 +-- src/Squidex/app-config/karma.conf.js | 2 +- src/Squidex/app-config/webpack.config.js | 3 -- src/Squidex/app-config/webpack.run.base.js | 5 +-- src/Squidex/app-config/webpack.run.dev.js | 5 +-- .../Squidex.Domain.Apps.Core.Tests.csproj | 2 +- .../Squidex.Domain.Apps.Entities.Tests.csproj | 2 +- .../Squidex.Domain.Users.Tests.csproj | 2 +- .../Squidex.Infrastructure.Tests.csproj | 6 +-- 19 files changed, 46 insertions(+), 58 deletions(-) diff --git a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj index 24c9b0b8b..56ec1fe60 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj +++ b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj @@ -8,7 +8,7 @@ True - + diff --git a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj index 7a5a38036..413191771 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj +++ b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj @@ -14,11 +14,11 @@ - + - + diff --git a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj index 633b765db..79b7bc932 100644 --- a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj +++ b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj b/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj index 2cb659bdf..9c578c330 100644 --- a/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj +++ b/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj index 8ac60dbb6..fce1bc788 100644 --- a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj +++ b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj b/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj index 10b6e916a..0ca9385ae 100644 --- a/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj +++ b/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index 187b2dc3c..77029bf52 100644 --- a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -8,11 +8,11 @@ True - - - - - + + + + + diff --git a/src/Squidex/Config/Orleans/ClientWrapper.cs b/src/Squidex/Config/Orleans/ClientWrapper.cs index e38f7353a..99a730a04 100644 --- a/src/Squidex/Config/Orleans/ClientWrapper.cs +++ b/src/Squidex/Config/Orleans/ClientWrapper.cs @@ -8,6 +8,7 @@ using System; using System.Net; using Orleans; +using Orleans.Configuration; using Orleans.Runtime; using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; @@ -31,7 +32,7 @@ namespace Squidex.Config.Orleans { options.Gateways.Add(new IPEndPoint(IPAddress.Loopback, 40000).ToGatewayUri()); }) - .ConfigureCluster(options => + .Configure(options => { options.ClusterId = "squidex"; }) diff --git a/src/Squidex/Config/Orleans/SiloWrapper.cs b/src/Squidex/Config/Orleans/SiloWrapper.cs index ceea10c3e..18f99175e 100644 --- a/src/Squidex/Config/Orleans/SiloWrapper.cs +++ b/src/Squidex/Config/Orleans/SiloWrapper.cs @@ -53,8 +53,8 @@ namespace Squidex.Config.Orleans .AddStartupTask>() .AddStartupTask>() .AddStartupTask>() - .ConfigureEndpoints(Dns.GetHostName(), 11111, 40000, listenOnAllHostAddresses: true) - .Configure(options => + .ConfigureEndpoints(Dns.GetHostName(), 11111, 40000, listenOnAnyHostAddress: true) + .Configure(options => { options.ClusterId = "squidex"; }) diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index a5255b68c..78137e35a 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -54,33 +54,33 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + - - + + - + - + - - + + @@ -105,7 +105,7 @@ - + \ No newline at end of file diff --git a/src/Squidex/app-config/helpers.js b/src/Squidex/app-config/helpers.js index 30c3534da..acae3e4bb 100644 --- a/src/Squidex/app-config/helpers.js +++ b/src/Squidex/app-config/helpers.js @@ -1,8 +1,4 @@ -// ReSharper disable InconsistentNaming -// ReSharper disable PossiblyUnassignedProperty -// ReSharper disable InconsistentNaming - -var path = require('path'); +var path = require('path'); var appRoot = path.resolve(__dirname, '..'); diff --git a/src/Squidex/app-config/karma.conf.js b/src/Squidex/app-config/karma.conf.js index 852cce536..e95ed7d43 100644 --- a/src/Squidex/app-config/karma.conf.js +++ b/src/Squidex/app-config/karma.conf.js @@ -34,7 +34,7 @@ module.exports = function (config) { }, /* - * leave Jasmine Spec Runner output visible in browser + * Leave Jasmine Spec Runner output visible in browser */ client: { clearContext: false diff --git a/src/Squidex/app-config/webpack.config.js b/src/Squidex/app-config/webpack.config.js index 41b87ba34..06b097999 100644 --- a/src/Squidex/app-config/webpack.config.js +++ b/src/Squidex/app-config/webpack.config.js @@ -1,6 +1,3 @@ -// ReSharper disable InconsistentNaming -// ReSharper disable PossiblyUnassignedProperty - var webpack = require('webpack'), path = require('path'), HtmlWebpackPlugin = require('html-webpack-plugin'), diff --git a/src/Squidex/app-config/webpack.run.base.js b/src/Squidex/app-config/webpack.run.base.js index c9f4cf820..18274c8fc 100644 --- a/src/Squidex/app-config/webpack.run.base.js +++ b/src/Squidex/app-config/webpack.run.base.js @@ -1,7 +1,4 @@ -// ReSharper disable InconsistentNaming -// ReSharper disable PossiblyUnassignedProperty - - var webpack = require('webpack'), + var webpack = require('webpack'), webpackMerge = require('webpack-merge'), HtmlWebpackPlugin = require('html-webpack-plugin'), commonConfig = require('./webpack.config.js'), diff --git a/src/Squidex/app-config/webpack.run.dev.js b/src/Squidex/app-config/webpack.run.dev.js index 224f8d515..21a138e16 100644 --- a/src/Squidex/app-config/webpack.run.dev.js +++ b/src/Squidex/app-config/webpack.run.dev.js @@ -1,7 +1,4 @@ -// ReSharper disable InconsistentNaming -// ReSharper disable PossiblyUnassignedProperty - - var webpackMerge = require('webpack-merge'), + var webpackMerge = require('webpack-merge'), ExtractTextPlugin = require('extract-text-webpack-plugin'), runConfig = require('./webpack.run.base.js'), helpers = require('./helpers'); diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj b/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj index 69877a9b4..192241dbf 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj +++ b/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj b/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj index 267e74810..bfbe053bc 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj @@ -21,7 +21,7 @@ - + diff --git a/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj b/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj index acd55101f..579fde7c1 100644 --- a/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj +++ b/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj b/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj index 5abe74cf2..4337579b8 100644 --- a/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj +++ b/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj @@ -14,9 +14,9 @@ - - - + + +

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 delta 160520 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 z

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 literal 0 HcmV?d00001 diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 new file mode 100644 index 000000000..734af3ce5 --- /dev/null +++ b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg.sha512 @@ -0,0 +1 @@ +uTfl6S7PJhuGfx75wJiQC5gTgaRh17T0kqLDgfXZtXqQuz1kk6ikRGTnaDEjWM9SKks/uBf7q27CE8yOkuctFw== \ No newline at end of file diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.nuspec b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.nuspec new file mode 100644 index 000000000..e31eec4a6 --- /dev/null +++ b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.nuspec @@ -0,0 +1,25 @@ + + + + OrleansDashboard + 2.0.0-rc1 + OrleansContrib + OrleansContrib + false + https://opensource.org/licenses/MIT + https://github.com/OrleansContrib/OrleansDashboard + http://dotnet.github.io/orleans/assets/logo.png + An admin dashboard for Microsoft Orleans + Copyright © 2017 + orleans dashboard metrics monitor + + + + + + + + + + + \ No newline at end of file diff --git a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj index 91ab5c926..24c9b0b8b 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj +++ b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj @@ -8,7 +8,7 @@ True - + diff --git a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj index 8a5057653..e724bba0a 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj +++ b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj @@ -13,17 +13,17 @@ - + - - - - + + + + - + ..\..\Squidex.ruleset diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj b/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj index 1095818b8..c63141855 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj @@ -15,7 +15,7 @@ - + diff --git a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj index 5393faf5e..633b765db 100644 --- a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj +++ b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj b/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj index 456d82e06..2cb659bdf 100644 --- a/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj +++ b/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj index 50c66cb45..8ac60dbb6 100644 --- a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj +++ b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj b/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj index 7f009bb3d..3e4bd2895 100644 --- a/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj +++ b/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj b/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj index 4ebcb4f28..8a0943f3c 100644 --- a/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj +++ b/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj @@ -8,7 +8,7 @@ True - + diff --git a/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj b/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj index 43fd73478..70a012240 100644 --- a/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj +++ b/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index b7c609898..187b2dc3c 100644 --- a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -10,11 +10,11 @@ - - - - - + + + + + diff --git a/src/Squidex/Config/Orleans/ClientWrapper.cs b/src/Squidex/Config/Orleans/ClientWrapper.cs index 9f6090cd5..e38f7353a 100644 --- a/src/Squidex/Config/Orleans/ClientWrapper.cs +++ b/src/Squidex/Config/Orleans/ClientWrapper.cs @@ -6,14 +6,15 @@ // ========================================================================== using System; +using System.Net; using Orleans; -using Orleans.Runtime.Configuration; +using Orleans.Runtime; using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; namespace Squidex.Config.Orleans { - public sealed class ClientWrapper : IInitializable, IDisposable + public sealed class ClientWrapper : DisposableObjectBase, IInitializable, IDisposable { private readonly IClusterClient client; @@ -25,17 +26,20 @@ namespace Squidex.Config.Orleans public ClientWrapper() { client = new ClientBuilder() - .UseConfiguration(ClientConfiguration.LocalhostSilo()) .UseDashboard() + .UseStaticClustering(options => + { + options.Gateways.Add(new IPEndPoint(IPAddress.Loopback, 40000).ToGatewayUri()); + }) + .ConfigureCluster(options => + { + options.ClusterId = "squidex"; + }) .ConfigureApplicationParts(builder => { builder.AddApplicationPart(SquidexEntities.Assembly); builder.AddApplicationPart(SquidexInfrastructure.Assembly); }) - .UseStaticGatewayListProvider(options => - { - options.Gateways.Add(new Uri("gwy.tcp://127.0.0.1:40000/0")); - }) .Build(); } @@ -44,9 +48,12 @@ namespace Squidex.Config.Orleans client.Connect().Wait(); } - public void Dispose() + protected override void DisposeObject(bool disposing) { - client.Close().Wait(); + if (disposing) + { + client.Close().Wait(); + } } } } diff --git a/src/Squidex/Config/Orleans/SiloExtensions.cs b/src/Squidex/Config/Orleans/SiloExtensions.cs deleted file mode 100644 index 430220d07..000000000 --- a/src/Squidex/Config/Orleans/SiloExtensions.cs +++ /dev/null @@ -1,34 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Microsoft.Extensions.Configuration; -using Orleans; -using Orleans.Hosting; -using Orleans.Runtime.Configuration; - -namespace Squidex.Config.Orleans -{ - public static class SiloExtensions - { - public static ISiloHostBuilder UseContentRoot(this ISiloHostBuilder builder, string path) - { - builder.ConfigureAppConfiguration(config => - { - config.SetBasePath(path); - }); - - return builder; - } - - public static ClusterConfiguration WithDashboard(this ClusterConfiguration config) - { - config.RegisterDashboard(); - - return config; - } - } -} diff --git a/src/Squidex/Config/Orleans/SiloServices.cs b/src/Squidex/Config/Orleans/SiloServices.cs index 6192788be..737c1ef15 100644 --- a/src/Squidex/Config/Orleans/SiloServices.cs +++ b/src/Squidex/Config/Orleans/SiloServices.cs @@ -5,13 +5,9 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; -using System.Linq; -using System.Net; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Orleans; -using Orleans.Runtime.Configuration; +using Orleans.Hosting; namespace Squidex.Config.Orleans { @@ -19,32 +15,6 @@ namespace Squidex.Config.Orleans { public static void AddAppSiloServices(this IServiceCollection services, IConfiguration config) { - var clusterConfiguration = - services.Where(x => x.ServiceType == typeof(ClusterConfiguration)) - .Select(x => x.ImplementationInstance) - .Select(x => (ClusterConfiguration)x) - .FirstOrDefault(); - - if (clusterConfiguration != null) - { - var ipConfig = config.GetRequiredValue("orleans:hostNameOrIPAddress"); - - if (ipConfig.Equals("Host", StringComparison.OrdinalIgnoreCase)) - { - ipConfig = Dns.GetHostName(); - } - else if (ipConfig.Equals("FirstIPAddressOfHost")) - { - var ips = Dns.GetHostAddressesAsync(Dns.GetHostName()).Result; - - ipConfig = ips.FirstOrDefault()?.ToString(); - } - - clusterConfiguration.Defaults.PropagateActivityId = true; - clusterConfiguration.Defaults.ProxyGatewayEndpoint = new IPEndPoint(IPAddress.Any, 40000); - clusterConfiguration.Defaults.HostNameOrIPAddress = ipConfig; - } - config.ConfigureByOption("store:type", new Options { ["MongoDB"] = () => diff --git a/src/Squidex/Config/Orleans/SiloWrapper.cs b/src/Squidex/Config/Orleans/SiloWrapper.cs index 7e700fdf4..8c79171b5 100644 --- a/src/Squidex/Config/Orleans/SiloWrapper.cs +++ b/src/Squidex/Config/Orleans/SiloWrapper.cs @@ -6,11 +6,13 @@ // ========================================================================== using System; -using System.IO; +using System.Net; +using System.Threading.Tasks; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using Orleans; +using Orleans.Configuration; using Orleans.Hosting; -using Orleans.Runtime.Configuration; using Squidex.Config.Domain; using Squidex.Domain.Apps.Entities; using Squidex.Infrastructure; @@ -19,7 +21,7 @@ using Squidex.Infrastructure.Orleans; namespace Squidex.Config.Orleans { - public class SiloWrapper : IInitializable, IDisposable + public class SiloWrapper : DisposableObjectBase, IInitializable, IDisposable { private readonly ISiloHost silo; @@ -42,38 +44,40 @@ namespace Squidex.Config.Orleans { J.Serializer = SerializationServices.DefaultJsonSerializer; - silo = SiloHostBuilder.CreateDefault() - .UseConfiguration(ClusterConfiguration.LocalhostPrimarySilo(33333).WithDashboard()) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseDashboard(options => - { - options.HostSelf = false; - }) - .ConfigureLogging(builder => - { - builder.AddSemanticLog(); - }) - .ConfigureApplicationParts(builder => - { - builder.AddApplicationPart(SquidexEntities.Assembly); - builder.AddApplicationPart(SquidexInfrastructure.Assembly); - }) - .ConfigureServices((context, services) => - { - services.AddAppSiloServices(context.Configuration); - services.AddAppServices(context.Configuration); - }) - .ConfigureAppConfiguration((hostContext, builder) => - { - if (configuration is IConfigurationRoot root) - { - foreach (var provider in root.Providers) - { - builder.Add(new Source(provider)); - } - } - }) - .Build(); + silo = new SiloHostBuilder() + .UseDashboard(options => options.HostSelf = true) + .ConfigureEndpoints(Dns.GetHostName(), 11111, 40000, listenOnAllHostAddresses: true) + .Configure(options => + { + options.ClusterId = "squidex"; + }) + .ConfigureLogging(builder => + { + builder.AddSemanticLog(); + }) + .ConfigureApplicationParts(builder => + { + builder.AddApplicationPart(SquidexEntities.Assembly); + builder.AddApplicationPart(SquidexInfrastructure.Assembly); + }) + .ConfigureServices((context, services) => + { + services.AddAppSiloServices(context.Configuration); + services.AddAppServices(context.Configuration); + + services.Configure(options => options.FastKillOnProcessExit = false); + }) + .ConfigureAppConfiguration((hostContext, builder) => + { + if (configuration is IConfigurationRoot root) + { + foreach (var provider in root.Providers) + { + builder.Add(new Source(provider)); + } + } + }) + .Build(); } public void Initialize() @@ -81,9 +85,12 @@ namespace Squidex.Config.Orleans silo.StartAsync().Wait(); } - public void Dispose() + protected override void DisposeObject(bool disposing) { - silo.StopAsync().Wait(); + if (disposing) + { + Task.Run(() => silo.StopAsync()).Wait(); + } } } } diff --git a/src/Squidex/Program.cs b/src/Squidex/Program.cs index d2f22ecfe..4f8ac0de4 100644 --- a/src/Squidex/Program.cs +++ b/src/Squidex/Program.cs @@ -10,7 +10,6 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Orleans; using Orleans.Hosting; -using Squidex.Config.Orleans; using Squidex.Infrastructure.Log.Adapter; namespace Squidex diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index 970206238..7a5b50af6 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -48,11 +48,11 @@ - - - - - + + + + + @@ -69,20 +69,20 @@ - - + + - + - + - - + + - + @@ -104,4 +104,8 @@ + + + + \ No newline at end of file diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj b/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj index 0f5eb476e..69877a9b4 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj +++ b/tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj @@ -10,9 +10,9 @@ - + - + diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj b/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj index e8182ece5..267e74810 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj @@ -19,9 +19,9 @@ - + - + diff --git a/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj b/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj index 26ddcfcc4..acd55101f 100644 --- a/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj +++ b/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj @@ -11,9 +11,9 @@ - + - + diff --git a/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj b/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj index 19934fba9..5abe74cf2 100644 --- a/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj +++ b/tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj @@ -11,12 +11,12 @@ - + - + From 060bab5f94c45815685e41851952641e311613cf Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 16:13:40 +0100 Subject: [PATCH 16/28] Version updated. --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 815be4bfb..110af6027 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "2.1.4" + "version": "2.0.0" } } From fee0d1345561bbacd4073ae6ad855e292a3ebacb Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 16:17:05 +0100 Subject: [PATCH 17/28] Global.json removed. --- global.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 global.json diff --git a/global.json b/global.json deleted file mode 100644 index 110af6027..000000000 --- a/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sdk": { - "version": "2.0.0" - } -} From c6481c092c10aa88f91ae7abf857d5741d324dc9 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 18:43:14 +0100 Subject: [PATCH 18/28] Config fixes --- .../Actions/WebhookActionHandler.cs | 9 +- .../Triggers/ContentChangedTriggerHandler.cs | 2 +- .../MongoDb/BsonJsonConvention.cs | 15 ++- .../MongoDb/BsonJsonSerializer.cs | 2 +- src/Squidex/AppServices.cs | 10 +- src/Squidex/Config/Domain/AssetServices.cs | 4 + .../{WriteServices.cs => EntitiesServices.cs} | 98 +++++++++----- .../Config/Domain/EventStoreServices.cs | 20 +++ .../Config/Domain/InfrastructureServices.cs | 70 +--------- src/Squidex/Config/Domain/LoggingServices.cs | 64 +++++++++ src/Squidex/Config/Domain/PubSubServices.cs | 40 ------ src/Squidex/Config/Domain/ReadServices.cs | 123 ------------------ src/Squidex/Config/Domain/RuleServices.cs | 55 ++++++++ src/Squidex/Config/Domain/StoreServices.cs | 24 ++-- .../Config/Domain/SubscriptionServices.cs | 34 +++++ .../events/rule-events-page.component.ts | 2 +- src/Squidex/appsettings.json | 29 ----- 17 files changed, 291 insertions(+), 310 deletions(-) rename src/Squidex/Config/Domain/{WriteServices.cs => EntitiesServices.cs} (68%) create mode 100644 src/Squidex/Config/Domain/LoggingServices.cs delete mode 100644 src/Squidex/Config/Domain/PubSubServices.cs delete mode 100644 src/Squidex/Config/Domain/ReadServices.cs create mode 100644 src/Squidex/Config/Domain/RuleServices.cs create mode 100644 src/Squidex/Config/Domain/SubscriptionServices.cs diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs index 5fe661d4f..bac9ef7fd 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs @@ -63,7 +63,14 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions var responseString = await response.Content.ReadAsStringAsync(); var requestDump = DumpFormatter.BuildDump(requestMsg, response, requestBody, responseString, TimeSpan.Zero, false); - return (requestDump, null); + Exception ex = null; + + if (!response.IsSuccessStatusCode) + { + ex = new HttpRequestException($"Response code does not indicate success: {(int)response.StatusCode} ({response.StatusCode})."); + } + + return (requestDump, ex); } catch (Exception ex) { diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Triggers/ContentChangedTriggerHandler.cs b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Triggers/ContentChangedTriggerHandler.cs index 13ca5f459..6914f3d44 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Triggers/ContentChangedTriggerHandler.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Triggers/ContentChangedTriggerHandler.cs @@ -17,7 +17,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Triggers { protected override bool Triggers(Envelope @event, ContentChangedTrigger trigger) { - if (trigger.HandleAll) + if (trigger.HandleAll && @event.Payload is ContentEvent) { return true; } diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs index ab9f13d11..77019a716 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs @@ -11,6 +11,7 @@ using System.Reflection; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace Squidex.Infrastructure.MongoDb { @@ -31,9 +32,21 @@ namespace Squidex.Infrastructure.MongoDb memberMap.SetSerializer((IBsonSerializer)bsonSerializer); } + else if (memberMap.MemberType == typeof(JToken)) + { + memberMap.SetSerializer(JTokenSerializer.Instance); + } + else if (memberMap.MemberType == typeof(JObject)) + { + memberMap.SetSerializer(JTokenSerializer.Instance); + } + else if (memberMap.MemberType == typeof(JValue)) + { + memberMap.SetSerializer(JTokenSerializer.Instance); + } }); ConventionRegistry.Register("json", pack, t => true); } } -} +} \ No newline at end of file diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonSerializer.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonSerializer.cs index d06df02c9..eefb3e3e5 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonSerializer.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonSerializer.cs @@ -12,7 +12,7 @@ using Newtonsoft.Json; namespace Squidex.Infrastructure.MongoDb { - public class BsonJsonSerializer : ClassSerializerBase where T : class + public sealed class BsonJsonSerializer : ClassSerializerBase where T : class { private readonly JsonSerializer serializer; diff --git a/src/Squidex/AppServices.cs b/src/Squidex/AppServices.cs index baa614181..3a6e0e91f 100644 --- a/src/Squidex/AppServices.cs +++ b/src/Squidex/AppServices.cs @@ -26,17 +26,19 @@ namespace Squidex services.AddMyAssetServices(config); services.AddMyAuthentication(config); + services.AddMyEntitiesServices(config); services.AddMyEventPublishersServices(config); services.AddMyEventStoreServices(config); services.AddMyIdentityServer(); - services.AddMyInfrastructureServices(config); + services.AddMyInfrastructureServices(); + services.AddMyLoggingServices(config); + services.AddMyMigrationServices(); services.AddMyMvc(); - services.AddMyPubSubServices(config); - services.AddMyReadServices(config); + services.AddMyRuleServices(); services.AddMySerializers(); services.AddMyStoreServices(config); services.AddMySwaggerSettings(); - services.AddMyWriteServices(); + services.AddMySubscriptionServices(config); services.Configure( config.GetSection("urls")); diff --git a/src/Squidex/Config/Domain/AssetServices.cs b/src/Squidex/Config/Domain/AssetServices.cs index d2579c2ca..59297c8b6 100644 --- a/src/Squidex/Config/Domain/AssetServices.cs +++ b/src/Squidex/Config/Domain/AssetServices.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Squidex.Infrastructure; using Squidex.Infrastructure.Assets; +using Squidex.Infrastructure.Assets.ImageSharp; using Squidex.Infrastructure.Log; namespace Squidex.Config.Domain @@ -45,6 +46,9 @@ namespace Squidex.Config.Domain .As(); } }); + + services.AddSingletonAs() + .As(); } } } diff --git a/src/Squidex/Config/Domain/WriteServices.cs b/src/Squidex/Config/Domain/EntitiesServices.cs similarity index 68% rename from src/Squidex/Config/Domain/WriteServices.cs rename to src/Squidex/Config/Domain/EntitiesServices.cs index 916302fd8..c8583e713 100644 --- a/src/Squidex/Config/Domain/WriteServices.cs +++ b/src/Squidex/Config/Domain/EntitiesServices.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Migrate_01; @@ -19,25 +20,55 @@ using Squidex.Domain.Apps.Entities.Apps.Templates; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Contents; using Squidex.Domain.Apps.Entities.Contents.Commands; +using Squidex.Domain.Apps.Entities.Contents.Edm; +using Squidex.Domain.Apps.Entities.Contents.GraphQL; +using Squidex.Domain.Apps.Entities.History; using Squidex.Domain.Apps.Entities.Rules; using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Schemas; -using Squidex.Domain.Users; +using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Migrations; +using Squidex.Pipeline; using Squidex.Pipeline.CommandMiddlewares; namespace Squidex.Config.Domain { - public static class WriteServices + public static class EntitiesServices { - public static void AddMyWriteServices(this IServiceCollection services) + public static void AddMyEntitiesServices(this IServiceCollection services, IConfiguration config) { - services.AddSingletonAs() - .As(); + var exposeSourceUrl = config.GetOptionalValue("assetStore:exposeSourceUrl", true); - services.AddSingletonAs() - .As(); + services.AddSingletonAs(c => new GraphQLUrlGenerator( + c.GetRequiredService>(), + c.GetRequiredService(), + exposeSourceUrl)) + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .AsSelf(); + + services.AddSingletonAs() + .As(); services.AddSingletonAs() .As(); @@ -75,26 +106,8 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddTransientAs() - .As(); - - services.AddTransientAs() - .As(); - - services.AddTransientAs() - .As(); - - services.AddTransientAs() - .As(); - - services.AddTransientAs() - .As(); - - services.AddTransientAs() - .As(); - - services.AddTransientAs() - .AsSelf(); + services.AddSingletonAs() + .As(); services.AddTransientAs() .AsSelf(); @@ -113,11 +126,11 @@ namespace Squidex.Config.Domain services.AddSingleton(c => { - var config = c.GetRequiredService>(); + var uiOptions = c.GetRequiredService>(); var result = new InitialPatterns(); - foreach (var pattern in config.Value.RegexSuggestions) + foreach (var pattern in uiOptions.Value.RegexSuggestions) { if (!string.IsNullOrWhiteSpace(pattern.Key) && !string.IsNullOrWhiteSpace(pattern.Value)) @@ -129,5 +142,32 @@ namespace Squidex.Config.Domain return result; }); } + + public static void AddMyMigrationServices(this IServiceCollection services) + { + services.AddSingletonAs() + .AsSelf(); + + services.AddTransientAs() + .As(); + + services.AddTransientAs() + .As(); + + services.AddTransientAs() + .As(); + + services.AddTransientAs() + .As(); + + services.AddTransientAs() + .As(); + + services.AddTransientAs() + .As(); + + services.AddTransientAs() + .AsSelf(); + } } } diff --git a/src/Squidex/Config/Domain/EventStoreServices.cs b/src/Squidex/Config/Domain/EventStoreServices.cs index 85f28033e..baa744514 100644 --- a/src/Squidex/Config/Domain/EventStoreServices.cs +++ b/src/Squidex/Config/Domain/EventStoreServices.cs @@ -5,12 +5,15 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Linq; using EventStore.ClientAPI; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using MongoDB.Driver; using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; +using Squidex.Infrastructure.EventSourcing.Grains; +using Squidex.Infrastructure.States; namespace Squidex.Config.Domain { @@ -48,6 +51,23 @@ namespace Squidex.Config.Domain .As(); } }); + + services.AddSingletonAs() + .As() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs(c => + { + var allEventConsumers = c.GetServices(); + + return new EventConsumerFactory(n => allEventConsumers.FirstOrDefault(x => x.Name == n)); + }); } } } diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index 96457224b..085e84e61 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -5,23 +5,11 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Infrastructure; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Newtonsoft.Json; using NodaTime; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Assets; -using Squidex.Infrastructure.Assets.ImageSharp; -using Squidex.Infrastructure.Commands; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.Log; -using Squidex.Infrastructure.Migrations; -using Squidex.Infrastructure.States; using Squidex.Infrastructure.UsageTracking; -using Squidex.Pipeline; #pragma warning disable RECS0092 // Convert field to readonly @@ -29,47 +17,8 @@ namespace Squidex.Config.Domain { public static class InfrastructureServices { - private static ILogChannel console = new ConsoleLogChannel(); - private static ILogChannel file; - - public static void AddMyInfrastructureServices(this IServiceCollection services, IConfiguration config) + public static void AddMyInfrastructureServices(this IServiceCollection services) { - if (config.GetValue("logging:human")) - { - services.AddSingletonAs(c => new Func(() => new JsonLogWriter(Formatting.Indented, true))); - } - else - { - services.AddSingletonAs(c => new Func(() => new JsonLogWriter())); - } - - var loggingFile = config.GetValue("logging:file"); - - if (!string.IsNullOrWhiteSpace(loggingFile)) - { - services.AddSingletonAs(file ?? (file = new FileChannel(loggingFile))) - .As() - .As(); - } - - services.AddSingletonAs(console) - .As(); - - services.AddSingletonAs(c => new ApplicationInfoLogAppender(typeof(Program).Assembly, Guid.NewGuid())) - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - services.AddSingletonAs(SystemClock.Instance) .As(); @@ -81,23 +30,6 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .AsSelf(); - - services.AddSingleton(typeof(IStore<>), typeof(Store<>)); } } } diff --git a/src/Squidex/Config/Domain/LoggingServices.cs b/src/Squidex/Config/Domain/LoggingServices.cs new file mode 100644 index 000000000..e4ee51850 --- /dev/null +++ b/src/Squidex/Config/Domain/LoggingServices.cs @@ -0,0 +1,64 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; +using Squidex.Infrastructure; +using Squidex.Infrastructure.Log; +using Squidex.Pipeline; + +#pragma warning disable RECS0092 // Convert field to readonly + +namespace Squidex.Config.Domain +{ + public static class LoggingServices + { + private static ILogChannel console = new ConsoleLogChannel(); + private static ILogChannel file; + + public static void AddMyLoggingServices(this IServiceCollection services, IConfiguration config) + { + if (config.GetValue("logging:human")) + { + services.AddSingletonAs(c => new Func(() => new JsonLogWriter(Formatting.Indented, true))); + } + else + { + services.AddSingletonAs(c => new Func(() => new JsonLogWriter())); + } + + var loggingFile = config.GetValue("logging:file"); + + if (!string.IsNullOrWhiteSpace(loggingFile)) + { + services.AddSingletonAs(file ?? (file = new FileChannel(loggingFile))) + .As() + .As(); + } + + services.AddSingletonAs(console) + .As(); + + services.AddSingletonAs(c => new ApplicationInfoLogAppender(typeof(Program).Assembly, Guid.NewGuid())) + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + } + } +} diff --git a/src/Squidex/Config/Domain/PubSubServices.cs b/src/Squidex/Config/Domain/PubSubServices.cs deleted file mode 100644 index e35611f06..000000000 --- a/src/Squidex/Config/Domain/PubSubServices.cs +++ /dev/null @@ -1,40 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Log; -using StackExchange.Redis; - -namespace Squidex.Config.Domain -{ - public static class PubSubServices - { - public static void AddMyPubSubServices(this IServiceCollection services, IConfiguration config) - { - config.ConfigureByOption("pubSub:type", new Options - { - ["InMemory"] = () => - { - services.AddSingletonAs() - .As(); - }, - ["Redis"] = () => - { - var configuration = config.GetRequiredValue("pubsub:redis:configuration"); - - var redis = Singletons.GetOrAddLazy(configuration, s => ConnectionMultiplexer.Connect(s)); - - services.AddSingletonAs(c => new RedisPubSub(redis, c.GetRequiredService())) - .As() - .As(); - } - }); - } - } -} diff --git a/src/Squidex/Config/Domain/ReadServices.cs b/src/Squidex/Config/Domain/ReadServices.cs deleted file mode 100644 index 3aafa1fd9..000000000 --- a/src/Squidex/Config/Domain/ReadServices.cs +++ /dev/null @@ -1,123 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Linq; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using Squidex.Domain.Apps.Core.HandleRules; -using Squidex.Domain.Apps.Core.HandleRules.Actions; -using Squidex.Domain.Apps.Core.HandleRules.Triggers; -using Squidex.Domain.Apps.Entities; -using Squidex.Domain.Apps.Entities.Apps; -using Squidex.Domain.Apps.Entities.Apps.Services; -using Squidex.Domain.Apps.Entities.Apps.Services.Implementations; -using Squidex.Domain.Apps.Entities.Contents; -using Squidex.Domain.Apps.Entities.Contents.Edm; -using Squidex.Domain.Apps.Entities.Contents.GraphQL; -using Squidex.Domain.Apps.Entities.History; -using Squidex.Domain.Apps.Entities.Rules; -using Squidex.Domain.Apps.Entities.Schemas; -using Squidex.Domain.Users; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Assets; -using Squidex.Infrastructure.EventSourcing; -using Squidex.Infrastructure.EventSourcing.Grains; -using Squidex.Pipeline; - -namespace Squidex.Config.Domain -{ - public static class ReadServices - { - public static void AddMyReadServices(this IServiceCollection services, IConfiguration config) - { - services.AddSingletonAs() - .As() - .As(); - - var exposeSourceUrl = config.GetOptionalValue("assetStore:exposeSourceUrl", true); - - services.AddSingletonAs(c => new GraphQLUrlGenerator( - c.GetRequiredService>(), - c.GetRequiredService(), - exposeSourceUrl)) - .As(); - - services.AddSingletonAs(c => c.GetService>()?.Value?.Plans.OrEmpty()); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .AsSelf(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs(c => - { - var allEventConsumers = c.GetServices(); - - return new EventConsumerFactory(n => allEventConsumers.FirstOrDefault(x => x.Name == n)); - }); - - services.AddSingletonAs() - .AsSelf(); - - services.AddSingletonAs() - .AsSelf(); - } - } -} diff --git a/src/Squidex/Config/Domain/RuleServices.cs b/src/Squidex/Config/Domain/RuleServices.cs new file mode 100644 index 000000000..888d1eee4 --- /dev/null +++ b/src/Squidex/Config/Domain/RuleServices.cs @@ -0,0 +1,55 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.Extensions.DependencyInjection; +using Squidex.Domain.Apps.Core.HandleRules; +using Squidex.Domain.Apps.Core.HandleRules.Actions; +using Squidex.Domain.Apps.Core.HandleRules.Triggers; +using Squidex.Domain.Apps.Entities.Rules; +using Squidex.Infrastructure.EventSourcing; + +namespace Squidex.Config.Domain +{ + public static class RuleServices + { + public static void AddMyRuleServices(this IServiceCollection services) + { + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .AsSelf(); + + services.AddSingletonAs() + .AsSelf(); + } + } +} diff --git a/src/Squidex/Config/Domain/StoreServices.cs b/src/Squidex/Config/Domain/StoreServices.cs index f9b849af6..537b06688 100644 --- a/src/Squidex/Config/Domain/StoreServices.cs +++ b/src/Squidex/Config/Domain/StoreServices.cs @@ -73,17 +73,6 @@ namespace Squidex.Config.Domain .As>() .As(); - services.AddSingletonAs(c => new MongoUserStore(mongoDatabase)) - .As>() - .As() - .As() - .As(); - - services.AddSingletonAs(c => new MongoRoleStore(mongoDatabase)) - .As>() - .As() - .As(); - services.AddSingletonAs(c => new MongoPersistedGrantStore(mongoDatabase)) .As() .As(); @@ -96,6 +85,17 @@ namespace Squidex.Config.Domain .As() .As(); + services.AddSingletonAs(c => new MongoUserStore(mongoDatabase)) + .As>() + .As() + .As() + .As(); + + services.AddSingletonAs(c => new MongoRoleStore(mongoDatabase)) + .As>() + .As() + .As(); + services.AddSingletonAs(c => new MongoAppRepository(mongoDatabase)) .As() .As>() @@ -133,6 +133,8 @@ namespace Squidex.Config.Domain .As(); } }); + + services.AddSingleton(typeof(IStore<>), typeof(Store<>)); } } } diff --git a/src/Squidex/Config/Domain/SubscriptionServices.cs b/src/Squidex/Config/Domain/SubscriptionServices.cs new file mode 100644 index 000000000..92d4f9106 --- /dev/null +++ b/src/Squidex/Config/Domain/SubscriptionServices.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Squidex.Domain.Apps.Entities.Apps.Services; +using Squidex.Domain.Apps.Entities.Apps.Services.Implementations; +using Squidex.Domain.Users; +using Squidex.Infrastructure; + +namespace Squidex.Config.Domain +{ + public static class SubscriptionServices + { + public static void AddMySubscriptionServices(this IServiceCollection services, IConfiguration config) + { + services.AddSingletonAs(c => c.GetService>()?.Value?.Plans.OrEmpty()); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + + services.AddSingletonAs() + .As(); + } + } +} diff --git a/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts b/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts index 97b065926..a1f40d5e8 100644 --- a/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts +++ b/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts @@ -83,7 +83,7 @@ export class RuleEventsPageComponent implements OnInit { } else if (status === 'Failed') { return 'danger'; } else if (status === 'Pending') { - return 'default'; + return 'secondary'; } else { return status.toLowerCase(); } diff --git a/src/Squidex/appsettings.json b/src/Squidex/appsettings.json index be34052ab..d2ae2abd2 100644 --- a/src/Squidex/appsettings.json +++ b/src/Squidex/appsettings.json @@ -42,15 +42,6 @@ } }, - "orleans": { - /* - * Define the IP address or host name that is used for inter-silo communication. - * - * Special values: FirstIPAddressOfHost, Host - */ - "hostNameOrIPAddress": "localhost" - }, - "logging": { /* * Setting the flag to true, enables well formatteds json logs. @@ -58,26 +49,6 @@ "human": true }, - /* - * The pub sub mechanmism distributes messages between the nodes. - */ - "pubSub": { - /* - * Define the type of the read store. - * - * Supported: InMemory (for single node only), Redis (for cluster) - */ - "type": "InMemory", - "redis": { - /* - * Connection string to your redis server. - * - * Read More: https://github.com/ServiceStack/ServiceStack.Redis#redis-connection-strings - */ - "configuration": "localhost:6379,resolveDns=1" - } - }, - "assetStore": { /* * Define the type of the read store. From f209cccf9ba4f4ed93c421b04bbc9cd66794eefb Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 18:51:32 +0100 Subject: [PATCH 19/28] Registration fixes --- src/Squidex/Config/Domain/SubscriptionServices.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Squidex/Config/Domain/SubscriptionServices.cs b/src/Squidex/Config/Domain/SubscriptionServices.cs index 92d4f9106..c38eab838 100644 --- a/src/Squidex/Config/Domain/SubscriptionServices.cs +++ b/src/Squidex/Config/Domain/SubscriptionServices.cs @@ -29,6 +29,9 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); + + services.AddSingletonAs() + .As(); } } } From 3f80c5c267f64898b8deb8875326a644cedd5369 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 19:27:07 +0100 Subject: [PATCH 20/28] Logging improved. --- src/Squidex/Config/Orleans/SiloWrapper.cs | 5 ++++- src/Squidex/Program.cs | 4 +++- src/Squidex/Squidex.csproj | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Squidex/Config/Orleans/SiloWrapper.cs b/src/Squidex/Config/Orleans/SiloWrapper.cs index 170c20e16..ceea10c3e 100644 --- a/src/Squidex/Config/Orleans/SiloWrapper.cs +++ b/src/Squidex/Config/Orleans/SiloWrapper.cs @@ -10,6 +10,7 @@ using System.Net; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Orleans; using Orleans.Configuration; using Orleans.Hosting; @@ -57,9 +58,11 @@ namespace Squidex.Config.Orleans { options.ClusterId = "squidex"; }) - .ConfigureLogging(builder => + .ConfigureLogging((hostingContext, builder) => { + builder.AddConfiguration(hostingContext.Configuration.GetSection("logging")); builder.AddSemanticLog(); + builder.AddFilter("Orleans.Runtime.SiloControl", LogLevel.Warning); }) .ConfigureApplicationParts(builder => { diff --git a/src/Squidex/Program.cs b/src/Squidex/Program.cs index 4f8ac0de4..cde637931 100644 --- a/src/Squidex/Program.cs +++ b/src/Squidex/Program.cs @@ -8,6 +8,7 @@ using System.IO; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using Orleans; using Orleans.Hosting; using Squidex.Infrastructure.Log.Adapter; @@ -23,8 +24,9 @@ namespace Squidex .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() - .ConfigureLogging(builder => + .ConfigureLogging((hostingContext, builder) => { + builder.AddConfiguration(hostingContext.Configuration.GetSection("logging")); builder.AddSemanticLog(); }) .ConfigureAppConfiguration((hostContext, builder) => diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index 7a5b50af6..a5255b68c 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -79,7 +79,7 @@ - + From 70a728d9485f59ebccd71a203312e43a0f8fde10 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 4 Mar 2018 20:37:43 +0100 Subject: [PATCH 21/28] Nuget fix --- .../orleansdashboard.2.0.0-rc1.nupkg | Bin 163547 -> 163544 bytes .../orleansdashboard.2.0.0-rc1.nupkg.sha512 | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg b/libs/orleansdashboard/2.0.0-rc1/orleansdashboard.2.0.0-rc1.nupkg index 32d28c3ff86beb85c284125bc58aed699ab0d00f..859c6f7e58e78dc7aab43becf2a88a3036eb22c2 100644 GIT binary patch delta 160353 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 a0WqdI`GL{@zdKLs@dLwxV)Xsa2l+4S#KV;U delta 160457 zcmV)xK$E}N{R!Ls34c&a0|XQR000O8oTy_=qFDzI8vy_S{s9003jhEBUvgz^b1yD( zWo&blk;`hsFc3xeh5m!kK9=N1B9}PXbkkKKPAgcb}fpQ686_D|7yrA zX3&sEPwCiRqJLp7Hg=Dn~ z*N#2b*h@6aWAK2mqX@W3x{ISpo^1sAEh) z%Qb~Yld%Inf9^;EtyWrPtpXB*RuUo$i5v|W8xcj$IV{X#8?!9N24}Fr<^bc2jS~)F ze9q^b!x`rY&Nk;Wj(6v9w*0E9d!}cF#PfTy_%}d2PxQ9|e(k~!wqy7BUoN>{Ir-(1fANbJ$BI{)(S_#h<;8PnuUHXX zT|8%gv3c5x;>9b9hnzaDczJZ*{F<~hy@Q}JW+-DPD=yajSmA9J-H%vlaf(vQ*keA% zG>*$S0`X!@gePO^6jwRl_-8#?v7hkx=VAlS#jN;GKJ5qnJ$l&3PNhnH>}M3jaesc6 z3Skc9f2;cwGO_=FKjKvU`2ar20oSaazh*VkeMGbi+o~Q%VpfeAGv`8_c*C}1L!WR` zCS47vG3PIfLdI0VGtqkHxO{_JviT#l3;&Qem3i0&`xv`!ufi0OZZxXwyNiVq{={Ff z*2Au`09Q1^n0}}bNE=lctF&VgD^~o}@=Gp?e^o;)S_6SqCT!<~K*Xx;GIPQU*BxJ` z+|CJD5$kN1>GRi@gN`!5O0ZUC<0P+;RX>zv<&S~=>CrBnJSF9}oz$_Fq)MRgVh7q; z^bfVSnQ~dNXjdX~C}1bKTPC%$lRPbx((NRzWm1uydQEIE;va9*Nip zaq~k5B3A>%*_uQ=i->ZsM9hY``KkjE_5mW{lZXcpk?)s?sSr0Gbs!WS5c743xET?_ z6p5G)aq~$B!kY?+c&bFajEKQ$60sBFe`cVaL@b85`HBM(Y!8T7dxz8!k)7_~6yoOd z4n$S}5PJd=k(vRBof#7G2O_2hCE_m-H@|ftI%Wdm!c2*H9uXy35-|zl=0OMI7$Qc8 zB;sO-o1tup*b8xUNRC995I3K5Aes@eELS2Pgt%Fe=O_Yk^CJhMCLa(7@*NT@e*nbY z1rm{72#CiEC8A3aAYLkxh>9>OJ1h~|#ejICSR$%QP`4!xqbmi(Q>6|*$^h|VnL~sf z0P#i#i5O50h>y!9VqgUzKB$n0o*hy99UU|bmR^y&Zhi1L9DB(Z3HM zj`VTpr7s}f?(5KgKR|rdPa?+m$BsO};b9M9N8+<0Ogr0TEY@kcfXn+`MF@M7#rW zbK@w9_z>de+LI;X8Hk&UM@z)tAZ|9DA`v%2+#GSLL|hATbIcftxEtc;+(wCb8sg?f zVUOd)etww&ya|RA#U!RDG^I%0YaHA5seTxzjh!7%)xFt$KfvK z0^-5B5)qn*oX(SowE2LzZN5W53jlG)0*BjL2#Ea)B|=*Sh|3pAf5f|pSh3i_I>gQS zOB@3q#LYEJCE^o^n}1p67{!)jS6?m>9aaG1-4zlsDhh}nq7pH7B^v)Ki8vSHW0P)#r4x*>yczcFKTmx})?iz{s7~5K-@g*Y)2P^xOvYxj-g;9N^GOU zYD-a&1Q)> zdkY}uT;d=Kar3E5C1S`{K%{Mxh^-Je`(GvzS3um{aJj<@f4Ae1v|S>``~|hYLn6+E zxY>25MC^dLIeM2w+y!xS#uXBAKg7++yB!k&h?`@tl!)6PZjQQ2B6dRD9Co!tTnBM; z>NOJaIK<7B*Gj|-5I4tNClS{}+#GVfMBEN>bKo9{xDw)K)eRDH9>mSyjS?{*;^xl| z#F)K+_-U_1f6ToJ5Wn3d5mRmk#J4v~#E4q}@zyPl!Shx?JbSA|L~cXf-X;-e>_fx7 zT_Scv+?;!dV<>>QdF7psVg4@E{#_33?+3*1`z0cN01!2IOTe1ESLt5^*QQ&BiAs;sJ=8GoF%&=OAv*d|DzN zg19;B8HY(h+>AZza7qw2cRwc)InM*)_2(sG+zU8ZydV)HUj)R5FG@u3mjLm_OA^ua zG9a@4e=ZTbAZ`wS#laZF&6S5F;wy-oSG?*NUtR;my{|d^`s;xB_;rbx_XbM+O^MhD zaWm&Fi7+8<_ITSuRF>60g!dfuET&rOHfl~zle_Ih+bc6s#A~1@8)Cltt50B7Zh2+7_ zE8To4uyzOozH;q}47oWEo3~=x*5lH~o}e6Zcxc;kXymmOG;+Op2vQnyT-wN1iqQUp zi@l3m1K1W4BsQfNrfO~nL$L3p??sS{71FjQryF z!|p_W^bBDkV3At%Oe@n`I}=oyAB~GlD-pfQ%48;Iib?Y#9Qvq(JN0-f5dF12$&D?`ZsuLWIxds_9MBiOO_?1`IFP6 zJR$9}WL+c3#S3YAaycpDHp;C!LAh9)HgYkv$;;)ByI*>2cuOAxZPbty>2@Fjg9HFt z)uQzRXh5Kk0Qw@(PXPT97$5-Hg4UwLEaMn#8Ao(T3%hs^`0_dU;=*oIZ39o>e|LJf z?nIE`R?vML8x!sYSm*aTH0X~+R9{MMpF=&Du8JSOc%fm z1ZE0g76P*cFb9FT0+@%ud;u&&e_*))79g-t0E-YS*o6@));(3G~`?_WSIf~Z%56km@We>|>z4_69I@~YO1Fyi^Iq11Lfwrs>$sIyU zPR%17nDMaor1!7?gx-lgNRyQ6l38rE?KAi}Bl3y|E_&=QE!z&GoEF_Iy73kSE)f8T zT#H^NfXflsE&y<3T6Akmf4Q6obp;%CxjFGxdIVO}3K}ci3=>%8&`HOoUEX?;OWT_6 z3ZAY9o-#!NBJHGP-5|(?)JD1OCz!i#ZBuWM%z|8&cp9e1eru_> zUr`7D6$<$e0zV1hX9Rvp_QkMTV3`hjZcd;Ti6W_1&_B1mc7R^Vf3ir%zx@dr6U%L+ zQ488g`$fu1%sIgmvJli88>K+CnkxZr+0E4T;D+7h)!7y6!Iik1wNoKA2BW-Qz5!DV znB3?Us@ANXj0w=0b)zq#ii<%?1~}tLh3c#a$g*r~pXw^FF0NR=IGO$!B-5YhV~U{? z0mDU)_0Ryf0V@qVf9~PQFj>Y2%rEibqlX@0nvf|R5VIVrbN!O!>KbKpFvS=`yo;iA zmJD{oa;dBV)2E1`JBTCg3n4v^Y$3DRrE66>G|T`$5~*OSn_9RuxyrG!g-c}%+iY4Y zM=eVxG7gChCnA_)q_vQ<${K7rJ4w3@@U;=6eOn@Q8R@cpf2P%oR96BN=~msi=+zT= zLj(GO#ySBupW2R#Lmd~_x_K9FH-IdW48EtDt^h3l`zrLmsozhrSvw@QC#w;D&TqW6Mb z8xtX=D$Ad3e$ght9rfM(rlJE1hF(~b4# z*ZLS-31V;;1I2*oDD1sJm+$=)-Dyx`Fo)CCW(|C!=+W~z0^F1qgZ`@{a?3R zJq}tes67bTMD#IhBsZWl>w667V>-?)^aONhw;IO~=Z3)jk-`*U2OCfvfSVUyGK)-O zIZqTxf95J#jie0|J)L*XDCIUh&^uVpmd?bQYJin#d&;v_1MYEXdkk2W>wKV9=+aOo zTYCvB1SgDCNb^y&$y$gO21fG4*WM<69b$zTQyi4kob!Un8= zb<`)PQ-X9R2|BAKofxNM5}lY$CrET+l1@I*4ME?<|G2oyt6dclEn1UZ5*!KSakQ&W zkP1WslY$Z`e~Py%69&rUa;ZnsEtbriL33hyBjgS|RC0bMGM5@Bqb1cEP(rH^cX=wT zz9Q8A1lej;JLcjl&m>ptGCEM1A~lZJsi23r5)=W1-$M8WLbnjQK%`iR6oE*!5UB!@ zW+Bo9qMe0kClKu|goub93MuJU3Pk`Bun+-($gmI@e*zJ-5J7>+v=EsBk!2yW1R`W1 zC^Eym4||G%+nuU`yPMPlllaQEN>Bt4ITj*EAaX54u0Z5jh&+MFw-EUPQD7ko1ftMF z6beLH3pWh z8??10f8w-V#j*|PWEv*u(RF0*Wm+_WMh!)AYcCXCkF-_8lmHkzbOXKm%_AvVl~;7g z54cZJ*~tu!GQpa_cdPMIi+zd!qRc{+2}B1A(Lo@}EkwCMR9J`#f#_%vjfm)8W|if*@&Kl{J&(~%wseg~&ST2FvsxMciDNjlm}DRUznUc50fvYWK1!@yG9Zl?D{>he|VaK zSzsom8{lap26)#9-@3;>;$a)DxuL2WumaW(mDo2qVIi)chG2PhY6TJ0WB-DZ37EaP zRXRT~c9NQ40=F9{Z~*CY7cBdk2m0nUeEh{&>!$ur8B_9_MnVzAkT;yZltL= z6vTr);{ynS-hdYHM)!)6dO)x0jTkz)D~Fu&NE0D>riqX|)QrMPM`uLpe`c)17x0zS z`6cASM-xBgL+p5t#YYoA-$U$Jj>Sh4KiPve;{a2y{PD*hM^b!MUY{6ayaw1pBnU1v zkW$G87VvA~uocK)63Afr&IcZ$ix=S;q5TAug)YP&y#;kq2P$S63S3?QIYWK6RMIrR zEfQQX-u4+va|oKB zFWRgbFk6UNt0+FkX0j{q!Yx1EPMqOFj|jw;37flwY;I4I&0XrSx#bR?SmefcuigT|aWi_Mymxh?}*jC0CN?`iqjC;UY}Eotz=27%=CHtiL!p&tlAT2j#&O z1EztIH0CGO1if|OfAUyt739HQ1|1Hylz@ex8(e~~Su^eW!7WBCcQA+fxROFkxa7-) z(}VRs$-F$^izAVw4lhuSUN2-&uEkMS{7gK07daRPypV!sqJq-EG>|*Xeo?4FJ;NS{ z9y9hM-`i-_gQD|A576Lg$#EsN<8Jg{2hkt%Z3N!wxsLB(f459fa5}_JQDgTYF)XPX zf2EnldNsBhC?t9kPD~DCus@g`;rYf6Dc`%+=20X-E4ORw7?-S`0mk1AinFhW^K_F6@gwPBH)-EFtykPr=8y znnRtWk6}Wt*RYaDxnDWaUQI1;KZ@7htAYI<)`iPT8;Y;jpkqeM$l#lVxZtM6d8F2S z7aEfi>1KXP&xm=9o@M4w^vpMvckvlCQ|OsuX2CP|e#eMb!9b>M!0o%r2W{oL z6MgvhPd(rFNi@*YlYk9bH%uq{(E`AlPr__75L++ilh^V2c@3XWUQKTE8hbuj zO7qEUlID|~9!ypPv9krempHwbCA}9py%&hyi#EM7qW5A8deFrfG%66=BAj8* zcj666fA&>Q_7IVM)h644$iC_zYx4>7qCo6?LH7er_kBt5Jx=glBKV$7u$&0K*Gjv= z00Oa#1iddfz0W1R&p5qLiQZ>6y$YiDSrR=L%8>OU`-we8dn?hWsVBjvvKD;?4Lp(s zx4JrlDX6sT6@8YFu&Xj7_8dCQ*z<@5DeG)Qe{Zp#=x?nj`U}JW3o$?-23m-L0x`%! z3=)XJ7GkhK46zUt5%TRI*Ojyp3wqV7(^cbs3jl9yEhl%VW+SwNs#LRyu3Eemh6AE# zt&au?cZTcQp|<^^eSq-?Vq1mWzvFWMhTF%tBz~|#J#mbS|7#NeF`yf6SW*Tq1zC5ZEe!w-KPzHv6o^Lv`?N;CE1f z!)O@+-9b+bca9{k#7TUcVFdR%u*dAiB?fd6Ee3&}S$q_>D=COU|I!mMRJtoqfs%5y z@ggm8l5sB+t}Ec&^94YBVc!797KrU2ox2nNq4TLYGU(Fc2*sc~>o9We#F6tbe>Uz2 z4P|zDaEO7}E>Zrcr1C#G%3sk|dGN1+*ltn&XI_3dFON{{Ltg$$EdLRf|JW+8v6o=3 z)t8SMD68lw1k*nbGaexeY#6M6LP38WOz>bv8t~r$Hj^LJ zS%z*v*VNSb}MRw5ndQt8p^fF3`@KfMPINXy?O&TRrhBsRPv&XxFS=gK7mn^eFJE zfd{Wl_IYubIl6JnNvq0Y;L;FO<7oDH-iwFPxN~ucOd4EUtN%*L^KhG2@!XN`(YI&K zp;?x<$i_xH_Pso~H)Q2Af0v^iex;)saaLBt&&rHW_9`9AEVlbO$XQQ}cXn=1Vl1CB zjNyH}QA{Mp@ri{2^+w98wTksHO?D?v5ncbIHoHD>?XIi`37u*S!`|0|SxF#vgYe^U zaD#r_t=QwI3!_;H6(4Z~xC4)n14q~zKl5w741783&vh}@(Z^sqf68JvVIT9Vi8Ls~ z)OFZiYB_GBL{ecb^@rF7oi#LuB>R+YMzjj04f)$U4mIp?*VyzLJ-JmNtR9>^U zS-UyOT8e97lPL;oRM@>bQU$9iHIA|^zWzJ~4#@#+t^&PfZ^6@$@=yRysi4Jl@P+e5 zeqOScRb0oa@SJMOfBJU7TeEf>)&WA$H;fj;@*QYCDb=ICLy#p%+MZxL}Qw&%fL=0FBMDTcx8<>;&WXJpf&%|K755x`# zeP@xPVcSAaWO79ZNzs|MqPviy5jK2~4VyH@Y7#{NG1Wp$e-(&n7GhfRc>&rz*c;ki zfUSq4TO7%uyQVVpU7TL~p@y}F4xwv39P+xODG&`&#wb{WZh-OV;*i~I$Vh(pfaQ5wX>|XHs8qB@faGDQ+A;EOn z?DQTU4`beF2!*7X0|_%nVvL?nxw~*ZfZs`gX_ZTde^ZJ=&AS^%Sn#&6WW?(`z9{r| z+&|22O7UvY%MTMDX%XhP_yC`SbJBn)7tO(L6S2BYC3TyJvD@TQx4{$x=J^o=Cb1Et zx7GNyY7B(0Cr~bG4D_WZW;s^$Jyq9USh^}`pm?T1o3fRUIQrT=8gVFW)S8kzyJ(&XN;#$b-ZMv+c&7eUWX$p&>qVT9Au>hNPC{%8ljq=$L= z<2Y`EQy%ISYi<1a1~_O2&W_CyFkU!{m_C}Ye`hfbiam*~r)`5!N+>ll(M$VyWmeL0 z11EH)h?PHLXyHClFm=5GY$e=JL^I&ztDR=f1Z(3tVSw`U-JnslUFWaz`mMbn8pXwS zo!H9^vWH*c`*r=o&9P^Ii*hwFRB?9jO3)j0CY(pqz~tC~4rs@rPx5zp_+B5Kr_nb! zf8?Hpmy0H8A0x%mg*hJ>x9|>MbFbHq)gQIf) zRa@jOuHIa?rKUUdvEsa}uXfecV+_-3>LRCji_d%X+dxeb;yQl&*~v9k7;D;8GN+~z zwngp(Mp7fEnUB+Rx%nyTFniN;be{us4bzZ7?C+xApUV6FXnerLj=DeG;nNc*^X@;2y8p>`_a8vrA7KN$oLEQyX&d}M zG3^#~@mn!}*0#@ozYW_)B1yKr(rMe6TBAlrp<$o3>e^Kh_nH4}!|X8g|Gn9v-oRn7 zMy@xk&9)gqHCs>vEe>?d#> zF}MGP-2N9y`(MEAe?Hm&e*)Y7hmrj+XxsizXs5RQ+mU*>%Z7KSajzV1q}9a0jcOb4 z+OEtq!*wXlKElTfcLvM}`Ju}Rl8Rgg%yuJ^44%cnjvnsW1=KiRON0f88c`#s!Et{a zFD{B(brkiqwym_1(lNy8zlMah=LS^XCXVGFFXaN{YG;AI(`XI4EkCCo}S!9fAjbz5+x##)I^E4n`pQ3+|8}Gu@CsMCTimuRvSI!X|S1i7l`hC zU^8Ln97)7!Lne-oXm_;ybq+)iL?k!@i^lPyNE9~Sv;c z#Vc_^A;e78Qf*0MmS`bnyeGk>3yhOSO8lir zxK^>revuV`fAj1YSpm4fev!3YjpMZ?dTEru;s~2lumJ@=W)}JwJUw>|$S!*8F1J~! z9OW@R%U$cwOFoYWkEzA_(b5%D445KCqUZ9atUo_F zFZfX{Hh}VC3SK>p;2kZ>dqHyEg);92cHRqVu?Xzpe|-pi;%y0h;!OyAPUKJH)Ff9Z znyAvvAiC_Il!gsg<9H>ct+cIn8ldnRhZ@JTd1DYt$>F%EewE(~z$h={8~~1w^i$)| zLEYKmT-=d%Sla?MzLP8-?p?X#aQx&xE{mzgub?cj+IPp{n8$6vo~jo8vSqF-DHq(a za>xH-f9LuQv&EWwDg1Ck9f{S!))%XTO?FlX12(Js4+dwz?r>dSHw2Gh za5;=lb(!F;>&k(Vx|=aL8*Xsdx!~4z-C+!7f5IHHZUT(Ub#G&E0GO@o24iJiCz#XM z?Zcn}j_vDi$L~kPPQ%L&a3Ksfd(}7|Y|~pPi9IAG45Nc_+x2ajpBY22lf!CTug-R) z8N)EZV@sG;!XfM`@K1P9&dC{fTO&v+I63lzgUJt~SXEyFc52*eno4Ko87ka506UJb zf5Y>Txi}_*k9;E86=F%CMXvC0N6IJ}eLsm&+;Og2!#FGEzah;`I}8~PSWMAzC2=)W z&9=A-c#_%j*lfMr&SER*X`L^R;Oo+M$$WJ@oWvLIveq-e_#v(_k~bySZi+wgq_Zi0Xv$b>$`WD_6N7$r9X^}0z-8sz zO;LdyEU@*&t$cLGM*@Z-x0=aOBvdtyD7-u*1e%hOVhJ?Q<{~9opeeRMKTEX*f11*| zKvRT3Z%R!T=z(N`rUp_^Akf=d3iLKEP&l*HVz6JJv9V86Oq<%^HRom{?mIplk1vV4OXK})_xe>NAvWcdbd z`F7K7`375;Z&1kh-~J@|2D37R;dH_!kN(W*i(+xUg?x}Z7&v0pVofOJCX(`Gq?wnIXH3CJ zZbq&#RWvWfZeDKU8E5lyp?Q<3dH3OWmgATh%vIOnvpK6NS<1Nvf9#y;iNA6w<0Eko zm-1g7Qobiy%J~`jwvP`LOO|q>F&m|PKbJB-68CW_-|vv}eaTV|XM}Ajx3k#@CrdeO zOZf$lE#+|QQVt6#Z}uE7<#Jof+@Wl@MO_>y7T#nndXoo;)d!?E!FfHiFvpLiSF}_C zW^C5t%83Tjl8h2QkV4bj+f6S?9!X2=k@OX}J(8BRF_M<>f06Vdt^s@`9^@K$$f1D; zlQmG9QEF=--DaaSSp%iE22OI@8YpdD1EoR(y8CzyG)OzY$rgTDpsY1Jzo~_tKipEt z4|6+*n;BYc4oZ0%NqH{PEYB!6=3%5mMh9cQXkNf>UWdeU&gON1=1r&OEygdz$1yS3 zL0yN>=B!!Ce^TyX!1`HFJi?`nkHp`&lpk?O`ESWmuE?mcrJP~2QIRa=3R}vbsJ4_V zT9S4A|z?gGPp7ED=o)+D$hS&pVrLe?Ze`Qq#Xg_TrcrG}LwYY|fgO ztO3JViW+#FYXBdK$G8R_cWB_TWDQhiRN5NIwArXk)oSnX1aDvYE2m7pO{Rs>)^x-xCr{RkhAkm0)TMqZ*6}S?t!tXv?ua{++T$mHntP5vh#04K#vvQhHzlb1gIps466it!3*!% z>+#~Xu^i3l?<5~Pvl>T4hT5D3SrnhKLTP;~fAs~vmHLVh*o%BC)n&{gfsI$=m;%eU zSCZxRf^!o(FX%?O5GkSn7nB|Hl6WC6YY+OFms#HNGIBB448iRkkkKKz&%TtYhqA5H z3i8dbUhY@pSki#$l9qUjcR_q4;9{Md@hVRR5|ktfMWZOk zf0bPXs+mS}s^e_(gM?FKvE40g5|Tot5qP3sTs7A|_R+&1>9(Qb=@z;x2dyHY2M z+tA5j659K%>cqyH+oU<0dm*mI58E0!f5J6_kHm+TMm%*vF}@-m-^40L{+K0l{K1{MTgrIM0XjQ}n zRUOcr)+X_mFBG7~jm*9!lSIHk! zaMAlM$>$xgyTWFY-F_{7f8+=dAHFjb$9IZCS<$nwn{N=dayAzm+RE45R(=!%@iA*J ze;(=Tzoe@lxvBhUiH*-DsU#5Fh!*|>w{UzUzUQ+^jMJA2aVKBJ7a!cwO^|o}Kdmz| zY+JK-Db9b-g@p1An1Y{Til}jX(J6bf8pk)CrWgwdhjIKcQzWxlFoQ+37P~;$#}1EF_WD!8-D~S(0Y#!Uyq!{ z@6RIE6~j`=*DHDg9QTfBCx#$hwXEq`7(R^zaL6@Yl)RbPL+iM0$rJ3jJ&j^%s2SLiCqKYV2Bc#~Ps2I1lk%jRZE0 z@i?_GvsnS(Un)={p)u*=Ndoi1^kf_M46jWvl=w|f@&@7ez8g>yms#U)i$gZ#4LT+q zEK4 z;8l?y?jq0{4t3`oH+n;c0ZHSA^PUHPM*_ybKmdqE}N~t1wRinL&x$u>`(M)6&1-yO;Cm zdkpAb+AGF2=m#@cbBI3lORsg(S9`5A{_S6cuC;HJ&}W2`QS|j-sQ50dIFMX1-jjrN zH=A$Q>xzQa>-^Km0D$Sx7Z3^9!x@rqnei_nL&^=9ZKeQjM1Nqm0QRi_d57!&Wc*o0V)Z^z%%KI90b%j zJ`&ly(-A6;z<+vJ^zjJ*DymuAj~(?cngC!5eh`trZk1y7F``Y(Kp)#L2W*M=8V8cr z_^-ax+8Up~qq>mfmB;1fgE2U}#v9S=z=^RsI6A>Lw)|dNq7ZUN%ArXZp)aQ;in!;% zmyYN?pUmjpe8I!>(5KV>ZcQf>aSG0`S$_k$@UIwUZ^qYQ{s!y98l;fco$yDB2}hL8`?IzG@s3VWS|NJfL7nd4UaUF*2-5>{a6c zn*38G{^UwrRwcNvgDGjP*C1AmmePq7QAl>I65nEejaPT@eJL0rkDFh^FvPBIbM5D0 zpgOjQ?0=$I_M=+tNBA8W;Fe9;q$`PV+1MJ}8$n74W^Y+51`jN?C;C_H zboUC)+$S|t%r(ow#Q3(VVr)>U2~Rh~1B@b>yt!BVq73KJYqY zBvHY8A?3;B$9`*UPz{_59oT*cByhGI5+XAVC| zgO_)@SjA?y_^2mGX9}w&Q9evv2L@Jaj!rEjQNSGCp?!%@+GoN)d`AstYjl@%sAF73 z{lnsp!9pczeFY8CHsGskN$V?oAsoIb-H@kUnH;c6Bdgs+pu=gUnN ze1EUZoB@NO@i*Wyc|SCH9gDW$Si4toTY#RxSFzRH7~D8ygE72DwbgQCz=vZUi$#H$ zSUV?k#5WKhIlaOK`w?PBF_ZQl?zB9Xj(Bk}g!$g$3X zuEVO5bTty+=z9Xc|Eju;r|?N%{ZOp0et#(9s~;AEA~fG9vEQ$l2g*?CeY(vs)T=7J z2uJfuT81qV8pltBAa};2*rnh|!d+>7V|$RBd<)nC=74*JsV(+w@WmVam^N-^7K(4- z;EU^3{G&PKoFcs=z3X7Z5pDtEZ9$;K>d-LjaA&G64et#$VsIM<-(Zk}*9aejAb(V; zW)X8RYsWVS6Rgem=%3@0Y56&u`M~} zx2Q7T+?vc&LCdxiA5PZlz{q9O=vE>$F1ID2!WM*bk0*rt^5%BgI9!+1!GB`bK^@;7 z?Z(ss^Oj`lMQw|YUJjBn!tcaPZqshU{uYD^Thdr9clSA?Oirh~A}z zrCl6frcIy-=+$YM>9)8Ry$}4UH9aIi(Ccz*#m`l5Aj_$9fI&MWmMnvyE@LZvaP^h0uOn2HyN@!6bZS`$Mm z4D?<`*^eXHW0-PyyP8zJ8b`&1cGLfv!GY}EtD%DY=x4Sxd>KAV8aXy&z82E(+0q!M z+S2f~E)Ab84bKVKp{xDTzgzc^U*R0&+8p>3lan~`0|%>#1Ap$GF%>T&M=|?3>yP&i{eY07rYEDc*(bUNom1Lip>kYJSKQaX@i#(&dWsN1;dmh ztNzqm=e&=${(l}O@6#<`#tf$7^pC0~MgytF8*(`>@m}N2U9VPkBwtN-6 zM$K9I?5`S(2^uBdB{EvH>-+JGAIl1?xmOapG*I|g@Tf_};O-77CfNsDET;2Vu9I&db zAqrm;Zh$RH4$-UFp1MoORU%8P%c(ufoSu6b_uS+xes60Wn=fo?rDanKESoxmZ0c94 zVx_RDmC2rae)2f>KpX4;rF=SLYVk4*AJjMp-hUPxcx?{WNDjQMbKtc(=#|U?e%?xp zzH1Fw@5up+SL#cwN~#nGtTj}riwLa}0~S7;v({K$i3$U~_t7ktlUZPxau~mB=d2#@ zWz+5sjaK)`(TZ2^Pnb#7<7jmzRlkV{nPRjulXrM{^?ts?vx2I}Fy(OX7S-cL&gci$ zXn%EBj#j*SJrPT)9!IOSRK14?#l&cZ&*rQ%ldIQ_BUnA`A>f2iYc2G>bZ@=L4bcyqQG zZ}6NYj$dMnk8|DuJ%dEZLzxB73k8gyWPhWn7vHDB?fIl#B7Wm*HQyy#Bev=Bu!gSB z#jR~tOo8!!P4XViYR3+dwarSTh(hu?(NXzG@sSiR8ovlG=qKH;hqj5*3YQzlE*5IqkkPk?1Emk zU3B(spV}@OyFUN(nh=W{uk_H^Mc#v@8tc~aU}+v3kiV~@h<)Svw427>EQ!|Uv1twa zDoWXFoj>fXu|lA%v4kgDTfrVFc|8Y8g$|Zhvd8K_EUsbqczzCt*gds~|F-l<801!t z`L8KJ>HP!bsWFd%@f-S}1b>d@V7zZ7hT%d?ot2N_GRk>M&cV_UThbG$E%yvc)!0WA zeo%^XyP@c(2A$nobWJavtu4cL^@VonESut|gs{}Fl>Zk9L+rv-#60C4l-ggp2RFA_ z2f|0o5Wmg)Vnq#W>iBcGhFxx8m|KeBU($PJ)hT{uXKYR6Jr0Zemy6T?XE}s)X?WOI|be!LdjnVIf3UathakR zY~z!C5&sC_L+o%$ZI=)`R)MJxdY`Y;*grd=ByR`KHFhPTb3Hr7_^`N=jfSwE zZS4ACaX)sb3u0D6JjBiejn}ZZyP{^xx}qHptibS_Yz#jsL&`?zMW}0b3C3rW&CeuD zo(LM(*bdNsSAUioncbl)`@C{C$mF{&$n#%HP_`p0Is=_|pf_c(CD0;`y_Saf>xhD) zq2xz)$MEqk(b`c;7L4v1>*~Q8pCes#ft(?BFUTRp3Om2jqbuuFf4CfKEIC}B$8P9? za>(z9oEQ{V68~pVxW5-t_=#jbf@-`7LiBMr(6`yhmw$t!|DfvntVSE!QgwR@Lim4B zq_eRC@)LAJghOcr6^gU~LES`J7D3AeluOW20Tr^d0rEm?5W@ZXbe5SnG83VWOo6md z41`>)6G4rc9IA%&bhf<`As_6QDaF7`Uxd=xNtE_pEkfC>iJ&jLBUDPGKsu}KgOI`2 z5ww$XR)4Zhlyg%BLe=b4y=71xO&6$(ySuwP!QF$q%SM8`yKI663-0dj?izwaa3`DK zx^aiY``x;y>QwbSJ*{iawEUP_z2;j;S8Ci;jZRk+DGWfq=hlJ`i(PDwYB76DK0$)# z*7`wXMzdm5?H;GJ@n;5atcYx_h+gQN&AsUU=0=oM`9(ZzG(V{W}CkL}?BRj{ceA$#i*as&@hk?srpy&R150;17Sg5@k%= zr4*~^mb{c@!xE5Xi3hJi397Eqz}>F_QpsW*U3tM%_=T9S{N3crw$|TUd57$P!V*5< zc?9njI!x{yU;)=EPKYRl4RrQJfg4)3ysZz@<`{1?Eer^xNZlRAN?q}@pwFX$y!3$jMP(+prI45j^iHJzxzL=VoC5 zh}OvnfzUsj5&_f8*o(RA4^Vo@l8Oj|BfOYlvhs0fK!BI1#3T7{-X_&GnV{fl!6jfs8U@2R<*>6{J$0=2L_!dO2+;m&Np|&Aq?Pxo$DgcJ*iO;*k3)OniCk7+Po;VdW!n zEUKN6z!h1wMz{Q8qta`N(p*j?!VnQhne!syuXA)B5_YP=8fup=#Y4sS zOLO^U0&Tf=h#+coT= zk8cr>Ag)#bg~LiaeONDJtH2zDnYo`BLL>|aFre>E9Kl49914`-MbJ+l$RD#2spRh&69XDm zz(5+cjwbe?(EG}t_7tM@e2^gbt(ozQanZ>h?rvoFC1bP<@;Cs^Qne%DwzE;zbZKqF z(qi;!MO|dnd+527JnnY@P z>17uo%y;jypTbcrOJtPt+^2~amfMw}b*erj<~fv>x2%S6( z@jjqHS);}g)E#ow-*G~DDDZ^3Mr3G)66sTMZ&A=WC;~T>U@ci)sko(Spd2U$wB#R= zYUQHvtoBC>yR=89%sCoHhs1wgSudTb-hu%YK_-dZAZaRa-{4Gb($ByLu9_cwOlu*jeVl8X7la)eZe6 zeErm@8|mYZI*e+0e$JtatPy|&ObJ|K{>T2rap6Fn?pVPKf6+?n2~T;p%Np$RLp73P zIv&J~Q@67` zQ$Zq5>02*lP!jTR9nrTS@VzXOC`$cJK8#uDPi}M#f&vX?#$rm*d^7%0AP?Hmy8(8e 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