Browse Source

Fix for comments and API for preview urls.

pull/337/head
Sebastian Stehle 8 years ago
parent
commit
ec93e6f58e
  1. 16
      src/Squidex.Domain.Apps.Entities/Schemas/Commands/ConfigurePreviewUrls.cs
  2. 14
      src/Squidex.Domain.Apps.Entities/Schemas/Guards/GuardSchema.cs
  3. 3
      src/Squidex.Domain.Apps.Entities/Schemas/ISchemaEntity.cs
  4. 13
      src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs
  5. 9
      src/Squidex.Domain.Apps.Entities/Schemas/State/SchemaState.cs
  6. 18
      src/Squidex.Domain.Apps.Events/Schemas/SchemaPreviewUrlsConfigured.cs
  7. 5
      src/Squidex/Areas/Api/Controllers/Schemas/Models/SchemaDetailsDto.cs
  8. 23
      src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
  9. 2
      src/Squidex/app/shared/state/comments.state.ts
  10. 17
      tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/GuardSchemaTests.cs
  11. 25
      tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs

16
src/Squidex.Domain.Apps.Entities/Schemas/Commands/ConfigurePreviewUrls.cs

@ -0,0 +1,16 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Collections.Generic;
namespace Squidex.Domain.Apps.Entities.Schemas.Commands
{
public sealed class ConfigurePreviewUrls : SchemaCommand
{
public Dictionary<string, string> PreviewUrls { get; set; }
}
}

14
src/Squidex.Domain.Apps.Entities/Schemas/Guards/GuardSchema.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@ -118,6 +119,19 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Guards
});
}
public static void CanConfigurePreviewUrls(ConfigurePreviewUrls command)
{
Guard.NotNull(command, nameof(command));
Validate.It(() => "Cannot configure preview urls.", error =>
{
if (command.PreviewUrls == null)
{
error("Preview Urls is required.", nameof(command.PreviewUrls));
}
});
}
public static void CanPublish(Schema schema, PublishSchema command)
{
Guard.NotNull(command, nameof(command));

3
src/Squidex.Domain.Apps.Entities/Schemas/ISchemaEntity.cs

@ -6,6 +6,7 @@
// ==========================================================================
using System;
using System.Collections.Generic;
using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure;
@ -40,5 +41,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas
string ScriptChange { get; }
Schema SchemaDef { get; }
Dictionary<string, string> PreviewUrls { get; }
}
}

13
src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs

