diff --git a/src/Squidex.Domain.Apps.Events/Apps/Old/AppClientChanged.cs b/src/Squidex.Domain.Apps.Events/Apps/Old/AppClientChanged.cs index 612dfa357..6370c47d7 100644 --- a/src/Squidex.Domain.Apps.Events/Apps/Old/AppClientChanged.cs +++ b/src/Squidex.Domain.Apps.Events/Apps/Old/AppClientChanged.cs @@ -12,7 +12,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Domain.Apps.Events.Apps.Old { - [EventType(nameof(AppClientUpdated))] + [EventType(nameof(AppClientChanged))] public sealed class AppClientChanged : AppEvent, IMigratedEvent { public string Id { get; set; } diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Apps/MongoAppEntityClient.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Apps/MongoAppEntityClient.cs index 873859585..fde8176cf 100644 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Apps/MongoAppEntityClient.cs +++ b/src/Squidex.Domain.Apps.Read.MongoDb/Apps/MongoAppEntityClient.cs @@ -26,7 +26,7 @@ namespace Squidex.Domain.Apps.Read.MongoDb.Apps [BsonElement] public string Name { get; set; } - [BsonIgnoreIfDefault] + [BsonRequired] [BsonElement] public AppClientPermission Permission { get; set; } @@ -34,5 +34,10 @@ namespace Squidex.Domain.Apps.Read.MongoDb.Apps { get { return !string.IsNullOrWhiteSpace(Name) ? Name : Id; } } + + public MongoAppEntityClient() + { + Permission = AppClientPermission.Editor; + } } } diff --git a/src/Squidex.Domain.Apps.Read/Apps/AppHistoryEventsCreator.cs b/src/Squidex.Domain.Apps.Read/Apps/AppHistoryEventsCreator.cs index c9b1fac4f..6c8839b5a 100644 --- a/src/Squidex.Domain.Apps.Read/Apps/AppHistoryEventsCreator.cs +++ b/src/Squidex.Domain.Apps.Read/Apps/AppHistoryEventsCreator.cs @@ -32,8 +32,11 @@ namespace Squidex.Domain.Apps.Read.Apps AddEventMessage( "revoked client {[Id]}"); + AddEventMessage( + "updated client {[Id]}"); + AddEventMessage( - "named client {[Id]} as {[Name]}"); + "renamed client {[Id]} to {[Name]}"); AddEventMessage( "added language {[Language]}"); diff --git a/src/Squidex/Controllers/Api/Apps/Models/UpdateAppClientDto.cs b/src/Squidex/Controllers/Api/Apps/Models/UpdateAppClientDto.cs index 13d20bf25..2140f52ef 100644 --- a/src/Squidex/Controllers/Api/Apps/Models/UpdateAppClientDto.cs +++ b/src/Squidex/Controllers/Api/Apps/Models/UpdateAppClientDto.cs @@ -7,6 +7,9 @@ // ========================================================================== using System.ComponentModel.DataAnnotations; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Squidex.Domain.Apps.Core.Apps; namespace Squidex.Controllers.Api.Apps.Models { @@ -19,8 +22,9 @@ namespace Squidex.Controllers.Api.Apps.Models public string Name { get; set; } /// - /// Determines if the client is a reader. + /// The permissions of the client. /// - public bool? IsReader { get; set; } + [JsonConverter(typeof(StringEnumConverter))] + public AppClientPermission? Permission { get; set; } } } diff --git a/src/Squidex/app/features/settings/pages/clients/client.component.html b/src/Squidex/app/features/settings/pages/clients/client.component.html index 46b5c3ad7..c6bb7a5b7 100644 --- a/src/Squidex/app/features/settings/pages/clients/client.component.html +++ b/src/Squidex/app/features/settings/pages/clients/client.component.html @@ -73,7 +73,6 @@ Permission diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppEventTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppEventTests.cs new file mode 100644 index 000000000..acb390b7e --- /dev/null +++ b/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppEventTests.cs @@ -0,0 +1,51 @@ +// ========================================================================== +// AppEventTests.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using Squidex.Domain.Apps.Core.Apps; +using Squidex.Domain.Apps.Events; +using Squidex.Domain.Apps.Events.Apps; +using Squidex.Domain.Apps.Events.Apps.Old; +using Squidex.Domain.Apps.Write.TestHelpers; +using Squidex.Infrastructure; +using Xunit; + +#pragma warning disable CS0612 // Type or member is obsolete + +namespace Squidex.Domain.Apps.Write.Apps +{ + public class AppEventTests + { + private readonly RefToken actor = new RefToken("User", Guid.NewGuid().ToString()); + private readonly NamedId appId = new NamedId(Guid.NewGuid(), "my-app"); + + [Fact] + public void Should_migrate_client_changed_as_reader_to_client_updated() + { + var source = CreateEvent(new AppClientChanged { IsReader = true }); + + source.Migrate().ShouldBeSameEvent(CreateEvent(new AppClientUpdated { Permission = AppClientPermission.Reader })); + } + + [Fact] + public void Should_migrate_client_changed_as_writer_to_client_updated() + { + var source = CreateEvent(new AppClientChanged { IsReader = false }); + + source.Migrate().ShouldBeSameEvent(CreateEvent(new AppClientUpdated { Permission = AppClientPermission.Editor })); + } + + private T CreateEvent(T contentEvent) where T : AppEvent + { + contentEvent.Actor = actor; + contentEvent.AppId = appId; + + return contentEvent; + } + } +}