Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tobias-tengler committed Mar 22, 2024
1 parent 40f0574 commit b0271ee
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,15 @@ public static FusionGatewayBuilder ModifyFusionOptions(
throw new ArgumentNullException(nameof(modify));
}

builder.Services.AddSingleton(modify);
builder.CoreBuilder.Configure(
c =>
{
c.OnConfigureSchemaServicesHooks.Add(
(ctx, sc) =>
{
sc.AddSingleton(modify);
});
});

return builder;
}
Expand Down Expand Up @@ -547,8 +555,7 @@ internal static ValueTask<ISchema> BuildSchemaAsync(

private static FusionOptions GetFusionOptions(IServiceProvider sp)
{
var appSp = sp.GetApplicationServices();
var configures = appSp.GetServices<Action<FusionOptions>>();
var configures = sp.GetServices<Action<FusionOptions>>();
var options = new FusionOptions();

foreach (var configure in configures)
Expand Down
73 changes: 73 additions & 0 deletions src/HotChocolate/Fusion/test/Core.Tests/OptionsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
using HotChocolate.Fusion.Composition;
using HotChocolate.Fusion.Composition.Features;
using HotChocolate.Fusion.Metadata;
using HotChocolate.Fusion.Shared;
using HotChocolate.Skimmed.Serialization;
using Microsoft.Extensions.DependencyInjection;

namespace HotChocolate.Fusion;

public class OptionsTests
{
[Fact]
public async Task Options_Are_Scoped_To_Particular_Gateway_Builder()
{
using var demoProject = await DemoProject.CreateAsync();

var fusionGraph = await FusionGraphComposer.ComposeAsync(
new[]
{
demoProject.Appointment.ToConfiguration(),
},
new FusionFeatureCollection(FusionFeatures.NodeField));

var services = new ServiceCollection()
.AddSingleton(demoProject.HttpClientFactory);

var executor1 = await services
.AddFusionGatewayServer("graph1")
.ConfigureFromDocument(SchemaFormatter.FormatAsDocument(fusionGraph))
.ModifyFusionOptions(options => options.AllowFusionQueryPlan = !options.AllowFusionQueryPlan)
.BuildRequestExecutorAsync("graph1");

var executor2 = await services.AddFusionGatewayServer("graph2")
.ConfigureFromDocument(SchemaFormatter.FormatAsDocument(fusionGraph))
.BuildRequestExecutorAsync("graph2");

var options1 = executor1.Services.GetRequiredService<IFusionOptionsAccessor>();
var options2 = executor2.Services.GetRequiredService<IFusionOptionsAccessor>();
var defaultOptions = new FusionOptions();

Assert.Equal(options1.AllowFusionQueryPlan, !defaultOptions.AllowFusionQueryPlan);
Assert.Equal(options2.AllowFusionQueryPlan, defaultOptions.AllowFusionQueryPlan);
}

[Fact]
public async Task Multiple_Option_Modifications_Are_Applied()
{
using var demoProject = await DemoProject.CreateAsync();

var fusionGraph = await FusionGraphComposer.ComposeAsync(
new[]
{
demoProject.Appointment.ToConfiguration(),
},
new FusionFeatureCollection(FusionFeatures.NodeField));

var services = new ServiceCollection()
.AddSingleton(demoProject.HttpClientFactory);

var executor = await services
.AddFusionGatewayServer()
.ConfigureFromDocument(SchemaFormatter.FormatAsDocument(fusionGraph))
.ModifyFusionOptions(options => options.AllowFusionQueryPlan = !options.AllowFusionQueryPlan)
.ModifyFusionOptions(options => options.IncludeFusionDebugInfo = !options.IncludeFusionDebugInfo)
.BuildRequestExecutorAsync();

var options = executor.Services.GetRequiredService<IFusionOptionsAccessor>();
var defaultOptions = new FusionOptions();

Assert.Equal(options.AllowFusionQueryPlan, !defaultOptions.AllowFusionQueryPlan);
Assert.Equal(options.IncludeFusionDebugInfo, !defaultOptions.IncludeFusionDebugInfo);
}
}

0 comments on commit b0271ee

Please sign in to comment.