Skip to content

Commit 7b8a56a

Browse files
Throw when trying to resolve unknown schema (#8771)
1 parent 78ea0c4 commit 7b8a56a

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

src/HotChocolate/Core/src/Execution/RequestExecutorManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ public async ValueTask<IRequestExecutor> GetExecutorAsync(
9292
return re.Executor;
9393
}
9494

95+
if (!SchemaNames.Contains(schemaName))
96+
{
97+
throw new InvalidOperationException($"The requested schema '{schemaName}' does not exist.");
98+
}
99+
95100
var registeredExecutor = await CreateRequestExecutorAsync(schemaName, true, cancellationToken)
96101
.ConfigureAwait(false);
97102

src/HotChocolate/Core/test/Execution.Tests/RequestExecutorResolverTests.cs renamed to src/HotChocolate/Core/test/Execution.Tests/RequestExecutorManagerTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,28 @@
44

55
namespace HotChocolate.Execution;
66

7-
public class RequestExecutorResolverTests
7+
public class RequestExecutorManagerTests
88
{
9+
[Fact]
10+
public async Task GetExecutorAsync_Throws_If_Schema_Does_Not_Exist()
11+
{
12+
// arrange
13+
var manager =
14+
new ServiceCollection()
15+
.AddGraphQL("some-name")
16+
.AddQueryType(d => d.Field("foo").Resolve(""))
17+
.Services
18+
.BuildServiceProvider()
19+
.GetRequiredService<RequestExecutorManager>();
20+
21+
// act
22+
var act = async () => await manager.GetExecutorAsync("unknown-name");
23+
24+
// assert
25+
var exception = await Assert.ThrowsAsync<InvalidOperationException>(act);
26+
Assert.Equal($"The requested schema 'unknown-name' does not exist.", exception.Message);
27+
}
28+
929
[Fact]
1030
public async Task Operation_Cache_Should_Be_Scoped_To_Executor()
1131
{

src/HotChocolate/Fusion-vnext/src/Fusion.Execution/Execution/FusionRequestExecutorManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ private async ValueTask<IRequestExecutor> GetOrCreateRequestExecutorAsync(
100100
return registration.Executor;
101101
}
102102

103+
if (!SchemaNames.Contains(schemaName))
104+
{
105+
throw new InvalidOperationException($"The requested schema '{schemaName}' does not exist.");
106+
}
107+
103108
registration = await CreateInitialRegistrationAsync(schemaName, cancellationToken).ConfigureAwait(false);
104109
_registry.TryAdd(schemaName, registration);
105110
await _executorEvents.WriteCreatedAsync(registration.Executor, cancellationToken).ConfigureAwait(false);

src/HotChocolate/Fusion-vnext/test/Fusion.Execution.Tests/Execution/FusionRequestExecutorManagerTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,38 @@ namespace HotChocolate.Fusion.Execution;
1212

1313
public class FusionRequestExecutorManagerTests : FusionTestBase
1414
{
15+
[Fact]
16+
public async Task GetExecutorAsync_Throws_If_Schema_Does_Not_Exist()
17+
{
18+
// arrange
19+
var schemaDocument =
20+
ComposeSchemaDocument(
21+
"""
22+
schema {
23+
query: Query
24+
}
25+
26+
type Query {
27+
foo: String
28+
}
29+
""");
30+
31+
var manager =
32+
new ServiceCollection()
33+
.AddGraphQLGateway("some-name")
34+
.AddInMemoryConfiguration(schemaDocument)
35+
.Services
36+
.BuildServiceProvider()
37+
.GetRequiredService<FusionRequestExecutorManager>();
38+
39+
// act
40+
var act = async () => await manager.GetExecutorAsync("unknown-name");
41+
42+
// assert
43+
var exception = await Assert.ThrowsAsync<InvalidOperationException>(act);
44+
Assert.Equal($"The requested schema 'unknown-name' does not exist.", exception.Message);
45+
}
46+
1547
[Fact]
1648
public async Task CreateExecutor()
1749
{

0 commit comments

Comments
 (0)