public async Task ActivePersistedQueries_PersistedQuery_IsExecuted() { // arrange var serviceCollection = new ServiceCollection(); // configure presistence serviceCollection.AddGraphQLSchema(b => b .AddDocumentFromString("type Query { foo: String }") .AddResolver("Query", "foo", "bar")); serviceCollection.AddQueryExecutor(b => b .AddSha256DocumentHashProvider() .UseActivePersistedQueryPipeline()); // add in-memory query storage serviceCollection.AddSingleton <InMemoryQueryStorage>(); serviceCollection.AddSingleton <IReadStoredQueries>(sp => sp.GetRequiredService <InMemoryQueryStorage>()); serviceCollection.AddSingleton <IWriteStoredQueries>(sp => sp.GetRequiredService <InMemoryQueryStorage>()); IServiceProvider services = serviceCollection.BuildServiceProvider(); IQueryExecutor executor = services.GetRequiredService <IQueryExecutor>(); var hashProvider = services.GetRequiredService <IDocumentHashProvider>(); var storage = services.GetRequiredService <InMemoryQueryStorage>(); var query = new QuerySourceText("{ foo }"); string hash = hashProvider.ComputeHash(query.ToSpan()); await storage.WriteQueryAsync(hash, query); // act IExecutionResult result = await executor.ExecuteAsync( QueryRequestBuilder.New() .SetQueryName(hash) .Create()); // assert Assert.True(storage.ReadWithSuccess); result.ToJson().MatchSnapshot(); }
public void QuerySourceText_WriteTo() { // arrange var query = new QuerySourceText("{ a }"); byte[] buffer; // act using (var stream = new MemoryStream()) { query.WriteTo(stream); buffer = stream.ToArray(); } // assert Utf8GraphQLParser .Parse(buffer) .Print(true) .MatchSnapshot(); }
public async Task ActivePersistedQueries_SaveQuery_InvalidHash_MD5( HashFormat format) { // arrange var serviceCollection = new ServiceCollection(); // configure presistence serviceCollection.AddGraphQLSchema(b => b .AddDocumentFromString("type Query { foo: String }") .AddResolver("Query", "foo", "bar")); serviceCollection.AddQueryExecutor(b => b .AddMD5DocumentHashProvider(format) .UseActivePersistedQueryPipeline()); // add in-memory query storage serviceCollection.AddSingleton <InMemoryQueryStorage>(); serviceCollection.AddSingleton <IReadStoredQueries>(sp => sp.GetRequiredService <InMemoryQueryStorage>()); serviceCollection.AddSingleton <IWriteStoredQueries>(sp => sp.GetRequiredService <InMemoryQueryStorage>()); IServiceProvider services = serviceCollection.BuildServiceProvider(); IQueryExecutor executor = services.GetRequiredService <IQueryExecutor>(); var hashProvider = services.GetRequiredService <IDocumentHashProvider>(); var storage = services.GetRequiredService <InMemoryQueryStorage>(); var query = new QuerySourceText("{ foo }"); string hash = hashProvider.ComputeHash(query.AsSpan()); // act and assert IExecutionResult result = await executor.ExecuteAsync( QueryRequestBuilder.New() .SetQueryName(hash) .AddExtension("persistedQuery", new Dictionary <string, object> { { hashProvider.Name, hash } }) .Create()); result.MatchSnapshot(new SnapshotNameExtension( "Query_Not_Found_" + format)); result = await executor.ExecuteAsync( QueryRequestBuilder.New() .SetQueryName(hash) .SetQuery("{ foo }") .AddExtension("persistedQuery", new Dictionary <string, object> { { hashProvider.Name, hash } }) .Create()); result.MatchSnapshot(new SnapshotNameExtension( "Query_Stored_" + format)); result = await executor.ExecuteAsync( QueryRequestBuilder.New() .SetQueryName(hash) .AddExtension("persistedQuery", new Dictionary <string, object> { { hashProvider.Name, hash } }) .Create()); result.MatchSnapshot(new SnapshotNameExtension( "Query_Loaded_From_Cache_" + format)); }