コード例 #1
0
        public async Task Failed_Subscribe_with_null_stream()
        {
            /* Given */
            string id      = "1";
            var    payload = new OperationMessagePayload();
            var    context = new MessageHandlingContext(_server, null);

            _executer.ExecuteAsync(null, null, null, null, null).ReturnsForAnyArgs(
                new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "1", null }
                }
            });

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, context);

            /* Then */
            await _writer.Received().SendAsync(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_ERROR));
        }
コード例 #2
0
        public async Task Write_Complete_on_unsubscribe()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var result  = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "1", Substitute.For <IObservable <ExecutionResult> >() }
                }
            };

            var sut = new Subscription(id, payload, result, _writer, null, new NullLogger <Subscription>());

            /* When */
            await sut.UnsubscribeAsync();


            /* Then */
            await _writer.Received().SendAsync(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_COMPLETE));
        }
コード例 #3
0
        public async Task Unsubscribe_from_stream()
        {
            /* Given */
            var id          = "1";
            var payload     = new OperationMessagePayload();
            var unsubscribe = Substitute.For <IDisposable>();
            var stream      = Substitute.For <IObservable <ExecutionResult> >();

            stream.Subscribe(null).ReturnsForAnyArgs(unsubscribe);
            var result = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "op", stream }
                }
            };
            var sut = new Subscription(id, payload, result, _writer, null, new NullLogger <Subscription>());

            /* When */
            await sut.UnsubscribeAsync();


            /* Then */
            unsubscribe.Received().Dispose();
        }
コード例 #4
0
        public void On_stream_complete()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var stream  = new ReplaySubject <ExecutionResult>(1);
            var result  = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "op", stream }
                }
            };

            var completed = Substitute.For <Action <Subscription> >();
            var sut       = new Subscription(id, payload, result, _writer, completed, new NullLogger <Subscription>());

            /* When */
            stream.OnCompleted();


            /* Then */
            Assert.False(stream.HasObservers);
            completed.Received().Invoke(sut);
            _writer.Received().Post(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_COMPLETE));
        }
コード例 #5
0
        public void On_data_from_stream()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var stream  = new ReplaySubject <ExecutionResult>(1);
            var result  = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "op", stream }
                }
            };
            var expected = new ExecutionResult();
            var sut      = new Subscription(id, payload, result, _writer, null, new NullLogger <Subscription>());

            /* When */
            stream.OnNext(expected);


            /* Then */
            _writer.Received().Post(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_DATA));
        }
コード例 #6
0
        public async Task Failed_Subscribe_writes_error()
        {
            /* Given */
            string id      = "1";
            var    payload = new OperationMessagePayload();
            var    context = new MessageHandlingContext(_server, null);

            _executer.ExecuteAsync(null, null, null, null, null).ReturnsForAnyArgs(
                new SubscriptionExecutionResult
            {
                Errors = new ExecutionErrors
                {
                    new ExecutionError("error")
                }
            });

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, context);

            /* Then */
            await _writer.Received().SendAsync(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_ERROR));
        }
コード例 #7
0
        public async Task Subscribe_adds()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, _writer);

            /* Then */
            Assert.Single(_sut, sub => sub.Id == id);
        }
コード例 #8
0
        public async Task Subscribe_adds()
        {
            /* Given */
            string id      = "1";
            var    payload = new OperationMessagePayload();
            var    context = new MessageHandlingContext(_server, null);

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, context);

            /* Then */
            Assert.Single(_sut, sub => sub.Id == id);
        }
コード例 #9
0
        public async Task Unsubscribe_removes()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            await _sut.SubscribeOrExecuteAsync(id, payload, _writer);

            /* When */
            await _sut.UnsubscribeAsync(id);

            /* Then */
            Assert.Empty(_sut);
        }
コード例 #10
0
        public async Task Subscribe_executes()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, _writer);

            /* Then */
            await _executer.Received().ExecuteAsync(
                Arg.Is(payload.OperationName),
                Arg.Is(payload.Query),
                Arg.Any <dynamic>());
        }
コード例 #11
0
        public async Task Unsubscribe_removes()
        {
            /* Given */
            string id      = "1";
            var    payload = new OperationMessagePayload();
            var    context = new MessageHandlingContext(_server, null);

            await _sut.SubscribeOrExecuteAsync(id, payload, context);

            /* When */
            await _sut.UnsubscribeAsync(id);

            /* Then */
            Assert.Empty(_sut);
        }
コード例 #12
0
        public async Task Unsubscribe_writes_complete()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            await _sut.SubscribeOrExecuteAsync(id, payload, _writer);

            /* When */
            await _sut.UnsubscribeAsync(id);

            /* Then */
            await _writer.Received().SendAsync(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_COMPLETE));
        }
コード例 #13
0
        public async Task Subscribe_executes()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var context = new MessageHandlingContext(_server, null);

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, context);

            /* Then */
            await _executer.Received().ExecuteAsync(
                Arg.Is(payload.OperationName),
                Arg.Is(payload.Query),
                Arg.Any <dynamic>(),
                context);
        }
コード例 #14
0
        public async Task Unsubscribe_writes_complete()
        {
            /* Given */
            string id      = "1";
            var    payload = new OperationMessagePayload();
            var    context = new MessageHandlingContext(_server, null);

            await _sut.SubscribeOrExecuteAsync(id, payload, context);

            /* When */
            await _sut.UnsubscribeAsync(id);

            /* Then */
            await _writer.Received().SendAsync(
                Arg.Is <OperationMessage>(
                    message => message.Id == id &&
                    message.Type == MessageType.GQL_COMPLETE));
        }
コード例 #15
0
        public void Subscribe_to_stream()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var stream  = new Subject <ExecutionResult>();
            var result  = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "op", stream }
                }
            };

            /* When */
            var sut = new Subscription(id, payload, result, _writer, null, new NullLogger <Subscription>());

            /* Then */
            Assert.True(stream.HasObservers);
        }
コード例 #16
0
        public void Subscribe_to_stream()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var stream  = Substitute.For <IObservable <ExecutionResult> >();
            var result  = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "op", stream }
                }
            };

            /* When */
            var sut = new Subscription(id, payload, result, _writer, null, new NullLogger <Subscription>());


            /* Then */
            stream.Received().Subscribe(Arg.Is <Subscription>(sub => sub.Id == id));
        }
コード例 #17
0
        public async Task Failed_Subscribe_does_not_add()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();

            _executer.ExecuteAsync(null, null, null).ReturnsForAnyArgs(
                new SubscriptionExecutionResult
            {
                Errors = new ExecutionErrors
                {
                    new ExecutionError("error")
                }
            });

            /* When */
            await _sut.SubscribeOrExecuteAsync(id, payload, _writer);

            /* Then */
            Assert.Empty(_sut);
        }
コード例 #18
0
        public void Subscribe_to_completed_stream_should_not_throw()
        {
            /* Given */
            var id      = "1";
            var payload = new OperationMessagePayload();
            var subject = new Subject <ExecutionResult>();

            subject.OnCompleted();
            var stream = subject;
            var result = new SubscriptionExecutionResult
            {
                Streams = new Dictionary <string, IObservable <ExecutionResult> >
                {
                    { "op", stream }
                }
            };

            /* When */
            /* Then */
            var sut = new Subscription(id, payload, result, _writer, null, new NullLogger <Subscription>());
        }