Browse Source

Unpublished flag.

pull/313/head
Sebastian Stehle 7 years ago
parent
commit
b3346bb864
  1. 2
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AzureQueueActionHandler.cs
  2. 2
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/ElasticSearchActionHandler.cs
  3. 2
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs
  4. 2
      src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs
  5. 2
      src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateBlogCommandMiddleware.cs
  6. 2
      src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateProfileCommandMiddleware.cs
  7. 5
      src/Squidex.Domain.Apps.Entities/Contents/ContentQueryContext.cs
  8. 17
      src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs
  9. 7
      src/Squidex.Domain.Apps.Entities/QueryContext.cs
  10. 5
      src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  11. 2
      src/Squidex/Areas/Api/Controllers/Schemas/Models/SchemaDetailsDto.cs
  12. 2
      tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/ContentValidationTests.cs
  13. 40
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs

2
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AzureQueueActionHandler.cs

@ -71,7 +71,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
{ {
QueueConnectionString = action.ConnectionString, QueueConnectionString = action.ConnectionString,
QueueName = queueName, QueueName = queueName,
MessageBodyV2 = body, MessageBodyV2 = body
}; };
return (ruleDescription, ruleJob); return (ruleDescription, ruleJob);

2
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/ElasticSearchActionHandler.cs

@ -74,7 +74,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
Password = action.Password, Password = action.Password,
ContentId = contentId, ContentId = contentId,
IndexName = formatter.Format(action.IndexName, @event), IndexName = formatter.Format(action.IndexName, @event),
IndexType = formatter.Format(action.IndexType, @event), IndexType = formatter.Format(action.IndexType, @event)
}; };
if (contentEvent.Type == EnrichedContentEventType.Deleted || if (contentEvent.Type == EnrichedContentEventType.Deleted ||

2
src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs

@ -67,7 +67,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules.Actions
var ruleJob = new SlackJob var ruleJob = new SlackJob
{ {
RequestUrl = action.WebhookUrl.ToString(), RequestUrl = action.WebhookUrl.ToString(),
RequestBodyV2 = body.ToString(Formatting.Indented), RequestBodyV2 = body.ToString(Formatting.Indented)
}; };
return (Description, ruleJob); return (Description, ruleJob);

2
src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Visitors/FindExtensions.cs

@ -102,7 +102,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Visitors
{ {
var filters = new List<FilterDefinition<MongoContentEntity>> var filters = new List<FilterDefinition<MongoContentEntity>>
{ {
Filter.Eq(x => x.IndexedSchemaId, schemaId), Filter.Eq(x => x.IndexedSchemaId, schemaId)
}; };
if (status != null) if (status != null)

2
src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateBlogCommandMiddleware.cs

@ -79,7 +79,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Templates
.AddField("text", .AddField("text",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", "Just created a blog with Squidex. I love it!")), .AddValue("iv", "Just created a blog with Squidex. I love it!")),
Publish = true, Publish = true
}); });
} }

2
src/Squidex.Domain.Apps.Entities/Apps/Templates/CreateProfileCommandMiddleware.cs

@ -77,7 +77,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Templates
.AddField("profession", .AddField("profession",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", "Software Developer")), .AddValue("iv", "Software Developer")),
Publish = true, Publish = true
}); });
} }

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

