Пример #1
0
        public async Task Test_Recieve_Multiple_Subscribers()
        {
            // Arrange
            var tokenSource = new CancellationTokenSource();

            var client        = _factory.CreateClient();
            var graphQLClient = GraphQLHttpClient.Default(client);

            // Create websocket GraphQL client
            var wsClient = _factory.Server.CreateWebSocketClient();

            wsClient.ConfigureRequest = request => request.Headers.Add("Sec-WebSocket-Protocol", "graphql-ws");

            var wsUri = new UriBuilder(_factory.Server.BaseAddress)
            {
                Scheme = "wss",
                Path   = "graphql"
            }.Uri;

            var websocket = await wsClient.ConnectAsync(wsUri, tokenSource.Token);

            var graphQLSubscriptionClient = new GraphQLSubscriptionClient(websocket, tokenSource.Token, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields(), new GraphQLDeserilization());
            await graphQLSubscriptionClient.Initilize();

            // Act
            // Registrer operations
            var operationByUser = await graphQLSubscriptionClient.ExecuteOperation <MessageAddedByUserSubscription>(new GraphQLQueryArgument("fromId", "SAHB"));

            List <GraphQLDataResult <MessageAddedByUserSubscription> > recievedDataByUser = new List <GraphQLDataResult <MessageAddedByUserSubscription> >();

            operationByUser.DataRecieved += (sender, e) =>
            {
                recievedDataByUser.Add(e.ReceivedData);
            };

            var operation = await graphQLSubscriptionClient.ExecuteOperation <MessageAddedSubscription>();

            List <GraphQLDataResult <MessageAddedSubscription> > recievedData = new List <GraphQLDataResult <MessageAddedSubscription> >();

            operation.DataRecieved += (sender, e) =>
            {
                recievedData.Add(e.ReceivedData);
            };
            await Task.Delay(TimeSpan.FromSeconds(1));

            // Send 2 message from 2 users only one should be retrieved in subscription
            await graphQLClient.CreateMutation <SendMessageMutation>("http://localhost/graphql", arguments : new GraphQLQueryArgument("message", new MessageInputType
            {
                content = "Message 1",
                fromId  = "SAHB",
                sentAt  = DateTime.Now.AddDays(-1)
            })).Execute();

            await Task.Delay(TimeSpan.FromSeconds(1));

            // Assert
            Assert.Single(recievedDataByUser);
            Assert.Single(recievedData);
        }
Пример #2
0
        public async Task Test_Complete()
        {
            // Arrange
            var tokenSource = new CancellationTokenSource();

            var client        = _factory.CreateClient();
            var graphQLClient = GraphQLHttpClient.Default(client);

            // Create websocket GraphQL client
            var wsClient = _factory.Server.CreateWebSocketClient();

            wsClient.ConfigureRequest = request => request.Headers.Add("Sec-WebSocket-Protocol", "graphql-ws");

            var wsUri = new UriBuilder(_factory.Server.BaseAddress)
            {
                Scheme = "wss",
                Path   = "graphql"
            }.Uri;

            var websocket = await wsClient.ConnectAsync(wsUri, tokenSource.Token);

            var graphQLSubscriptionClient = new GraphQLSubscriptionClient(websocket, tokenSource.Token, new GraphQLFieldBuilder(), new GraphQLQueryGeneratorFromFields(), new GraphQLDeserilization());
            await graphQLSubscriptionClient.Initilize();

            // Act
            List <bool> completedTimes = new List <bool>();

            // Registrer operations and stop it
            var operation = await graphQLSubscriptionClient.ExecuteOperation <MessageAddedSubscription>();

            operation.Completed += (sender, e) =>
            {
                completedTimes.Add(true);
            };
            await operation.Stop();

            await Task.Delay(TimeSpan.FromSeconds(2));

            // Assert
            Assert.Single(completedTimes);
        }