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);
        }
Example #2
0
        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()));
            });
        }
Example #3
0
    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);
    }
Example #4
0
    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);
    }
Example #5
0
        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);
        }
Example #6
0
    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()));
            });
        }
Example #8
0
        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()));
            });
        }