예제 #1
0
        public async void CanCreateObservableSubscription()
        {
            var callbackMonitor = ChatClient.ConfigureMonitorForOnWebsocketConnected();
            await ChatClient.InitializeWebsocketConnection();

            callbackMonitor.Should().HaveBeenInvokedWithPayload();

            Debug.WriteLine("creating subscription stream");
            var observable = ChatClient.CreateSubscriptionStream <MessageAddedSubscriptionResult>(_subscriptionRequest);

            Debug.WriteLine("subscribing...");
            using var observer = observable.Observe();
            await observer.Should().PushAsync(1);

            observer.RecordedMessages.Last().Data.MessageAdded.Content.Should().Be(InitialMessage.Content);

            const string message1 = "Hello World";
            var          response = await ChatClient.AddMessageAsync(message1);

            response.Data.AddMessage.Content.Should().Be(message1);
            await observer.Should().PushAsync(2);

            observer.RecordedMessages.Last().Data.MessageAdded.Content.Should().Be(message1);

            const string message2 = "lorem ipsum dolor si amet";

            response = await ChatClient.AddMessageAsync(message2);

            response.Data.AddMessage.Content.Should().Be(message2);
            await observer.Should().PushAsync(3);

            observer.RecordedMessages.Last().Data.MessageAdded.Content.Should().Be(message2);

            // disposing the client should throw a TaskCanceledException on the subscription
            ChatClient.Dispose();
            await observer.Should().CompleteAsync();
        }