diff --git a/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentGraphType.cs b/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentGraphType.cs index b10f2bce2..ec8878874 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentGraphType.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentGraphType.cs @@ -99,7 +99,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types AddField(new FieldType { Name = "dataDraft", - ResolvedType = new NonNullGraphType(contentDataType), + ResolvedType = contentDataType, Resolver = Resolve(x => x.DataDraft), Description = $"The draft data of the {schemaName} content." }); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs index ff0a07365..9763d1425 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs @@ -823,6 +823,99 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL Assert.Contains("\"data\":null", json); } + [Fact] + public async Task Should_return_draft_content_when_querying_dataDraft() + { + var dataDraft = new NamedContentData() + .AddField("my-string", + new ContentFieldData() + .AddValue("de", "draft value")) + .AddField("my-number", + new ContentFieldData() + .AddValue("iv", 42)); + + var contentId = Guid.NewGuid(); + var content = CreateContent(contentId, Guid.Empty, Guid.Empty, null, dataDraft); + + var query = $@" + query {{ + findMySchemaContent(id: ""{contentId}"") {{ + dataDraft {{ + myString {{ + de + }} + myNumber {{ + iv + }} + }} + }} + }}"; + + A.CallTo(() => contentQuery.FindContentAsync(MatchsContentContext(), schemaId.ToString(), contentId, EtagVersion.Any)) + .Returns(content); + + var result = await sut.QueryAsync(context, new GraphQLQuery { Query = query }); + + var expected = new + { + data = new + { + findMySchemaContent = new + { + dataDraft = new + { + myString = new + { + de = "draft value" + }, + myNumber = new + { + iv = 42 + } + } + } + } + }; + + AssertResult(expected, result); + } + + [Fact] + public async Task Should_return_null_when_querying_dataDraft_and_no_draft_content_is_available() + { + var contentId = Guid.NewGuid(); + var content = CreateContent(contentId, Guid.Empty, Guid.Empty, null); + + var query = $@" + query {{ + findMySchemaContent(id: ""{contentId}"") {{ + dataDraft {{ + myString {{ + de + }} + }} + }} + }}"; + + A.CallTo(() => contentQuery.FindContentAsync(MatchsContentContext(), schemaId.ToString(), contentId, EtagVersion.Any)) + .Returns(content); + + var result = await sut.QueryAsync(context, new GraphQLQuery { Query = query }); + + var expected = new + { + data = new + { + findMySchemaContent = new + { + dataDraft = (object)null + } + } + }; + + AssertResult(expected, result); + } + private QueryContext MatchsAssetContext() { return A.That.Matches(x => x.App == app && x.User == user && !x.Archived); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs index 7e1639b8e..b8ef08e67 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs @@ -97,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL sut = new CachingGraphQLService(cache, appProvider, assetQuery, contentQuery, new FakeUrlGenerator()); } - protected static IContentEntity CreateContent(Guid id, Guid refId, Guid assetId, NamedContentData data = null) + protected static IContentEntity CreateContent(Guid id, Guid refId, Guid assetId, NamedContentData data = null, NamedContentData dataDraft = null) { var now = SystemClock.Instance.GetCurrentInstant(); @@ -151,7 +151,8 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL CreatedBy = new RefToken(RefTokenType.Subject, "user1"), LastModified = now, LastModifiedBy = new RefToken(RefTokenType.Subject, "user2"), - Data = data + Data = data, + DataDraft = dataDraft }; return content;