Browse Source

Merge pull request #344 from niklasise/GraphQL-unpublished-fix

Fixed issue with unpublished content not being available for GraphQL
pull/345/head
Sebastian Stehle 7 years ago
committed by GitHub
parent
commit
f316f5cda2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentGraphType.cs
  2. 93
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs
  3. 5
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs

8
src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentGraphType.cs

@ -95,6 +95,14 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
Resolver = Resolve(x => x.Data), Resolver = Resolve(x => x.Data),
Description = $"The data of the {schemaName} content." Description = $"The data of the {schemaName} content."
}); });
AddField(new FieldType
{
Name = "dataDraft",
ResolvedType = contentDataType,
Resolver = Resolve(x => x.DataDraft),
Description = $"The draft data of the {schemaName} content."
});
} }
Description = $"The structure of a {schemaName} content type."; Description = $"The structure of a {schemaName} content type.";

93
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); 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() private QueryContext MatchsAssetContext()
{ {
return A<QueryContext>.That.Matches(x => x.App == app && x.User == user && !x.Archived); return A<QueryContext>.That.Matches(x => x.App == app && x.User == user && !x.Archived);

5
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()); 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(); var now = SystemClock.Instance.GetCurrentInstant();
@ -151,7 +151,8 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
CreatedBy = new RefToken(RefTokenType.Subject, "user1"), CreatedBy = new RefToken(RefTokenType.Subject, "user1"),
LastModified = now, LastModified = now,
LastModifiedBy = new RefToken(RefTokenType.Subject, "user2"), LastModifiedBy = new RefToken(RefTokenType.Subject, "user2"),
Data = data Data = data,
DataDraft = dataDraft
}; };
return content; return content;

Loading…
Cancel
Save