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);
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);
}
}
}

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

@ -32,18 +32,19 @@ namespace Squidex.Domain.Apps.Entities.Contents
this.contextProvider = contextProvider;
}
public async Task<IEnrichedContentEntity> EnrichAsync(IContentEntity content)
public async Task<IEnrichedContentEntity> 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<IReadOnlyList<IEnrichedContentEntity>> EnrichAsync(IEnumerable<IContentEntity> contents)
public async Task<IReadOnlyList<IEnrichedContentEntity>> EnrichAsync(IEnumerable<IContentEntity> contents, ClaimsPrincipal user)
{
Guard.NotNull(contents, nameof(contents));
Guard.NotNull(user, nameof(user));
using (Profiler.TraceMethod<ContentEnricher>())
{
@ -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)

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

5
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<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[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);
}

6
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<IEnrichedContentEntity>.Ignored))
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.Ignored, User))
.MustNotHaveHappened();
}
@ -64,7 +64,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
Assert.Same(result, context.Result<IEnrichedContentEntity>());
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.Ignored))
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnrichedContentEntity>.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);

12
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<IContentWorkflow>();
private readonly IContextProvider contextProvider = A.Fake<IContextProvider>();
private readonly ClaimsPrincipal user = new ClaimsPrincipal();
private readonly Context context = new Context();
private readonly NamedId<Guid> 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<StatusInfo>(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);

2
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<IEnumerable<IContentEntity>>.Ignored))
A.CallTo(() => contentEnricher.EnrichAsync(A<IEnumerable<IContentEntity>>.Ignored, user))
.ReturnsLazily(x =>
{
var input = (IEnumerable<IContentEntity>)x.Arguments[0];

Loading…
Cancel
Save