@ -38,6 +38,11 @@ namespace Squidex.Domain.Apps.Entities.Contents
return Clone(c => c.Base = c.Base.WithFlatten(flatten)); return Clone(c => c.Base = c.Base.WithFlatten(flatten));
} }
public ContentQueryContext WithUnpublished(bool unpublished)
{
return Clone(c => c.Base = c.Base.WithUnpublished(unpublished));
}
public ContentQueryContext WithSchemaId(Guid id) public ContentQueryContext WithSchemaId(Guid id)
{ {
return Clone(c => c.SchemaIdOrName = id.ToString()); return Clone(c => c.SchemaIdOrName = id.ToString());

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

@ -21,6 +21,8 @@ using Squidex.Infrastructure;
using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
#pragma warning disable RECS0147
namespace Squidex.Domain.Apps.Entities.Contents namespace Squidex.Domain.Apps.Entities.Contents
{ {
public sealed class ContentQueryService : IContentQueryService public sealed class ContentQueryService : IContentQueryService
@ -242,12 +244,23 @@ namespace Squidex.Domain.Apps.Entities.Contents
{ {
return StatusArchived; return StatusArchived;
} }
else
{
return StatusDraftOrPublished; return StatusDraftOrPublished;
} }
}
else
{
if (context.Unpublished)
{
return StatusDraftOrPublished;
}
else
{
return StatusPublished; return StatusPublished;
} }
}
}
private Task<IContentEntity> FindContentByVersionAsync(Guid id, long version) private Task<IContentEntity> FindContentByVersionAsync(Guid id, long version)
{ {

7
src/Squidex.Domain.Apps.Entities/QueryContext.cs

@ -23,6 +23,8 @@ namespace Squidex.Domain.Apps.Entities
public bool Flatten { get; private set; } public bool Flatten { get; private set; }
public bool Unpublished { get; set; }
public IEnumerable<Language> Languages { get; private set; } public IEnumerable<Language> Languages { get; private set; }
private QueryContext() private QueryContext()
@ -34,6 +36,11 @@ namespace Squidex.Domain.Apps.Entities
return new QueryContext { App = app, User = user }; return new QueryContext { App = app, User = user };
} }
public QueryContext WithUnpublished(bool unpublished)
{
return Clone(c => c.Unpublished = unpublished);
}
public QueryContext WithArchived(bool archived) public QueryContext WithArchived(bool archived)
{ {
return Clone(c => c.Archived = archived); return Clone(c => c.Archived = archived);

5
src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -482,7 +482,10 @@ namespace Squidex.Areas.Api.Controllers.Contents
private ContentQueryContext Context() private ContentQueryContext Context()
{ {
return new ContentQueryContext(QueryContext.Create(App, User).WithLanguages(Request.Headers["X-Languages"])).WithFlatten(Request.Headers.ContainsKey("X-Flatten")); return new ContentQueryContext(QueryContext.Create(App, User)
.WithLanguages(Request.Headers["X-Languages"]))
.WithFlatten(Request.Headers.ContainsKey("X-Flatten"))
.WithUnpublished(Request.Headers.ContainsKey("X-Unpublished"));
} }
} }
} }

2
src/Squidex/Areas/Api/Controllers/Schemas/Models/SchemaDetailsDto.cs

@ -142,7 +142,7 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models
new NestedFieldDto new NestedFieldDto
{ {
FieldId = nestedField.Id, FieldId = nestedField.Id,
Properties = nestedFieldPropertiesDto, Properties = nestedFieldPropertiesDto
}); });
fieldDto.Nested.Add(nestedFieldDto); fieldDto.Nested.Add(nestedFieldDto);

2
tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/ContentValidationTests.cs

@ -340,7 +340,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent
new List<ValidationError> new List<ValidationError>
{ {
new ValidationError("my-field[1].my-nested: Field is required.", "my-field[1].my-nested"), new ValidationError("my-field[1].my-nested: Field is required.", "my-field[1].my-nested"),
new ValidationError("my-field[3].my-nested: Field is required.", "my-field[3].my-nested"), new ValidationError("my-field[3].my-nested: Field is required.", "my-field[3].my-nested")
}); });
} }
} }

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

