public async Task Handle_InitializeMessage_Rejected_With_Extensions() { // arrange var connectionStatus = ConnectionStatus.Reject( "Foo", new Dictionary <string, object> { { "bar", "baz" } }); var interceptor = new SocketSessionInterceptorMock(connectionStatus); var connection = new SocketConnectionMock(); var handler = new InitializeConnectionMessageHandler(interceptor); var message = new InitializeConnectionMessage(); // act await handler.HandleAsync( connection, message, CancellationToken.None); // assert Assert.Collection(connection.SentMessages, t => { Assert.True(t.SequenceEqual( new RejectConnectionMessage( connectionStatus.Message, connectionStatus.Extensions) .Serialize())); }); Assert.True(connection.Closed); }
public async Task Handle_Query_With_Inter_DataReceived_And_Completed() { // arrange var errorHandler = new Mock <IErrorHandler>(); IServiceProvider services = new ServiceCollection() .AddGraphQL() .AddStarWarsTypes() .AddStarWarsRepositories() .AddInMemorySubscriptions() .Services .BuildServiceProvider(); IRequestExecutor executor = await services .GetRequiredService <IRequestExecutorResolver>() .GetRequestExecutorAsync(); var interceptor = new SocketSessionInterceptorMock(); var connection = new SocketConnectionMock { RequestServices = services }; DocumentNode query = Utf8GraphQLParser.Parse("{ hero { name } }"); var handler = new DataStartMessageHandler( executor, interceptor, errorHandler.Object, new NoopExecutionDiagnosticEvents()); var message = new DataStartMessage("123", new GraphQLRequest(query)); var result = (IReadOnlyQueryResult)await executor.ExecuteAsync( QueryRequestBuilder.New() .SetQuery(query) .SetServices(services) .Create()); // act await handler.HandleAsync( connection, message, CancellationToken.None); // assert Assert.Collection(connection.SentMessages, t => { Assert.True(t.SequenceEqual( new DataResultMessage(message.Id, result).Serialize())); }, t => { Assert.True(t.SequenceEqual( new DataCompleteMessage(message.Id).Serialize())); }); }
public void CanHandle_TerminateMessage_True() { // arrange var interceptor = new SocketSessionInterceptorMock(); var handler = new TerminateConnectionMessageHandler(interceptor); var message = new TerminateConnectionMessage(); // act var result = handler.CanHandle(message); // assert Assert.True(result); }
public void CanHandle_AcceptMessage_False() { // arrange var interceptor = new SocketSessionInterceptorMock(); var handler = new TerminateConnectionMessageHandler(interceptor); KeepConnectionAliveMessage message = KeepConnectionAliveMessage.Default; // act var result = handler.CanHandle(message); // assert Assert.False(result); }
public async Task Handle_Stop_Subscription() { // arrange var connection = new SocketConnectionMock(); var subscription = new Mock <ISubscription>(); IRequestExecutor executor = await new ServiceCollection() .AddGraphQL() .AddStarWarsTypes() .AddStarWarsRepositories() .AddInMemorySubscriptions() .Services .BuildServiceProvider() .GetRequiredService <IRequestExecutorResolver>() .GetRequestExecutorAsync(); var stream = (IResponseStream)await executor.ExecuteAsync( "subscription { onReview(episode: NEW_HOPE) { stars } }"); var interceptor = new SocketSessionInterceptorMock(); var subscriptionSession = new SubscriptionSession( new CancellationTokenSource(), interceptor, connection, stream, subscription.Object, new NoopExecutionDiagnosticEvents(), "123"); connection.Subscriptions.Register(subscriptionSession); var handler = new DataStopMessageHandler(); var message = new DataStopMessage("123"); // act await handler.HandleAsync( connection, message, CancellationToken.None); // assert Assert.Empty(connection.Subscriptions); }
public async Task Handle_TerminateMessage_ConnectionClosed() { // arrange var connection = new SocketConnectionMock { Closed = false }; var interceptor = new SocketSessionInterceptorMock(); var handler = new TerminateConnectionMessageHandler(interceptor); var message = new TerminateConnectionMessage(); // act await handler.HandleAsync( connection, message, CancellationToken.None); // assert Assert.True(connection.Closed); }
public async Task Handle_InitializeMessage_Rejected() { // arrange var interceptor = new SocketSessionInterceptorMock(ConnectionStatus.Reject()); var connection = new SocketConnectionMock(); var handler = new InitializeConnectionMessageHandler(interceptor); var message = new InitializeConnectionMessage(); // act await handler.HandleAsync( connection, message, CancellationToken.None); // assert Assert.Collection(connection.SentMessages, t => { Assert.True(t.SequenceEqual( new RejectConnectionMessage( ConnectionStatus.Reject().Message) .Serialize())); }); }
public async Task Handle_Subscription_DataReceived_And_Completed() { // arrange var errorHandler = new Mock <IErrorHandler>(); IServiceProvider services = new ServiceCollection() .AddGraphQL() .AddStarWarsTypes() .AddStarWarsRepositories() .AddInMemorySubscriptions() .Services .BuildServiceProvider(); IRequestExecutor executor = await services .GetRequiredService <IRequestExecutorResolver>() .GetRequestExecutorAsync(); var interceptor = new SocketSessionInterceptorMock(); var connection = new SocketConnectionMock { RequestServices = services }; DocumentNode query = Utf8GraphQLParser.Parse( "subscription { onReview(episode: NEW_HOPE) { stars } }"); var handler = new DataStartMessageHandler( executor, interceptor, errorHandler.Object, new NoopExecutionDiagnosticEvents()); var message = new DataStartMessage("123", new GraphQLRequest(query)); // act await handler.HandleAsync( connection, message, CancellationToken.None); // assert Assert.Empty(connection.SentMessages); Assert.NotEmpty(connection.Subscriptions); var stream = (IResponseStream)await executor.ExecuteAsync( "subscription { onReview(episode: NEW_HOPE) { stars } }"); await executor.ExecuteAsync(@" mutation { createReview(episode:NEW_HOPE review: { commentary: ""foo"" stars: 5 }) { stars } }"); using var cts = new CancellationTokenSource(15000); ConfiguredCancelableAsyncEnumerable <IQueryResult> .Enumerator enumerator = stream.ReadResultsAsync().WithCancellation(cts.Token).GetAsyncEnumerator(); Assert.True(await enumerator.MoveNextAsync()); await Task.Delay(2000, cts.Token); Assert.Collection(connection.SentMessages, t => { Assert.True(t.SequenceEqual( new DataResultMessage(message.Id, enumerator.Current).Serialize())); }); }