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);
}
public async Task<IContentEntity?> FindContentAsync(DomainId id,
public async Task<IContentEntity?> FindContentAsync(DomainId schemaId, DomainId id,
CancellationToken ct)
{
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,

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) =>
{
var contentId = fieldContext.GetArgument<DomainId>("id");
var contentSchema = fieldContext.FieldDefinition.SchemaId();
var version = fieldContext.GetArgument<int?>("version");
if (version >= 0)
{
return await context.FindContentAsync(fieldContext.FieldDefinition.SchemaId(), contentId, version.Value,
return await context.FindContentAsync(contentSchema, contentId, version.Value,
fieldContext.CancellationToken);
}
else
{
return await context.FindContentAsync(contentId,
return await context.FindContentAsync(DomainId.Create(contentSchema), contentId,
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]
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();
@ -284,7 +284,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
}
[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();
@ -311,6 +311,35 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
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]
public async Task Should_return_single_content_if_finding_content()
{

Loading…
Cancel
Save