public async void FollowUsers_NoUsers_AnotherUser() { var id = Guid.NewGuid().ToString(); var session1 = await _client.AuthenticateCustomAsync(id); var session2 = await _client.AuthenticateCustomAsync(id + "a"); var completer = new TaskCompletionSource <IStatusPresenceEvent>(); var canceller = new CancellationTokenSource(); canceller.Token.Register(() => completer.SetCanceled()); canceller.CancelAfter(Timeout); _socket.ReceivedStatusPresence += statuses => completer.SetResult(statuses); _socket.ReceivedError += e => completer.TrySetException(e); await _socket.ConnectAsync(session1); await _socket.FollowUsersAsync(new[] { session2.UserId }); var socket = Socket.From(_client); await socket.ConnectAsync(session2); await socket.UpdateStatusAsync("new status change"); var result = await completer.Task; Assert.NotNull(result); Assert.Contains(result.Joins, joined => joined.UserId.Equals(session2.UserId)); }
public async void Socket_AwaitedTasksAfterDisconnect_AreCanceled() { var id = Guid.NewGuid().ToString(); var session = await _client.AuthenticateCustomAsync(id); await _socket.ConnectAsync(session); await _socket.CloseAsync(); var statusTask1 = _socket.FollowUsersAsync(new[] { session.UserId }); var statusTask2 = _socket.FollowUsersAsync(new[] { session.UserId }); await Assert.ThrowsAsync <TaskCanceledException>(() => Task.WhenAll(statusTask1, statusTask2)); }
public async Task ShouldFollowStatusUpdate() { var session1 = await _client.AuthenticateCustomAsync($"{Guid.NewGuid()}"); var session2 = await _client.AuthenticateCustomAsync($"{Guid.NewGuid()}"); var completer = new TaskCompletionSource <IStatusPresenceEvent>(); _socket.OnStatusPresence += (sender, presence) => completer.SetResult(presence); await _socket.ConnectAsync(session1); await _socket.FollowUsersAsync(new[] { session2.UserId }); var socket2 = _client.CreateWebSocket(); await socket2.ConnectAsync(session2, default(CancellationToken), true); await socket2.UpdateStatusAsync("online"); var result = await completer.Task; Assert.NotNull(result); Assert.That(result.Joins.Count(p => p.UserId.Equals(session2.UserId)), Is.EqualTo(1)); await socket2.DisconnectAsync(); }