// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Threading.Tasks; using FakeItEasy; using Orleans; using Squidex.Domain.Apps.Entities.Contents.Queries; using Squidex.Domain.Apps.Entities.TestHelpers; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; using Xunit; namespace Squidex.Domain.Apps.Entities.Contents.DomainObject { public sealed class ContentCommandMiddlewareTests : HandlerTestBase { private readonly IContentEnricher contentEnricher = A.Fake(); private readonly IContextProvider contextProvider = A.Fake(); private readonly DomainId contentId = DomainId.NewGuid(); private readonly Context requestContext; private readonly ContentCommandMiddleware sut; public sealed class MyCommand : SquidexCommand { } protected override DomainId Id { get { return contentId; } } public ContentCommandMiddlewareTests() { requestContext = Context.Anonymous(Mocks.App(AppNamedId)); A.CallTo(() => contextProvider.Context) .Returns(requestContext); sut = new ContentCommandMiddleware(A.Fake(), contentEnricher, contextProvider); } [Fact] public async Task Should_not_invoke_enricher_for_other_result() { var command = CreateCommand(new MyCommand()); var context = CreateContextForCommand(command); context.Complete(12); await sut.HandleAsync(context); A.CallTo(() => contentEnricher.EnrichAsync(A._, A._, requestContext)) .MustNotHaveHappened(); } [Fact] public async Task Should_not_invoke_enricher_if_already_enriched() { var result = new ContentEntity(); var command = CreateCommand(new MyCommand()); var context = CreateContextForCommand(command); context.Complete(result); await sut.HandleAsync(context); Assert.Same(result, context.Result()); A.CallTo(() => contentEnricher.EnrichAsync(A._, A._, requestContext)) .MustNotHaveHappened(); } [Fact] public async Task Should_enrich_content_result() { var result = A.Fake(); var command = CreateCommand(new MyCommand()); var context = CreateContextForCommand(command); context.Complete(result); var enriched = new ContentEntity(); A.CallTo(() => contentEnricher.EnrichAsync(result, true, requestContext)) .Returns(enriched); await sut.HandleAsync(context); Assert.Same(enriched, context.Result()); } } }