Browse Source

Bugfix.

pull/380/head
Sebastian Stehle 7 years ago
parent
commit
34a967e32a
  1. 9
      src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs
  2. 13
      src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs
  3. 2
      src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs
  4. 5
      src/Squidex.Domain.Apps.Entities/Contents/IContentEnricher.cs
  5. 8
      src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  6. 6
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs
  7. 12
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentEnricherTests.cs
  8. 2
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs

9
src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs

@ -30,12 +30,17 @@ namespace Squidex.Domain.Apps.Entities.Contents
{ {
await base.HandleAsync(context, next); 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); context.Complete(enriched);
} }
} }
private static bool NotEnriched(CommandContext context)
{
return !(context.PlainResult is IEnrichedContentEntity);
}
} }
} }

13
src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs

@ -32,18 +32,19 @@ namespace Squidex.Domain.Apps.Entities.Contents
this.contextProvider = contextProvider; this.contextProvider = contextProvider;
} }
public async Task<IEnrichedContentEntity> EnrichAsync(IContentEntity content) public async Task<IEnrichedContentEntity> EnrichAsync(IContentEntity content, ClaimsPrincipal user)
{ {
Guard.NotNull(content, nameof(content)); 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]; return enriched[0];
} }
public async Task<IReadOnlyList<IEnrichedContentEntity>> EnrichAsync(IEnumerable<IContentEntity> contents) public async Task<IReadOnlyList<IEnrichedContentEntity>> EnrichAsync(IEnumerable<IContentEntity> contents, ClaimsPrincipal user)
{ {
Guard.NotNull(contents, nameof(contents)); Guard.NotNull(contents, nameof(contents));
Guard.NotNull(user, nameof(user));
using (Profiler.TraceMethod<ContentEnricher>()) using (Profiler.TraceMethod<ContentEnricher>())
{ {
@ -59,7 +60,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
if (ShouldEnrichWithStatuses()) if (ShouldEnrichWithStatuses())
{ {
await ResolveNextsAsync(content, result); await ResolveNextsAsync(content, result, user);
await ResolveCanUpdateAsync(content, result); await ResolveCanUpdateAsync(content, result);
} }
@ -80,9 +81,9 @@ namespace Squidex.Domain.Apps.Entities.Contents
result.CanUpdate = await contentWorkflow.CanUpdateAsync(content); 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) private async Task ResolveColorAsync(IContentEntity content, ContentEntity result, Dictionary<(Guid, Status), StatusInfo> cache)

2
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 scriptText = schema.SchemaDef.Scripts.Query;
var scripting = !string.IsNullOrWhiteSpace(scriptText); var scripting = !string.IsNullOrWhiteSpace(scriptText);
var enriched = await contentEnricher.EnrichAsync(contents); var enriched = await contentEnricher.EnrichAsync(contents, context.User);
foreach (var content in enriched) foreach (var content in enriched)
{ {

5
src/Squidex.Domain.Apps.Entities/Contents/IContentEnricher.cs

@ -6,14 +6,15 @@
// ========================================================================== // ==========================================================================
using System.Collections.Generic; using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Squidex.Domain.Apps.Entities.Contents namespace Squidex.Domain.Apps.Entities.Contents
{ {
public interface IContentEnricher public interface IContentEnricher
{ {
Task<IEnrichedContentEntity> EnrichAsync(IContentEntity content); Task<IEnrichedContentEntity> EnrichAsync(IContentEntity content, ClaimsPrincipal user);
Task<IReadOnlyList<IEnrichedContentEntity>> EnrichAsync(IEnumerable<IContentEntity> contents); Task<IReadOnlyList<IEnrichedContentEntity>> EnrichAsync(IEnumerable<IContentEntity> contents, ClaimsPrincipal user);
} }
} }

8
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["Surrogate-Key"] = response.ToSurrogateKeys();
} }
Response.Headers[HeaderNames.ETag] = response.ToEtag(); Response.Headers[HeaderNames.ETag] = $"{response.ToEtag()}_{App.Version}";
return Ok(response); return Ok(response);
} }
@ -169,7 +169,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
Response.Headers["Surrogate-Key"] = response.ToSurrogateKeys(); Response.Headers["Surrogate-Key"] = response.ToSurrogateKeys();
} }
Response.Headers[HeaderNames.ETag] = response.ToEtag(); Response.Headers[HeaderNames.ETag] = $"{response.ToEtag()}_{App.Version}";
return Ok(response); return Ok(response);
} }
@ -203,7 +203,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
Response.Headers["Surrogate-Key"] = content.Id.ToString(); 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); return Ok(response);
} }
@ -238,7 +238,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
Response.Headers["Surrogate-Key"] = content.Id.ToString(); 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); return Ok(response.Data);
} }

