Browse Source

Fix permission.

pull/636/head
Sebastian 5 years ago
parent
commit
5d24b27945
  1. 7
      backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs
  2. 7
      backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs
  3. 4
      backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  4. 54
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Indexes/AppsIndexTests.cs
  5. 54
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs

7
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) 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) if (app != null)
{ {

7
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) 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) if (schema != null)
{ {

4
backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -86,7 +86,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// </remarks> /// </remarks>
[HttpPost] [HttpPost]
[Route("content/{app}/graphql/")] [Route("content/{app}/graphql/")]
[ApiPermissionOrAnonymous(Permissions.AppContents)] [ApiPermissionOrAnonymous]
[ApiCosts(2)] [ApiCosts(2)]
public async Task<IActionResult> PostGraphQL(string app, [FromBody] GraphQLPostDto query) public async Task<IActionResult> PostGraphQL(string app, [FromBody] GraphQLPostDto query)
{ {
@ -118,7 +118,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// </remarks> /// </remarks>
[HttpPost] [HttpPost]
[Route("content/{app}/graphql/batch")] [Route("content/{app}/graphql/batch")]
[ApiPermissionOrAnonymous(Permissions.AppContents)] [ApiPermissionOrAnonymous]
[ApiCosts(2)] [ApiCosts(2)]
public async Task<IActionResult> PostGraphQLBatch(string app, [FromBody] GraphQLPostDto[] batch) public async Task<IActionResult> PostGraphQLBatch(string app, [FromBody] GraphQLPostDto[] batch)
{ {

54
backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Indexes/AppsIndexTests.cs

@ -53,7 +53,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_all_apps_from_user_permissions() public async Task Should_resolve_all_apps_from_user_permissions()
{ {
var expected = SetupApp(); var (expected, _) = SetupApp();
A.CallTo(() => indexByName.GetIdsAsync(A<string[]>.That.IsSameSequenceAs(new[] { appId.Name }))) A.CallTo(() => indexByName.GetIdsAsync(A<string[]>.That.IsSameSequenceAs(new[] { appId.Name })))
.Returns(new List<DomainId> { appId.Id }); .Returns(new List<DomainId> { appId.Id });
@ -66,7 +66,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_all_apps_from_user() public async Task Should_resolve_all_apps_from_user()
{ {
var expected = SetupApp(); var (expected, _) = SetupApp();
A.CallTo(() => indexByUser.GetIdsAsync()) A.CallTo(() => indexByUser.GetIdsAsync())
.Returns(new List<DomainId> { appId.Id }); .Returns(new List<DomainId> { appId.Id });
@ -79,7 +79,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_combined_apps() public async Task Should_resolve_combined_apps()
{ {
var expected = SetupApp(); var (expected, _) = SetupApp();
A.CallTo(() => indexByName.GetIdsAsync(A<string[]>.That.IsSameSequenceAs(new[] { appId.Name }))) A.CallTo(() => indexByName.GetIdsAsync(A<string[]>.That.IsSameSequenceAs(new[] { appId.Name })))
.Returns(new List<DomainId> { appId.Id }); .Returns(new List<DomainId> { appId.Id });
@ -96,7 +96,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_all_apps() public async Task Should_resolve_all_apps()
{ {
var expected = SetupApp(); var (expected, _) = SetupApp();
A.CallTo(() => indexByName.GetIdsAsync()) A.CallTo(() => indexByName.GetIdsAsync())
.Returns(new List<DomainId> { appId.Id }); .Returns(new List<DomainId> { appId.Id });
@ -109,7 +109,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_app_by_name() public async Task Should_resolve_app_by_name()
{ {
var expected = SetupApp(); var (expected, _) = SetupApp();
A.CallTo(() => indexByName.GetIdAsync(appId.Name)) A.CallTo(() => indexByName.GetIdAsync(appId.Name))
.Returns(appId.Id); .Returns(appId.Id);
@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_app_by_name_and_id_if_cached_before() 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)) A.CallTo(() => indexByName.GetIdAsync(appId.Name))
.Returns(appId.Id); .Returns(appId.Id);
@ -153,7 +153,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
[Fact] [Fact]
public async Task Should_resolve_app_by_id() public async Task Should_resolve_app_by_id()
{ {
var expected = SetupApp(); var (expected, _) = SetupApp();
var actual1 = await sut.GetAppAsync(appId.Id, false); var actual1 = await sut.GetAppAsync(appId.Id, false);
var actual2 = 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] [Fact]
public async Task Should_resolve_app_by_id_and_name_if_cached_before() 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 actual1 = await sut.GetAppAsync(appId.Id, true);
var actual2 = 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(); .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] [Fact]
public async Task Should_remove_from_user_index_on_remove_of_contributor() public async Task Should_remove_from_user_index_on_remove_of_contributor()
{ {
@ -424,7 +458,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
.MustHaveHappened(); .MustHaveHappened();
} }
private IAppEntity SetupApp(long version = 0) private (IAppEntity, IAppGrain) SetupApp(long version = 0)
{ {
var appEntity = A.Fake<IAppEntity>(); var appEntity = A.Fake<IAppEntity>();
@ -445,7 +479,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Indexes
A.CallTo(() => grainFactory.GetGrain<IAppGrain>(appId.Id.ToString(), null)) A.CallTo(() => grainFactory.GetGrain<IAppGrain>(appId.Id.ToString(), null))
.Returns(appGrain); .Returns(appGrain);
return appEntity; return (appEntity, appGrain);
} }
private CreateApp Create(string name) private CreateApp Create(string name)

54
backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs

@ -48,7 +48,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
[Fact] [Fact]
public async Task Should_resolve_schema_by_name() public async Task Should_resolve_schema_by_name()
{ {
var expected = SetupSchema(); var (expected, _) = SetupSchema();
A.CallTo(() => index.GetIdAsync(schemaId.Name)) A.CallTo(() => index.GetIdAsync(schemaId.Name))
.Returns(schemaId.Id); .Returns(schemaId.Id);
@ -69,7 +69,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
[Fact] [Fact]
public async Task Should_resolve_schema_by_name_and_id_if_cached_before() 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)) A.CallTo(() => index.GetIdAsync(schemaId.Name))
.Returns(schemaId.Id); .Returns(schemaId.Id);
@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
[Fact] [Fact]
public async Task Should_resolve_schema_by_id() 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 actual1 = await sut.GetSchemaAsync(appId.Id, schemaId.Id, false);
var actual2 = 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] [Fact]
public async Task Should_resolve_schema_by_id_and_name_if_cached_before() 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 actual1 = await sut.GetSchemaAsync(appId.Id, schemaId.Id, true);
var actual2 = 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] [Fact]
public async Task Should_resolve_schemas_by_id() public async Task Should_resolve_schemas_by_id()
{ {
var schema = SetupSchema(); var (schema, _) = SetupSchema();
A.CallTo(() => index.GetIdsAsync()) A.CallTo(() => index.GetIdsAsync())
.Returns(new List<DomainId> { schema.Id }); .Returns(new List<DomainId> { schema.Id });
@ -143,7 +143,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
[Fact] [Fact]
public async Task Should_return_empty_schemas_if_schema_not_created() 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()) A.CallTo(() => index.GetIdsAsync())
.Returns(new List<DomainId> { schema.Id }); .Returns(new List<DomainId> { schema.Id });
@ -156,7 +156,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
[Fact] [Fact]
public async Task Should_return_schema_if_deleted() public async Task Should_return_schema_if_deleted()
{ {
var schema = SetupSchema(0, true); var (schema, _) = SetupSchema(0, true);
A.CallTo(() => index.GetIdsAsync()) A.CallTo(() => index.GetIdsAsync())
.Returns(new List<DomainId> { schema.Id }); .Returns(new List<DomainId> { schema.Id });
@ -242,10 +242,44 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
.MustNotHaveHappened(); .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] [Fact]
public async Task Should_remove_schema_from_index_on_delete_when_existed_before() 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 }; 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 }; 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<ISchemaEntity>(); var schemaEntity = A.Fake<ISchemaEntity>();
@ -300,7 +334,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes
A.CallTo(() => grainFactory.GetGrain<ISchemaGrain>(key, null)) A.CallTo(() => grainFactory.GetGrain<ISchemaGrain>(key, null))
.Returns(schemaGrain); .Returns(schemaGrain);
return schemaEntity; return (schemaEntity, schemaGrain);
} }
} }
} }

Loading…
Cancel
Save