diff --git a/Neo4jClient.Tests/GraphClientTests/ConnectTests.cs b/Neo4jClient.Tests/GraphClientTests/ConnectTests.cs index b9b881b75..b793b88bd 100644 --- a/Neo4jClient.Tests/GraphClientTests/ConnectTests.cs +++ b/Neo4jClient.Tests/GraphClientTests/ConnectTests.cs @@ -177,6 +177,64 @@ public void CredentialsPreservedAllTheWayThroughToHttpStack() StringAssert.AreEqualIgnoringCase("dXNlcm5hbWU6cGFzc3dvcmQ=", httpRequest.Headers.Authorization.Parameter); } + [Test] + public void PassesCorrectStreamHeader_WhenUseStreamIsTrue() + { + var httpClient = Substitute.For(); + httpClient + .SendAsync(Arg.Any()) + .Returns(callInfo => { throw new NotImplementedException(); }); + + var graphClient = new GraphClient(new Uri("http://username:password@foo/db/data"), httpClient); + + try + { + graphClient.Connect(); + } + // ReSharper disable EmptyGeneralCatchClause + catch (NotImplementedException) + { + // This will fail because we're not giving it the right + // HTTP response, but we only care about the request for now + } + // ReSharper restore EmptyGeneralCatchClause + + var httpCall = httpClient.ReceivedCalls().Last(); + var httpRequest = (HttpRequestMessage)httpCall.GetArguments()[0]; + + Assert.IsTrue(httpRequest.Headers.Contains("X-Stream")); + Assert.Contains("true", httpRequest.Headers.GetValues("X-Stream").ToList()); + } + + [Test] + public void PassesCorrectStreamHeader_WhenUseStreamIsFalse() + { + var httpClient = Substitute.For(); + httpClient + .SendAsync(Arg.Any()) + .Returns(callInfo => { throw new NotImplementedException(); }); + + var graphClient = new GraphClient(new Uri("http://username:password@foo/db/data"), httpClient); + graphClient.ExecutionConfiguration.UseJsonStreaming = false; + try + { + graphClient.Connect(); + } + // ReSharper disable EmptyGeneralCatchClause + catch (NotImplementedException) + { + // This will fail because we're not giving it the right + // HTTP response, but we only care about the request for now + } + // ReSharper restore EmptyGeneralCatchClause + + var httpCall = httpClient.ReceivedCalls().Last(); + var httpRequest = (HttpRequestMessage)httpCall.GetArguments()[0]; + + Assert.IsFalse(httpRequest.Headers.Contains("X-Stream")); + } + + [Test] public void ShouldParseRootApiResponseFromAuthenticatedConnection() { diff --git a/Neo4jClient/Execution/ResponseBuilder.cs b/Neo4jClient/Execution/ResponseBuilder.cs index 25e983ade..f516898d0 100644 --- a/Neo4jClient/Execution/ResponseBuilder.cs +++ b/Neo4jClient/Execution/ResponseBuilder.cs @@ -76,6 +76,8 @@ private Task PrepareAsync(TaskFactory taskFactory) _request.Headers.Accept.Clear(); _request.Headers.Remove("Accept"); _request.Headers.Add("Accept", "application/json;stream=true"); + _request.Headers.Remove("X-Stream"); + _request.Headers.Add("X-Stream", "true"); } _request.Headers.Add("User-Agent", _executionConfiguration.UserAgent);