@ -165,16 +165,22 @@ namespace Squidex.Domain.Apps.Entities.Contents
public static IEnumerable<object[]> ManyRequestData = new[] public static IEnumerable<object[]> ManyRequestData = new[]
{ {
new object[] { 5, 200, false, true, new[] { Status.Published } }, new object[] { true, true, true, new[] { Status.Archived } },
new object[] { 5, 200, false, false, new[] { Status.Published } }, new object[] { true, true, false, new[] { Status.Archived } },
new object[] { 5, 200, true, false, new[] { Status.Draft, Status.Published } }, new object[] { true, false, true, new[] { Status.Draft, Status.Published } },
new object[] { 5, 200, true, true, new[] { Status.Archived } } new object[] { true, false, false, new[] { Status.Draft, Status.Published } },
new object[] { false, true, true, new[] { Status.Draft, Status.Published } },
new object[] { false, false, true, new[] { Status.Draft, Status.Published } },
new object[] { false, false, false, new[] { Status.Published } },
new object[] { false, true, false, new[] { Status.Published } }
}; };
[Theory] [Theory]
[MemberData(nameof(ManyRequestData))] [MemberData(nameof(ManyRequestData))]
public async Task Should_query_contents_by_query_from_repository_and_transform(int count, int total, bool isFrontend, bool archive, params Status[] status) public async Task Should_query_contents_by_query_from_repository_and_transform(bool isFrontend, bool archive, bool unpublished, params Status[] status)
{ {
const int count = 5, total = 200;
var contentId = Guid.NewGuid(); var contentId = Guid.NewGuid();
var content = CreateContent(contentId); var content = CreateContent(contentId);
@ -187,7 +193,9 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentRepository.QueryAsync(app, schema, A<Status[]>.That.IsSameSequenceAs(status), A<ODataUriParser>.Ignored)) A.CallTo(() => contentRepository.QueryAsync(app, schema, A<Status[]>.That.IsSameSequenceAs(status), A<ODataUriParser>.Ignored))
.Returns(ResultList.Create(total, Enumerable.Repeat(content, count))); .Returns(ResultList.Create(total, Enumerable.Repeat(content, count)));
var result = await sut.QueryAsync(context.WithSchemaId(schemaId).WithArchived(archive), Query.Empty); var ctx = context.WithSchemaId(schemaId).WithArchived(archive).WithUnpublished(unpublished);
var result = await sut.QueryAsync(ctx, Query.Empty);
Assert.Equal(contentData, result[0].Data); Assert.Equal(contentData, result[0].Data);
Assert.Equal(content.Id, result[0].Id); Assert.Equal(content.Id, result[0].Id);
@ -220,16 +228,22 @@ namespace Squidex.Domain.Apps.Entities.Contents
public static IEnumerable<object[]> ManyIdRequestData = new[] public static IEnumerable<object[]> ManyIdRequestData = new[]
{ {
new object[] { 5, 200, false, true, new[] { Status.Published } }, new object[] { true, true, true, new[] { Status.Archived } },
new object[] { 5, 200, false, false, new[] { Status.Published } }, new object[] { true, true, false, new[] { Status.Archived } },
new object[] { 5, 200, true, false, new[] { Status.Draft, Status.Published } }, new object[] { true, false, true, new[] { Status.Draft, Status.Published } },
new object[] { 5, 200, true, true, new[] { Status.Archived } } new object[] { true, false, false, new[] { Status.Draft, Status.Published } },
new object[] { false, true, true, new[] { Status.Draft, Status.Published } },
new object[] { false, false, true, new[] { Status.Draft, Status.Published } },
new object[] { false, false, false, new[] { Status.Published } },
new object[] { false, true, false, new[] { Status.Published } }
}; };
[Theory] [Theory]
[MemberData(nameof(ManyIdRequestData))] [MemberData(nameof(ManyIdRequestData))]
public async Task Should_query_contents_by_id_from_repository_and_transform(int count, int total, bool isFrontend, bool archive, params Status[] status) public async Task Should_query_contents_by_id_from_repository_and_transform(bool isFrontend, bool archive, bool unpublished, params Status[] status)
{ {
const int count = 5, total = 200;
var ids = Enumerable.Range(0, count).Select(x => Guid.NewGuid()).ToList(); var ids = Enumerable.Range(0, count).Select(x => Guid.NewGuid()).ToList();
SetupClaims(isFrontend); SetupClaims(isFrontend);
@ -241,7 +255,9 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => contentRepository.QueryAsync(app, schema, A<Status[]>.That.IsSameSequenceAs(status), A<HashSet<Guid>>.Ignored)) A.CallTo(() => contentRepository.QueryAsync(app, schema, A<Status[]>.That.IsSameSequenceAs(status), A<HashSet<Guid>>.Ignored))
.Returns(ResultList.Create(total, ids.Select(x => CreateContent(x)).Shuffle())); .Returns(ResultList.Create(total, ids.Select(x => CreateContent(x)).Shuffle()));
var result = await sut.QueryAsync(context.WithSchemaId(schemaId).WithArchived(archive), Query.Empty.WithIds(ids)); var ctx = context.WithSchemaId(schemaId).WithArchived(archive).WithUnpublished(unpublished);
var result = await sut.QueryAsync(ctx, Query.Empty.WithIds(ids));
Assert.Equal(ids, result.Select(x => x.Id).ToList()); Assert.Equal(ids, result.Select(x => x.Id).ToList());
Assert.Equal(total, result.Total); Assert.Equal(total, result.Total);

Loading…
Cancel
Save