public async Task RequestIsNotSplitIfLessThanOrEqualToMaxTest(int maxRequestSize, [Frozen] MiddlewareContext context)
        {
            var options = new WebApiRequestOptions
            {
                BulkQueryParameterIdsName = "ids",
                EndpointPath  = "/some/endpoint",
                EndpointQuery = new Dictionary <string, string>
                {
                    ["ids"] = "K1,K2,K3"
                }
            };

            context.Request.Options.Returns(options);
            var elements = new[]
            {
                new Element {
                    Id = "K1", Value = "V1"
                },
                new Element {
                    Id = "K2", Value = "V2"
                },
                new Element {
                    Id = "K3", Value = "V3"
                }
            };

            var middleware = new RequestSplitterMiddleware {
                MaxRequestSize = maxRequestSize
            };
            var response = await middleware.OnRequestAsync(context, (c, t) =>
            {
                var ids = c.Request.Options.EndpointQuery["ids"].Split(',');
                ids.Should().HaveCountLessOrEqualTo(middleware.MaxRequestSize);
                ids.Should().BeEquivalentTo(elements.Select(x => x.Id));

                IWebApiResponse innerResponse = new WebApiResponse(JsonSerializer.Serialize(elements));
                return(Task.FromResult(innerResponse));
            });

            var actual = JsonSerializer.Deserialize <IList <Element> >(response.Content);

            actual.Should().BeEquivalentTo(elements);
        }
        public async Task RequestIsNotSplitNotBulkTest([Frozen] MiddlewareContext context, [Frozen] IWebApiResponse response, Element element)
        {
            var options = new WebApiRequestOptions
            {
                BulkQueryParameterIdsName = "ids",
                EndpointPath  = "/some/endpoint",
                EndpointQuery = new Dictionary <string, string>()
            };

            context.Request.Options.Returns(options);
            string rawResponse = JsonSerializer.Serialize(element);

            response.Content.Returns(rawResponse);

            var middleware    = new RequestSplitterMiddleware();
            var finalResponse = await middleware.OnRequestAsync(context, (c, t) => Task.FromResult(response));

            finalResponse.Should().BeEquivalentTo(response);
        }
        public void MaxRequestSizeIsAtLeastOneTest()
        {
            var middleware = new RequestSplitterMiddleware();

            Assert.Throws <ArgumentOutOfRangeException>("value", () => middleware.MaxRequestSize = 0);
        }