Skip to content

Commit 2fbd83d

Browse files
committed
fix subscription test to work arround graphql-dotnet/server#199
1 parent e70f7a4 commit 2fbd83d

File tree

7 files changed

+95
-37
lines changed

7 files changed

+95
-37
lines changed

root.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<RepositoryType>git</RepositoryType>
1818
<RepositoryUrl>https://github.com/graphql-dotnet/graphql-client.git</RepositoryUrl>
1919
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
20-
<Version>2.0.0-alpha.4.subscription-api.5</Version>
20+
<Version>2.0.0-alpha.4.subscription-api.6</Version>
2121
<WarningLevel>4</WarningLevel>
2222
</PropertyGroup>
2323

tests/GraphQL.Integration.Tests/GraphQLClientExtensions.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,23 @@ public static async Task<GraphQLResponse> AddMessageAsync(this GraphQLHttpClient
2929
};
3030
return await client.SendMutationAsync(graphQLRequest).ConfigureAwait(false);
3131
}
32+
33+
public static async Task<GraphQLResponse> JoinDeveloperUser(this GraphQLHttpClient client)
34+
{
35+
var graphQLRequest = new GraphQLRequest(@"
36+
mutation($userId: String){
37+
join(userId: $userId){
38+
displayName
39+
id
40+
}
41+
}")
42+
{
43+
Variables = new
44+
{
45+
userId = "1"
46+
}
47+
};
48+
return await client.SendMutationAsync(graphQLRequest).ConfigureAwait(false);
49+
}
3250
}
3351
}

tests/GraphQL.Integration.Tests/SubscriptionsTest.cs

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Diagnostics;
33
using System.Net.WebSockets;
44
using System.Threading;
5+
using System.Threading.Tasks;
56
using GraphQL.Client.Http;
67
using GraphQL.Common.Request;
78
using GraphQL.Common.Response;
@@ -163,11 +164,9 @@ public async void CanReconnectWithSameObservable()
163164

164165
private const string SubscriptionQuery2 = @"
165166
subscription {
166-
contentAdded{
167-
content
168-
from {
169-
displayName
170-
}
167+
userJoined{
168+
displayName
169+
id
171170
}
172171
}";
173172

@@ -185,9 +184,11 @@ public async void CanConnectTwoSubscriptionsSimultaneously()
185184

186185
Debug.WriteLine("creating subscription stream");
187186
IObservable<GraphQLResponse> observable1 = client.CreateSubscriptionStream(SubscriptionRequest, callbackTester.Callback);
187+
IObservable<GraphQLResponse> observable2 = client.CreateSubscriptionStream(SubscriptionRequest2, callbackTester2.Callback);
188188

189189
Debug.WriteLine("subscribing...");
190190
var tester = observable1.SubscribeTester();
191+
var tester2 = observable2.SubscribeTester();
191192

192193
const string message1 = "Hello World";
193194
var response = await client.AddMessageAsync(message1).ConfigureAwait(false);
@@ -197,42 +198,31 @@ public async void CanConnectTwoSubscriptionsSimultaneously()
197198
Assert.Equal(message1, (string)gqlResponse.Data.messageAdded.content.Value);
198199
});
199200

200-
IObservable<GraphQLResponse> observable2 = client.CreateSubscriptionStream(SubscriptionRequest2, callbackTester2.Callback);
201-
var tester2 = observable2.SubscribeTester();
202-
tester2.ShouldHaveReceivedUpdate(gqlResponse =>
203-
{
204-
Assert.Equal(message1, (string)gqlResponse.Data.contentAdded.content.Value);
205-
Assert.Equal("tester", (string)gqlResponse.Data.contentAdded.from.displayName.Value);
206-
});
201+
await Task.Delay(500); // ToDo: can be removed after https://github.com/graphql-dotnet/server/pull/199 was merged and released
202+
203+
response = await client.JoinDeveloperUser().ConfigureAwait(false);
204+
Assert.Equal("developer", (string)response.Data.join.displayName.Value);
207205

208-
const string message2 = "How are you?";
209-
response = await client.AddMessageAsync(message2).ConfigureAwait(false);
210-
Assert.Equal(message2, (string)response.Data.addMessage.content);
211-
tester.ShouldHaveReceivedUpdate(gqlResponse =>
212-
{
213-
Assert.Equal(message2, (string)gqlResponse.Data.messageAdded.content.Value);
214-
});
215206
tester2.ShouldHaveReceivedUpdate(gqlResponse =>
216207
{
217-
Assert.Equal(message2, (string)gqlResponse.Data.contentAdded.content.Value);
218-
Assert.Equal("tester", (string)gqlResponse.Data.contentAdded.from.displayName.Value);
208+
Assert.Equal("1", (string)gqlResponse.Data.userJoined.id.Value);
209+
Assert.Equal("developer", (string)gqlResponse.Data.userJoined.displayName.Value);
219210
});
220-
211+
221212
Debug.WriteLine("disposing subscription...");
222-
tester.Dispose();
213+
tester2.Dispose();
223214

