Browse Source

Fix graphql when content is from another schema.

pull/771/head
Sebastian 4 years ago
parent
commit
8a23feef63
  1. 11
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/GraphQLExecutionContext.cs
  2. 5
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/ContentActions.cs
  3. 33
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs

11
backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/GraphQLExecutionContext.cs

@ -80,12 +80,19 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
return await dataLoader.LoadAsync(id).GetResultAsync(ct); return await dataLoader.LoadAsync(id).GetResultAsync(ct);
} }
public async Task<IContentEntity?> FindContentAsync(DomainId id, public async Task<IContentEntity?> FindContentAsync(DomainId schemaId, DomainId id,
CancellationToken ct) CancellationToken ct)
{ {
var dataLoader = GetContentsLoader(); var dataLoader = GetContentsLoader();
return await dataLoader.LoadAsync(id).GetResultAsync(ct); var content = await dataLoader.LoadAsync(id).GetResultAsync(ct);
if (content?.SchemaId.Id != schemaId)
{
content = null;
}
return content;
} }
public Task<IReadOnlyList<IEnrichedAssetEntity>> GetReferencedAssetsAsync(IJsonValue value, public Task<IReadOnlyList<IEnrichedAssetEntity>> GetReferencedAssetsAsync(IJsonValue value,

5
backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/ContentActions.cs

@ -78,17 +78,18 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types.Contents
public static readonly IFieldResolver Resolver = Resolvers.Async<object, object?>(async (_, fieldContext, context) => public static readonly IFieldResolver Resolver = Resolvers.Async<object, object?>(async (_, fieldContext, context) =>
{ {
var contentId = fieldContext.GetArgument<DomainId>("id"); var contentId = fieldContext.GetArgument<DomainId>("id");
var contentSchema = fieldContext.FieldDefinition.SchemaId();
var version = fieldContext.GetArgument<int?>("version"); var version = fieldContext.GetArgument<int?>("version");
if (version >= 0) if (version >= 0)
{ {
return await context.FindContentAsync(fieldContext.FieldDefinition.SchemaId(), contentId, version.Value, return await context.FindContentAsync(contentSchema, contentId, version.Value,
fieldContext.CancellationToken); fieldContext.CancellationToken);
} }
else else
{ {
return await context.FindContentAsync(contentId, return await context.FindContentAsync(DomainId.Create(contentSchema), contentId,
fieldContext.CancellationToken); fieldContext.CancellationToken);
} }
}); });

33
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs

@ -121,7 +121,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
} }
[Fact] [Fact]
public async Task Should_return_null_single_asset_if_not_found() public async Task Should_return_null_if_single_asset_not_found()
{ {
var assetId = DomainId.NewGuid(); var assetId = DomainId.NewGuid();
@ -284,7 +284,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
} }
[Fact] [Fact]
public async Task Should_return_null_single_content_if_not_found() public async Task Should_return_null_if_single_content_not_found()
{ {
var contentId = DomainId.NewGuid(); var contentId = DomainId.NewGuid();
@ -311,6 +311,35 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
AssertResult(expected, result); AssertResult(expected, result);
} }
[Fact]
public async Task Should_return_null_if_single_content_from_another_schema()
{
var contentId = DomainId.NewGuid();
var content = TestContent.CreateRef(TestSchemas.Ref1Id, contentId, "ref1-field", "ref1");
var query = CreateQuery(@"
query {
findMySchemaContent(id: '<ID>') {
id
}
}", contentId);
A.CallTo(() => contentQuery.QueryAsync(MatchsContentContext(), A<Q>.That.HasIdsWithoutTotal(contentId), A<CancellationToken>._))
.Returns(ResultList.CreateFrom(10, content));
var result = await ExecuteAsync(new ExecutionOptions { Query = query });
var expected = new
{
data = new
{
findMySchemaContent = (object?)null
}
};
AssertResult(expected, result);
}
[Fact] [Fact]
public async Task Should_return_single_content_if_finding_content() public async Task Should_return_single_content_if_finding_content()
{ {

Loading…
Cancel
Save