Skip to content

Commit 15bfd32

Browse files
authored
[Fusion] Updated SetOperationTypes to remove empty operation types (#7986)
1 parent a0ece0b commit 15bfd32

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

src/HotChocolate/Fusion-vnext/src/Fusion.Composition/SourceSchemaMerger.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -676,14 +676,30 @@ private static void SetOperationTypes(SchemaDefinition mergedSchema)
676676
mergedSchema.QueryType = (ObjectTypeDefinition?)queryType;
677677
}
678678

679-
if (mergedSchema.Types.TryGetType(TypeNames.Mutation, out var mutationType))
679+
if (mergedSchema.Types.TryGetType(TypeNames.Mutation, out var mutationType)
680+
&& mutationType is ObjectTypeDefinition mutationObjectType)
680681
{
681-
mergedSchema.MutationType = (ObjectTypeDefinition?)mutationType;
682+
if (mutationObjectType.Fields.Count == 0)
683+
{
684+
mergedSchema.Types.Remove(mutationObjectType);
685+
}
686+
else
687+
{
688+
mergedSchema.MutationType = mutationObjectType;
689+
}
682690
}
683691

684-
if (mergedSchema.Types.TryGetType(TypeNames.Subscription, out var subscriptionType))
692+
if (mergedSchema.Types.TryGetType(TypeNames.Subscription, out var subscriptionType)
693+
&& subscriptionType is ObjectTypeDefinition subscriptionObjectType)
685694
{
686-
mergedSchema.SubscriptionType = (ObjectTypeDefinition?)subscriptionType;
695+
if (subscriptionObjectType.Fields.Count == 0)
696+
{
697+
mergedSchema.Types.Remove(subscriptionObjectType);
698+
}
699+
else
700+
{
701+
mergedSchema.SubscriptionType = subscriptionObjectType;
702+
}
687703
}
688704
}
689705

src/HotChocolate/Fusion-vnext/test/Fusion.Composition.Tests/SourceSchemaMergerTests.cs

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,54 @@ public void Merge_WithOperationTypes_SetsOperationTypes()
1818
{
1919
Types =
2020
{
21-
new ObjectTypeDefinition(Query),
21+
new ObjectTypeDefinition(Query)
22+
{ Fields = { new OutputFieldDefinition("field") } },
23+
new ObjectTypeDefinition(Mutation)
24+
{ Fields = { new OutputFieldDefinition("field") } },
25+
new ObjectTypeDefinition(Subscription)
26+
{ Fields = { new OutputFieldDefinition("field") } }
27+
}
28+
}
29+
]);
30+
31+
// act
32+
var (isSuccess, _, mergedSchema, _) = merger.Merge();
33+
34+
// assert
35+
Assert.True(isSuccess);
36+
Assert.NotNull(mergedSchema.QueryType);
37+
Assert.NotNull(mergedSchema.MutationType);
38+
Assert.NotNull(mergedSchema.SubscriptionType);
39+
}
40+
41+
[Fact]
42+
public void Merge_WithEmptyMutationAndSubscriptionType_RemovesEmptyOperationTypes()
43+
{
44+
// arrange
45+
var merger = new SourceSchemaMerger(
46+
[
47+
new SchemaDefinition
48+
{
49+
Types =
50+
{
51+
new ObjectTypeDefinition(Query)
52+
{ Fields = { new OutputFieldDefinition("field") } },
2253
new ObjectTypeDefinition(Mutation),
2354
new ObjectTypeDefinition(Subscription)
2455
}
2556
}
2657
]);
2758

2859
// act
29-
var result = merger.Merge();
60+
var (isSuccess, _, mergedSchema, _) = merger.Merge();
3061

3162
// assert
32-
Assert.True(result.IsSuccess);
33-
Assert.NotNull(result.Value.QueryType);
34-
Assert.NotNull(result.Value.MutationType);
35-
Assert.NotNull(result.Value.SubscriptionType);
63+
Assert.True(isSuccess);
64+
Assert.NotNull(mergedSchema.QueryType);
65+
Assert.False(mergedSchema.Types.ContainsName(Mutation));
66+
Assert.Null(mergedSchema.MutationType);
67+
Assert.False(mergedSchema.Types.ContainsName(Subscription));
68+
Assert.Null(mergedSchema.SubscriptionType);
3669
}
3770

3871
[Fact]

0 commit comments

Comments
 (0)