From 34a967e32a0851a8a10358fa157dfa5e0b31b3ae Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Fri, 28 Jun 2019 17:10:58 +0200 Subject: [PATCH] Bugfix. --- .../Contents/ContentCommandMiddleware.cs | 9 +++++++-- .../Contents/ContentEnricher.cs | 13 +++++++------ .../Contents/ContentQueryService.cs | 2 +- .../Contents/IContentEnricher.cs | 5 +++-- .../Api/Controllers/Contents/ContentsController.cs | 8 ++++---- .../Contents/ContentCommandMiddlewareTests.cs | 6 +++--- .../Contents/ContentEnricherTests.cs | 12 +++++++----- .../Contents/ContentQueryServiceTests.cs | 2 +- 8 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs index d72e3eee1..63bc61a96 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs @@ -30,12 +30,17 @@ namespace Squidex.Domain.Apps.Entities.Contents { await base.HandleAsync(context, next); - if (context.PlainResult is IContentEntity content && !(context.PlainResult is IEnrichedContentEntity)) + if (context.Command is SquidexCommand command && context.PlainResult is IContentEntity content && NotEnriched(context)) { - var enriched = await contentEnricher.EnrichAsync(content); + var enriched = await contentEnricher.EnrichAsync(content, command.User); context.Complete(enriched); } } + + private static bool NotEnriched(CommandContext context) + { + return !(context.PlainResult is IEnrichedContentEntity); + } } } diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs index 6f97880e7..32d93b04d 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs @@ -32,18 +32,19 @@ namespace Squidex.Domain.Apps.Entities.Contents this.contextProvider = contextProvider; } - public async Task EnrichAsync(IContentEntity content) + public async Task EnrichAsync(IContentEntity content, ClaimsPrincipal user) { Guard.NotNull(content, nameof(content)); - var enriched = await EnrichAsync(Enumerable.Repeat(content, 1)); + var enriched = await EnrichAsync(Enumerable.Repeat(content, 1), user); return enriched[0]; } - public async Task> EnrichAsync(IEnumerable contents) + public async Task> EnrichAsync(IEnumerable contents, ClaimsPrincipal user) { Guard.NotNull(contents, nameof(contents)); + Guard.NotNull(user, nameof(user)); using (Profiler.TraceMethod()) { @@ -59,7 +60,7 @@ namespace Squidex.Domain.Apps.Entities.Contents if (ShouldEnrichWithStatuses()) { - await ResolveNextsAsync(content, result); + await ResolveNextsAsync(content, result, user); await ResolveCanUpdateAsync(content, result); } @@ -80,9 +81,9 @@ namespace Squidex.Domain.Apps.Entities.Contents result.CanUpdate = await contentWorkflow.CanUpdateAsync(content); } - private async Task ResolveNextsAsync(IContentEntity content, ContentEntity result) + private async Task ResolveNextsAsync(IContentEntity content, ContentEntity result, ClaimsPrincipal user) { - result.Nexts = await contentWorkflow.GetNextsAsync(content, ClaimsPrincipal.Current); + result.Nexts = await contentWorkflow.GetNextsAsync(content, user); } private async Task ResolveColorAsync(IContentEntity content, ContentEntity result, Dictionary<(Guid, Status), StatusInfo> cache) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs index 0a50552c5..306b49309 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs @@ -189,7 +189,7 @@ namespace Squidex.Domain.Apps.Entities.Contents var scriptText = schema.SchemaDef.Scripts.Query; var scripting = !string.IsNullOrWhiteSpace(scriptText); - var enriched = await contentEnricher.EnrichAsync(contents); + var enriched = await contentEnricher.EnrichAsync(contents, context.User); foreach (var content in enriched) { diff --git a/src/Squidex.Domain.Apps.Entities/Contents/IContentEnricher.cs b/src/Squidex.Domain.Apps.Entities/Contents/IContentEnricher.cs index 1b7334134..e73e49c16 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/IContentEnricher.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/IContentEnricher.cs @@ -6,14 +6,15 @@ // ========================================================================== using System.Collections.Generic; +using System.Security.Claims; using System.Threading.Tasks; namespace Squidex.Domain.Apps.Entities.Contents { public interface IContentEnricher { - Task EnrichAsync(IContentEntity content); + Task EnrichAsync(IContentEntity content, ClaimsPrincipal user); - Task> EnrichAsync(IEnumerable contents); + Task> EnrichAsync(IEnumerable contents, ClaimsPrincipal user); } } diff --git a/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs index 97fca4721..4ff83533c 100644 --- a/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs +++ b/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs @@ -133,7 +133,7 @@ namespace Squidex.Areas.Api.Controllers.Contents Response.Headers["Surrogate-Key"] = response.ToSurrogateKeys(); } - Response.Headers[HeaderNames.ETag] = response.ToEtag(); + Response.Headers[HeaderNames.ETag] = $"{response.ToEtag()}_{App.Version}"; return Ok(response); } @@ -169,7 +169,7 @@ namespace Squidex.Areas.Api.Controllers.Contents Response.Headers["Surrogate-Key"] = response.ToSurrogateKeys(); } - Response.Headers[HeaderNames.ETag] = response.ToEtag(); + Response.Headers[HeaderNames.ETag] = $"{response.ToEtag()}_{App.Version}"; return Ok(response); } @@ -203,7 +203,7 @@ namespace Squidex.Areas.Api.Controllers.Contents Response.Headers["Surrogate-Key"] = content.Id.ToString(); } - Response.Headers[HeaderNames.ETag] = content.Version.ToString(); + Response.Headers[HeaderNames.ETag] = $"{response.ToEtag()}_{App.Version}"; return Ok(response); } @@ -238,7 +238,7 @@ namespace Squidex.Areas.Api.Controllers.Contents Response.Headers["Surrogate-Key"] = content.Id.ToString(); } - Response.Headers[HeaderNames.ETag] = content.Version.ToString(); + Response.Headers[HeaderNames.ETag] = $"{response.ToEtag()}_{App.Version}"; return Ok(response.Data); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs index 91ed5025a..21d46e431 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs @@ -46,7 +46,7 @@ namespace Squidex.Domain.Apps.Entities.Contents await sut.HandleAsync(context); - A.CallTo(() => contentEnricher.EnrichAsync(A.Ignored)) + A.CallTo(() => contentEnricher.EnrichAsync(A.Ignored, User)) .MustNotHaveHappened(); } @@ -64,7 +64,7 @@ namespace Squidex.Domain.Apps.Entities.Contents Assert.Same(result, context.Result()); - A.CallTo(() => contentEnricher.EnrichAsync(A.Ignored)) + A.CallTo(() => contentEnricher.EnrichAsync(A.Ignored, User)) .MustNotHaveHappened(); } @@ -80,7 +80,7 @@ namespace Squidex.Domain.Apps.Entities.Contents var enriched = new ContentEntity(); - A.CallTo(() => contentEnricher.EnrichAsync(result)) + A.CallTo(() => contentEnricher.EnrichAsync(result, User)) .Returns(enriched); await sut.HandleAsync(context); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentEnricherTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentEnricherTests.cs index 3aa4f0f81..83f406dd9 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentEnricherTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentEnricherTests.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using System.Security.Claims; using System.Threading.Tasks; using FakeItEasy; using Squidex.Domain.Apps.Core.Contents; @@ -18,6 +19,7 @@ namespace Squidex.Domain.Apps.Entities.Contents { private readonly IContentWorkflow contentWorkflow = A.Fake(); private readonly IContextProvider contextProvider = A.Fake(); + private readonly ClaimsPrincipal user = new ClaimsPrincipal(); private readonly Context context = new Context(); private readonly NamedId schemaId = NamedId.Of(Guid.NewGuid(), "my-schema"); private readonly ContentEnricher sut; @@ -38,7 +40,7 @@ namespace Squidex.Domain.Apps.Entities.Contents A.CallTo(() => contentWorkflow.GetInfoAsync(source)) .Returns(new StatusInfo(Status.Published, StatusColors.Published)); - var result = await sut.EnrichAsync(source); + var result = await sut.EnrichAsync(source, user); Assert.Equal(StatusColors.Published, result.StatusColor); } @@ -51,7 +53,7 @@ namespace Squidex.Domain.Apps.Entities.Contents A.CallTo(() => contentWorkflow.GetInfoAsync(source)) .Returns(Task.FromResult(null)); - var result = await sut.EnrichAsync(source); + var result = await sut.EnrichAsync(source, user); Assert.Equal(StatusColors.Draft, result.StatusColor); } @@ -66,7 +68,7 @@ namespace Squidex.Domain.Apps.Entities.Contents A.CallTo(() => contentWorkflow.CanUpdateAsync(source)) .Returns(true); - var result = await sut.EnrichAsync(source); + var result = await sut.EnrichAsync(source, user); Assert.True(result.CanUpdate); } @@ -78,7 +80,7 @@ namespace Squidex.Domain.Apps.Entities.Contents var source = new ContentEntity { SchemaId = schemaId }; - var result = await sut.EnrichAsync(source); + var result = await sut.EnrichAsync(source, user); Assert.False(result.CanUpdate); @@ -95,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents A.CallTo(() => contentWorkflow.GetInfoAsync(source1)) .Returns(new StatusInfo(Status.Published, StatusColors.Published)); - var result = await sut.EnrichAsync(new[] { source1, source2 }); + var result = await sut.EnrichAsync(new[] { source1, source2 }, user); Assert.Equal(StatusColors.Published, result[0].StatusColor); Assert.Equal(StatusColors.Published, result[1].StatusColor); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs index 9f6e78aff..00a7d83f5 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs @@ -527,7 +527,7 @@ namespace Squidex.Domain.Apps.Entities.Contents private void SetupEnricher() { - A.CallTo(() => contentEnricher.EnrichAsync(A>.Ignored)) + A.CallTo(() => contentEnricher.EnrichAsync(A>.Ignored, user)) .ReturnsLazily(x => { var input = (IEnumerable)x.Arguments[0];