224215
const string message3 = "lorem ipsum dolor si amet";
225216
response = await client.AddMessageAsync(message3).ConfigureAwait(false);
226217
Assert.Equal(message3, (string)response.Data.addMessage.content);
227-
tester2.ShouldHaveReceivedUpdate(gqlResponse =>
218+
tester.ShouldHaveReceivedUpdate(gqlResponse =>
228219
{
229-
Assert.Equal(message3, (string)gqlResponse.Data.contentAdded.content.Value);
230-
Assert.Equal("tester", (string)gqlResponse.Data.contentAdded.from.displayName.Value);
220+
Assert.Equal(message3, (string)gqlResponse.Data.messageAdded.content.Value);
231221
});
232222

233223
// disposing the client should complete the subscription
234224
client.Dispose();
235-
tester2.ShouldHaveCompleted();
225+
tester.ShouldHaveCompleted();
236226
}
237227
}
238228

tests/IntegrationTestServer/ChatSchema/ChatMutation.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,18 @@ public ChatMutation(IChat chat)
1616
var message = chat.AddMessage(receivedMessage);
1717
return message;
1818
});
19-
}
19+
20+
Field<MessageFromType>("join",
21+
arguments: new QueryArguments(
22+
new QueryArgument<StringGraphType> { Name = "userId" }
23+
),
24+
resolve: context =>
25+
{
26+
var userId = context.GetArgument<string>("userId");
27+
var userJoined = chat.Join(userId);
28+
return userJoined;
29+
});
30+
}
2031
}
2132

2233
public class MessageInputType : InputObjectGraphType

tests/IntegrationTestServer/ChatSchema/ChatSubscriptions.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,15 @@ public ChatSubscriptions(IChat chat)
4343
Resolver = new FuncFieldResolver<Message>(ResolveMessage),
4444
Subscriber = new EventStreamResolver<Message>(SubscribeById)
4545
});
46-
}
46+
47+
AddField(new EventStreamFieldType
48+
{
49+
Name = "userJoined",
50+
Type = typeof(MessageFromType),
51+
Resolver = new FuncFieldResolver<MessageFrom>(context => context.Source as MessageFrom),
52+
Subscriber = new EventStreamResolver<MessageFrom>(context => _chat.UserJoined())
53+
});
54+
}
4755

4856
private IObservable<Message> SubscribeById(ResolveEventStreamContext context)
4957
{

tests/IntegrationTestServer/ChatSchema/IChat.cs

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,20 @@ public interface IChat
1111

1212
Message AddMessage(Message message);
1313

14-
IObservable<Message> Messages(string user);
14+
MessageFrom Join(string userId);
1515

16-
Message AddMessage(ReceivedMessage message);
16+
IObservable<Message> Messages(string user);
17+
IObservable<MessageFrom> UserJoined();
18+
19+
Message AddMessage(ReceivedMessage message);
1720
}
1821

1922
public class Chat : IChat
2023
{
2124
private readonly ISubject<Message> _messageStream = new ReplaySubject<Message>(1);
25+
private readonly ISubject<MessageFrom> _userJoined = new Subject<MessageFrom>();
2226

23-
public Chat()
27+
public Chat()
2428
{
2529
AllMessages = new ConcurrentStack<Message>();
2630
Users = new ConcurrentDictionary<string, string>
@@ -58,9 +62,25 @@ public Message AddMessage(Message message)
5862
AllMessages.Push(message);
5963
_messageStream.OnNext(message);
6064
return message;
61-
}
65+
}
66+
67+
public MessageFrom Join(string userId)
68+
{
69+
if (!Users.TryGetValue(userId, out var displayName))
70+
{
71+
displayName = "(unknown)";
72+
}
73+
74+
var joinedUser = new MessageFrom {
75+
Id = userId,
76+
DisplayName = displayName
77+
};
6278

63-
public IObservable<Message> Messages(string user)
79+
_userJoined.OnNext(joinedUser);
80+
return joinedUser;
81+
}
82+
83+
public IObservable<Message> Messages(string user)
6484
{
6585
return _messageStream
6686
.Select(message =>
@@ -75,5 +95,16 @@ public void AddError(Exception exception)
7595
{
7696
_messageStream.OnError(exception);
7797
}
78-
}
98+
99+
public IObservable<MessageFrom> UserJoined()
100+
{
101+
return _userJoined.AsObservable();
102+
}
103+
}
104+
105+
public class User
106+
{
107+
public string Id { get; set; }
108+
public string Name { get; set; }
109+
}
79110
}

tests/IntegrationTestServer/IntegrationTestServer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<ItemGroup>
1212
<PackageReference Include="GraphQL.Server.Transports.AspNetCore" Version="3.4.0" />
1313
<PackageReference Include="GraphQL.Server.Transports.Subscriptions.Abstractions" Version="3.4.0" />
14-
<PackageReference Include="GraphQL.Server.Transports.WebSockets" Version="3.4.1-1.multiple-subscriptions.2" />
14+
<PackageReference Include="GraphQL.Server.Transports.WebSockets" Version="3.4.0" />
1515
<PackageReference Include="GraphQL.Server.Ui.GraphiQL" Version="3.4.0" />
1616
<PackageReference Include="GraphQL.Server.Ui.Playground" Version="3.4.0" />
1717
<PackageReference Include="GraphQL.Server.Ui.Voyager" Version="3.4.0" />

0 commit comments

Comments
 (0)