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); }
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); }