public void ReceiveExtensions_ReadBodyAsJson_Streams_Zero()
        {
            var request = new ReceiveRequest();
            var result  = request.ReadBodyAsJson <dynamic>();

            Assert.Null(result);
        }
        public void ReceiveExtensions_ReadBodyAsJson_Streams()
        {
            var activity = new Activity {
                Type = ActivityTypes.Message
            };
            var stringInput       = JsonConvert.SerializeObject(activity);
            var stream            = new MemoryStream(Encoding.UTF8.GetBytes(stringInput));
            var mockContentStream = new Mock <IContentStream>();

            mockContentStream.Setup(e => e.Stream).Returns(stream);

            var request = new ReceiveRequest
            {
                Streams = new List <IContentStream> {
                    mockContentStream.Object
                }
            };
            var result = request.ReadBodyAsJson <Activity>();

            Assert.NotNull(result);
            Assert.Equal(activity.Type, result.Type);
        }
        public override async Task <StreamingResponse> ProcessRequestAsync(ReceiveRequest request, ILogger <RequestHandler> logger = null, object context = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (request.Verb == "POST")
            {
                var firstActivity = request.ReadBodyAsJson <Activity>();

                if (request.Streams.Count > 1)
                {
                    if (firstActivity == null)
                    {
                        throw new InvalidOperationException("Attachment streams received with activity set, but no activities present in activity set.");
                    }

                    var streamAttachments = new List <Attachment>();
                    for (int i = 1; i < request.Streams.Count; i++)
                    {
                        var stream = request.Streams[i].Stream;
                        streamAttachments.Add(new Attachment()
                        {
                            ContentType = request.Streams[i].ContentType, Content = request.Streams[i].Stream
                        });
                    }

                    if (firstActivity.Attachments != null)
                    {
                        firstActivity.Attachments = firstActivity.Attachments.Concat(streamAttachments).ToArray();
                    }
                    else
                    {
                        firstActivity.Attachments = streamAttachments.ToArray();
                    }
                }

                _receiveActivities(firstActivity);

                return(StreamingResponse.OK());
            }
            return(StreamingResponse.NotFound());
        }