6
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentCommandMiddlewareTests.cs

@ -46,7 +46,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
await sut.HandleAsync(context); await sut.HandleAsync(context);
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.Ignored)) A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.Ignored, User))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -64,7 +64,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
Assert.Same(result, context.Result<IEnrichedContentEntity>()); Assert.Same(result, context.Result<IEnrichedContentEntity>());
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.Ignored)) A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.Ignored, User))
.MustNotHaveHappened(); .MustNotHaveHappened();
} }
@ -80,7 +80,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
var enriched = new ContentEntity(); var enriched = new ContentEntity();
A.CallTo(() => contentEnricher.EnrichAsync(result)) A.CallTo(() => contentEnricher.EnrichAsync(result, User))
.Returns(enriched); .Returns(enriched);
await sut.HandleAsync(context); await sut.HandleAsync(context);

12
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentEnricherTests.cs

@ -6,6 +6,7 @@
// ========================================================================== // ==========================================================================
using System; using System;
using System.Security.Claims;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy; using FakeItEasy;
using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Contents;
@ -18,6 +19,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
{ {
private readonly IContentWorkflow contentWorkflow = A.Fake<IContentWorkflow>(); private readonly IContentWorkflow contentWorkflow = A.Fake<IContentWorkflow>();
private readonly IContextProvider contextProvider = A.Fake<IContextProvider>(); private readonly IContextProvider contextProvider = A.Fake<IContextProvider>();
private readonly ClaimsPrincipal user = new ClaimsPrincipal();
private readonly Context context = new Context(); private readonly Context context = new Context();
private readonly NamedId<Guid> schemaId = NamedId.Of(Guid.NewGuid(), "my-schema"); private readonly NamedId<Guid> schemaId = NamedId.Of(Guid.NewGuid(), "my-schema");
private readonly ContentEnricher sut; private readonly ContentEnricher sut;
@ -38,7 +40,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentWorkflow.GetInfoAsync(source)) A.CallTo(() => contentWorkflow.GetInfoAsync(source))
.Returns(new StatusInfo(Status.Published, StatusColors.Published)); .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); Assert.Equal(StatusColors.Published, result.StatusColor);
} }
@ -51,7 +53,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentWorkflow.GetInfoAsync(source)) A.CallTo(() => contentWorkflow.GetInfoAsync(source))
.Returns(Task.FromResult<StatusInfo>(null)); .Returns(Task.FromResult<StatusInfo>(null));
var result = await sut.EnrichAsync(source); var result = await sut.EnrichAsync(source, user);
Assert.Equal(StatusColors.Draft, result.StatusColor); Assert.Equal(StatusColors.Draft, result.StatusColor);
} }
@ -66,7 +68,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentWorkflow.CanUpdateAsync(source)) A.CallTo(() => contentWorkflow.CanUpdateAsync(source))
.Returns(true); .Returns(true);
var result = await sut.EnrichAsync(source); var result = await sut.EnrichAsync(source, user);
Assert.True(result.CanUpdate); Assert.True(result.CanUpdate);
} }
@ -78,7 +80,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
var source = new ContentEntity { SchemaId = schemaId }; var source = new ContentEntity { SchemaId = schemaId };
var result = await sut.EnrichAsync(source); var result = await sut.EnrichAsync(source, user);
Assert.False(result.CanUpdate); Assert.False(result.CanUpdate);
@ -95,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentWorkflow.GetInfoAsync(source1)) A.CallTo(() => contentWorkflow.GetInfoAsync(source1))
.Returns(new StatusInfo(Status.Published, StatusColors.Published)); .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[0].StatusColor);
Assert.Equal(StatusColors.Published, result[1].StatusColor); Assert.Equal(StatusColors.Published, result[1].StatusColor);

2
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs

@ -527,7 +527,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
private void SetupEnricher() private void SetupEnricher()
{ {
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnumerable<IContentEntity>>.Ignored)) A.CallTo(() => contentEnricher.EnrichAsync(A<IEnumerable<IContentEntity>>.Ignored, user))
.ReturnsLazily(x => .ReturnsLazily(x =>
{ {
var input = (IEnumerable<IContentEntity>)x.Arguments[0]; var input = (IEnumerable<IContentEntity>)x.Arguments[0];

Loading…
Cancel
Save