Browse Source

Unpublished content for single content.

pull/313/head
Sebastian Stehle 8 years ago
parent
commit
2ab0125651
  1. 28
      src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs
  2. 12
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs

28
src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs

@ -72,12 +72,12 @@ namespace Squidex.Domain.Apps.Entities.Contents
{ {
var isVersioned = version > EtagVersion.Empty; var isVersioned = version > EtagVersion.Empty;
var parsedStatus = context.Base.IsFrontendClient ? StatusAll : StatusPublished; var status = GetFindStatus(context.Base);
var content = var content =
isVersioned ? isVersioned ?
await FindContentByVersionAsync(id, version) : await FindContentByVersionAsync(id, version) :
await FindContentAsync(context.Base, id, parsedStatus, schema); await FindContentAsync(context.Base, id, status, schema);
if (content == null || (content.Status != Status.Published && !context.Base.IsFrontendClient) || content.SchemaId.Id != schema.Id) if (content == null || (content.Status != Status.Published && !context.Base.IsFrontendClient) || content.SchemaId.Id != schema.Id)
{ {
@ -96,20 +96,20 @@ namespace Squidex.Domain.Apps.Entities.Contents
using (Profiler.TraceMethod<ContentQueryService>()) using (Profiler.TraceMethod<ContentQueryService>())
{ {
var parsedStatus = ParseStatus(context.Base); var status = GetQueryStatus(context.Base);
IResultList<IContentEntity> contents; IResultList<IContentEntity> contents;
if (query.Ids?.Count > 0) if (query.Ids?.Count > 0)
{ {
contents = await contentRepository.QueryAsync(context.Base.App, schema, parsedStatus, new HashSet<Guid>(query.Ids)); contents = await contentRepository.QueryAsync(context.Base.App, schema, status, new HashSet<Guid>(query.Ids));
contents = Sort(contents, query.Ids); contents = Sort(contents, query.Ids);
} }
else else
{ {
var parsedQuery = ParseQuery(context.Base, query.ODataQuery, schema); var parsedQuery = ParseQuery(context.Base, query.ODataQuery, schema);
contents = await contentRepository.QueryAsync(context.Base.App, schema, parsedStatus, parsedQuery); contents = await contentRepository.QueryAsync(context.Base.App, schema, status, parsedQuery);
} }
return Transform(context.Base, schema, true, contents); return Transform(context.Base, schema, true, contents);
@ -236,7 +236,23 @@ namespace Squidex.Domain.Apps.Entities.Contents
return schema; return schema;
} }
private static Status[] ParseStatus(QueryContext context) private static Status[] GetFindStatus(QueryContext context)
{
if (context.IsFrontendClient)
{
return StatusAll;
}
else if (context.Unpublished)
{
return StatusDraftOrPublished;
}
else
{
return StatusPublished;
}
}
private static Status[] GetQueryStatus(QueryContext context)
{ {
if (context.IsFrontendClient) if (context.IsFrontendClient)
{ {

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

@ -105,13 +105,15 @@ namespace Squidex.Domain.Apps.Entities.Contents
public static IEnumerable<object[]> SingleRequestData = new[] public static IEnumerable<object[]> SingleRequestData = new[]
{ {
new object[] { true, new[] { Status.Archived, Status.Draft, Status.Published } }, new object[] { true, true, new[] { Status.Archived, Status.Draft, Status.Published } },
new object[] { false, new[] { Status.Published } } new object[] { true, false, new[] { Status.Archived, Status.Draft, Status.Published } },
new object[] { false, true, new[] { Status.Draft, Status.Published } },
new object[] { false, false, new[] { Status.Published } }
}; };
[Theory] [Theory]
[MemberData(nameof(SingleRequestData))] [MemberData(nameof(SingleRequestData))]
public async Task Should_return_content_from_repository_and_transform(bool isFrontend, params Status[] status) public async Task Should_return_content_from_repository_and_transform(bool isFrontend, bool unpublished, params Status[] status)
{ {
var contentId = Guid.NewGuid(); var contentId = Guid.NewGuid();
var content = CreateContent(contentId); var content = CreateContent(contentId);
@ -124,7 +126,9 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentRepository.FindContentAsync(app, schema, A<Status[]>.That.IsSameSequenceAs(status), contentId)) A.CallTo(() => contentRepository.FindContentAsync(app, schema, A<Status[]>.That.IsSameSequenceAs(status), contentId))
.Returns(content); .Returns(content);
var result = await sut.FindContentAsync(context.WithSchemaId(schemaId), contentId); var ctx = context.WithSchemaId(schemaId).WithUnpublished(unpublished);
var result = await sut.FindContentAsync(ctx, contentId);
Assert.Equal(contentTransformed, result.Data); Assert.Equal(contentTransformed, result.Data);
Assert.Equal(content.Id, result.Id); Assert.Equal(content.Id, result.Id);

Loading…
Cancel
Save