From 5d24b279454f2c41e32c3a0ebc4732b5493e56c3 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 2 Feb 2021 15:21:36 +0100 Subject: [PATCH] Fix permission. --- .../Apps/Indexes/AppsIndex.cs | 7 ++- .../Schemas/Indexes/SchemasIndex.cs | 7 ++- .../Contents/ContentsController.cs | 4 +- .../Apps/Indexes/AppsIndexTests.cs | 54 +++++++++++++++---- .../Schemas/Indexes/SchemasIndexTests.cs | 54 +++++++++++++++---- 5 files changed, 102 insertions(+), 24 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs index 2f22630da..7a12740de 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs @@ -223,7 +223,12 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes if (context.IsCompleted && context.Command is AppCommand appCommand) { - var app = await GetAppCoreAsync(appCommand.AggregateId); + var app = context.PlainResult as IAppEntity; + + if (app == null) + { + app = await GetAppCoreAsync(appCommand.AggregateId); + } if (app != null) { diff --git a/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs b/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs index 14920ee86..7f2bf6702 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs @@ -155,7 +155,12 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes if (context.IsCompleted && context.Command is SchemaCommand schemaCommand) { - var schema = await GetSchemaCoreAsync(schemaCommand.AggregateId); + var schema = context.PlainResult as ISchemaEntity; + + if (schema == null) + { + schema = await GetSchemaCoreAsync(schemaCommand.AggregateId); + } if (schema != null) { diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs index 1aed08ba3..3766dfe6d 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs @@ -86,7 +86,7 @@ namespace Squidex.Areas.Api.Controllers.Contents /// [HttpPost] [Route("content/{app}/graphql/")] - [ApiPermissionOrAnonymous(Permissions.AppContents)] + [ApiPermissionOrAnonymous] [ApiCosts(2)] public async Task PostGraphQL(string app, [FromBody] GraphQLPostDto query) { @@ -118,7 +118,7 @@ namespace Squidex.Areas.Api.Controllers.Contents /// [HttpPost] [Route("content/{app}/graphql/batch")] - [ApiPermissionOrAnonymous(Permissions.AppContents)] + [ApiPermissionOrAnonymous] [ApiCosts(2)] public async Task PostGraphQLBatch(string app, [FromBody] GraphQLPostDto[] batch) { diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Indexes/AppsIndexTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Indexes/AppsIndexTests.cs index d4f9346b9..2814232a9 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Indexes/AppsIndexTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Indexes/AppsIndexTests.cs @@ -53,7 +53,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_all_apps_from_user_permissions() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); A.CallTo(() => indexByName.GetIdsAsync(A.That.IsSameSequenceAs(new[] { appId.Name }))) .Returns(new List { appId.Id }); @@ -66,7 +66,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_all_apps_from_user() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); A.CallTo(() => indexByUser.GetIdsAsync()) .Returns(new List { appId.Id }); @@ -79,7 +79,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_combined_apps() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); A.CallTo(() => indexByName.GetIdsAsync(A.That.IsSameSequenceAs(new[] { appId.Name }))) .Returns(new List { appId.Id }); @@ -96,7 +96,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_all_apps() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); A.CallTo(() => indexByName.GetIdsAsync()) .Returns(new List { appId.Id }); @@ -109,7 +109,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_app_by_name() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); A.CallTo(() => indexByName.GetIdAsync(appId.Name)) .Returns(appId.Id); @@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_app_by_name_and_id_if_cached_before() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); A.CallTo(() => indexByName.GetIdAsync(appId.Name)) .Returns(appId.Id); @@ -153,7 +153,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_app_by_id() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); var actual1 = await sut.GetAppAsync(appId.Id, false); var actual2 = await sut.GetAppAsync(appId.Id, false); @@ -171,7 +171,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes [Fact] public async Task Should_resolve_app_by_id_and_name_if_cached_before() { - var expected = SetupApp(); + var (expected, _) = SetupApp(); var actual1 = await sut.GetAppAsync(appId.Id, true); var actual2 = await sut.GetAppAsync(appId.Id, true); @@ -327,6 +327,40 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes .MustHaveHappened(); } + [Fact] + public async Task Should_update_index_when_app_is_updated() + { + var (_, appGrain) = SetupApp(); + + var command = new UpdateApp { AppId = appId }; + + var context = + new CommandContext(command, commandBus) + .Complete(); + + await sut.HandleAsync(context); + + A.CallTo(() => appGrain.GetStateAsync()) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_update_index_with_result_when_app_is_updated() + { + var (app, appGrain) = SetupApp(); + + var command = new UpdateApp { AppId = appId }; + + var context = + new CommandContext(command, commandBus) + .Complete(app); + + await sut.HandleAsync(context); + + A.CallTo(() => appGrain.GetStateAsync()) + .MustNotHaveHappened(); + } + [Fact] public async Task Should_remove_from_user_index_on_remove_of_contributor() { @@ -424,7 +458,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes .MustHaveHappened(); } - private IAppEntity SetupApp(long version = 0) + private (IAppEntity, IAppGrain) SetupApp(long version = 0) { var appEntity = A.Fake(); @@ -445,7 +479,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes A.CallTo(() => grainFactory.GetGrain(appId.Id.ToString(), null)) .Returns(appGrain); - return appEntity; + return (appEntity, appGrain); } private CreateApp Create(string name) diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs index af0fbdc01..1ce40ef53 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs @@ -48,7 +48,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_resolve_schema_by_name() { - var expected = SetupSchema(); + var (expected, _) = SetupSchema(); A.CallTo(() => index.GetIdAsync(schemaId.Name)) .Returns(schemaId.Id); @@ -69,7 +69,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_resolve_schema_by_name_and_id_if_cached_before() { - var expected = SetupSchema(); + var (expected, _) = SetupSchema(); A.CallTo(() => index.GetIdAsync(schemaId.Name)) .Returns(schemaId.Id); @@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_resolve_schema_by_id() { - var expected = SetupSchema(); + var (expected, _) = SetupSchema(); var actual1 = await sut.GetSchemaAsync(appId.Id, schemaId.Id, false); var actual2 = await sut.GetSchemaAsync(appId.Id, schemaId.Id, false); @@ -110,7 +110,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_resolve_schema_by_id_and_name_if_cached_before() { - var expected = SetupSchema(); + var (expected, _) = SetupSchema(); var actual1 = await sut.GetSchemaAsync(appId.Id, schemaId.Id, true); var actual2 = await sut.GetSchemaAsync(appId.Id, schemaId.Id, true); @@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_resolve_schemas_by_id() { - var schema = SetupSchema(); + var (schema, _) = SetupSchema(); A.CallTo(() => index.GetIdsAsync()) .Returns(new List { schema.Id }); @@ -143,7 +143,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_return_empty_schemas_if_schema_not_created() { - var schema = SetupSchema(EtagVersion.NotFound); + var (schema, _) = SetupSchema(EtagVersion.NotFound); A.CallTo(() => index.GetIdsAsync()) .Returns(new List { schema.Id }); @@ -156,7 +156,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes [Fact] public async Task Should_return_schema_if_deleted() { - var schema = SetupSchema(0, true); + var (schema, _) = SetupSchema(0, true); A.CallTo(() => index.GetIdsAsync()) .Returns(new List { schema.Id }); @@ -242,10 +242,44 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes .MustNotHaveHappened(); } + [Fact] + public async Task Should_update_index_when_schema_is_updated() + { + var (_, schemaGrain) = SetupSchema(); + + var command = new UpdateSchema { SchemaId = schemaId }; + + var context = + new CommandContext(command, commandBus) + .Complete(); + + await sut.HandleAsync(context); + + A.CallTo(() => schemaGrain.GetStateAsync()) + .MustHaveHappened(); + } + + [Fact] + public async Task Should_update_index_with_result_when_schema_is_updated() + { + var (_, schemaGrain) = SetupSchema(); + + var command = new UpdateSchema { SchemaId = schemaId }; + + var context = + new CommandContext(command, commandBus) + .Complete(schemaGrain); + + await sut.HandleAsync(context); + + A.CallTo(() => schemaGrain.GetStateAsync()) + .MustNotHaveHappened(); + } + [Fact] public async Task Should_remove_schema_from_index_on_delete_when_existed_before() { - var schema = SetupSchema(); + var (schema, _) = SetupSchema(); var command = new DeleteSchema { SchemaId = schemaId, AppId = appId }; @@ -275,7 +309,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes return new CreateSchema { SchemaId = schemaId.Id, Name = name, AppId = appId }; } - private ISchemaEntity SetupSchema(long version = 0, bool isDeleted = false) + private (ISchemaEntity, ISchemaGrain) SetupSchema(long version = 0, bool isDeleted = false) { var schemaEntity = A.Fake(); @@ -300,7 +334,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes A.CallTo(() => grainFactory.GetGrain(key, null)) .Returns(schemaGrain); - return schemaEntity; + return (schemaEntity, schemaGrain); } } }