@ -179,6 +179,14 @@ namespace Squidex.Domain.Apps.Entities.Schemas
ChangeCategory(c);
});
case ConfigurePreviewUrls configurePreviewUrls:
return UpdateAsync(configurePreviewUrls, c =>
{
GuardSchema.CanConfigurePreviewUrls(c);
ConfigurePreviewUrls(c);
});
case DeleteSchema deleteSchema:
return UpdateAsync(deleteSchema, c =>
{
@ -288,6 +296,11 @@ namespace Squidex.Domain.Apps.Entities.Schemas
RaiseEvent(SimpleMapper.Map(command, new SchemaCategoryChanged()));
}
public void ConfigurePreviewUrls(ConfigurePreviewUrls command)
{
RaiseEvent(SimpleMapper.Map(command, new SchemaPreviewUrlsConfigured()));
}
public void Delete(DeleteSchema command)
{
RaiseEvent(SimpleMapper.Map(command, new SchemaDeleted()));

9
src/Squidex.Domain.Apps.Entities/Schemas/State/SchemaState.cs

@ -6,6 +6,7 @@
// ==========================================================================
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Squidex.Domain.Apps.Core;
using Squidex.Domain.Apps.Core.Schemas;
@ -55,6 +56,9 @@ namespace Squidex.Domain.Apps.Entities.Schemas.State
[DataMember]
public string ScriptChange { get; set; }
[DataMember]
public Dictionary<string, string> PreviewUrls { get; set; }
[DataMember]
public Schema SchemaDef { get; set; }
@ -166,6 +170,11 @@ namespace Squidex.Domain.Apps.Entities.Schemas.State
Category = @event.Name;
}
protected void On(SchemaPreviewUrlsConfigured @event, FieldRegistry registry)
{
PreviewUrls = @event.PreviewUrls;
}
protected void On(SchemaPublished @event, FieldRegistry registry)
{
SchemaDef = SchemaDef.Publish();

18
src/Squidex.Domain.Apps.Events/Schemas/SchemaPreviewUrlsConfigured.cs

@ -0,0 +1,18 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Collections.Generic;
using Squidex.Infrastructure.EventSourcing;
namespace Squidex.Domain.Apps.Events.Schemas
{
[EventType(nameof(SchemaPreviewUrlsConfigured))]
public sealed class SchemaPreviewUrlsConfigured : SchemaEvent
{
public Dictionary<string, string> PreviewUrls { get; set; }
}
}

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

@ -71,6 +71,11 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models
/// </summary>
public string ScriptChange { get; set; }
/// <summary>
/// The preview Urls.
/// </summary>
public Dictionary<string, string> PreviewUrls { get; set; }
/// <summary>
/// The list of fields.
/// </summary>

23
src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs

@ -6,6 +6,7 @@
// ==========================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
@ -155,7 +156,6 @@ namespace Squidex.Areas.Api.Controllers.Schemas
/// <param name="request">The schema object that needs to updated.</param>
/// <returns>
/// 204 => Schema has been updated.
/// 400 => Schema properties are not valid.
/// 404 => Schema or app not found.
/// </returns>
[HttpPut]
@ -169,6 +169,27 @@ namespace Squidex.Areas.Api.Controllers.Schemas
return NoContent();
}
/// <summary>
/// Update the preview urls.
/// </summary>
/// <param name="app">The name of the app.</param>
/// <param name="name">The name of the schema.</param>
/// <param name="request">The preview urls for the schema.</param>
/// <returns>
/// 204 => Schema has been updated.
/// 404 => Schema or app not found.
/// </returns>
[HttpPut]
[Route("apps/{app}/schemas/{name}/preview-urls")]
[ApiPermission(Permissions.AppSchemasUpdate)]
[ApiCosts(1)]
public async Task<IActionResult> PutPreviewUrls(string app, string name, [FromBody] Dictionary<string, string> request)
{
await CommandBus.PublishAsync(new ConfigurePreviewUrls { PreviewUrls = request ?? new Dictionary<string, string>() });
return NoContent();
}
/// <summary>
/// Update the scripts of a schema.
/// </summary>

2
src/Squidex/app/shared/state/comments.state.ts

@ -48,7 +48,7 @@ export class CommentsState extends State<Snapshot> {
private readonly commentsService: CommentsService,
private readonly dialogs: DialogService
) {
super({ comments: ImmutableArray.empty(), version: new Version('') });
super({ comments: ImmutableArray.empty(), version: new Version('-1') });
}
public load(): Observable<any> {

17
tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/GuardSchemaTests.cs

@ -466,6 +466,23 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Guards
GuardSchema.CanReorder(schema_0, command);
}
[Fact]
public void CanConfigurePreviewUrls_should_throw_exception_if_preview_urls_null()
{
var command = new ConfigurePreviewUrls { PreviewUrls = null };
ValidationAssert.Throws(() => GuardSchema.CanConfigurePreviewUrls(command),
new ValidationError("Preview Urls is required.", "PreviewUrls"));
}
[Fact]
public void CanConfigurePreviewUrls_should_not_throw_exception_if_valid()
{
var command = new ConfigurePreviewUrls { PreviewUrls = new Dictionary<string, string>() };
GuardSchema.CanConfigurePreviewUrls(command);
}
[Fact]
public void CanChangeCategory_should_not_throw_exception()
{

25
tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs

@ -225,6 +225,31 @@ namespace Squidex.Domain.Apps.Entities.Schemas
);
}
[Fact]
public async Task ConfigurePreviewUrls_should_create_events_and_update_state()
{
var command = new ConfigurePreviewUrls
{
PreviewUrls = new Dictionary<string, string>
{
["Web"] = "web-url"
}
};
await ExecuteCreateAsync();
var result = await sut.ExecuteAsync(CreateCommand(command));
result.ShouldBeEquivalent(new EntitySavedResult(1));
Assert.Equal(command.PreviewUrls, sut.Snapshot.PreviewUrls);
LastEvents
.ShouldHaveSameEvents(
CreateEvent(new SchemaPreviewUrlsConfigured { PreviewUrls = command.PreviewUrls })
);
}
[Fact]
public async Task Delete_should_create_events_and_update_state()
{

Loading…
Cancel
Save