From b62bcfaec99bab0330e1fcb6d2f12e7d661c3e94 Mon Sep 17 00:00:00 2001 From: Devesh Khandelwal Date: Tue, 8 Mar 2016 00:28:16 +0530 Subject: [PATCH 1/3] Passing on serialize argument to Connection's ctor, wasn't passing on before. Breaks tests. --- Octokit/Http/Connection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Octokit/Http/Connection.cs b/Octokit/Http/Connection.cs index dabee271..ba1035d7 100644 --- a/Octokit/Http/Connection.cs +++ b/Octokit/Http/Connection.cs @@ -133,7 +133,7 @@ namespace Octokit BaseAddress = baseAddress; _authenticator = new Authenticator(credentialStore); _httpClient = httpClient; - _jsonPipeline = new JsonHttpPipeline(); + _jsonPipeline = new JsonHttpPipeline(serializer); } /// From 6e49068c8d3a8889a38d916b2f260a8dee90941a Mon Sep 17 00:00:00 2001 From: Devesh Khandelwal Date: Tue, 8 Mar 2016 14:59:46 +0530 Subject: [PATCH 2/3] Serialize object using mock serializer. Courtesy of @M-Zuber. --- Octokit.Tests/Http/ConnectionTests.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Octokit.Tests/Http/ConnectionTests.cs b/Octokit.Tests/Http/ConnectionTests.cs index 23582e5c..b5ee4bc4 100644 --- a/Octokit.Tests/Http/ConnectionTests.cs +++ b/Octokit.Tests/Http/ConnectionTests.cs @@ -306,7 +306,8 @@ namespace Octokit.Tests.Http [Fact] public async Task RunsConfiguredAppWithAppropriateEnv() { - string data = SimpleJson.SerializeObject(new object()); + var serializer = Substitute.For(); + string data = serializer.Serialize(new object()); var httpClient = Substitute.For(); IResponse response = new Response(); httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); @@ -350,7 +351,8 @@ namespace Octokit.Tests.Http public async Task MakesPutRequestWithData() { var body = new object(); - var expectedBody = SimpleJson.SerializeObject(body); + var serializer = Substitute.For(); + var expectedBody = serializer.Serialize(body); var httpClient = Substitute.For(); IResponse response = new Response(); httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); @@ -374,7 +376,8 @@ namespace Octokit.Tests.Http public async Task MakesPutRequestWithNoData() { var body = RequestBody.Empty; - var expectedBody = SimpleJson.SerializeObject(body); + var serializer = Substitute.For(); + var expectedBody = serializer.Serialize(body); var httpClient = Substitute.For(); IResponse response = new Response(); httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); @@ -397,7 +400,8 @@ namespace Octokit.Tests.Http public async Task MakesPutRequestWithDataAndTwoFactor() { var body = new object(); - var expectedBody = SimpleJson.SerializeObject(body); + var serializer = Substitute.For(); + var expectedBody = serializer.Serialize(body); var httpClient = Substitute.For(); IResponse response = new Response(); httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); @@ -422,7 +426,8 @@ namespace Octokit.Tests.Http public async Task MakesPutRequestWithNoDataAndTwoFactor() { var body = RequestBody.Empty; - var expectedBody = SimpleJson.SerializeObject(body); + var serializer = Substitute.For(); + string expectedBody = serializer.Serialize(body); var httpClient = Substitute.For(); IResponse response = new Response(); httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); @@ -448,7 +453,8 @@ namespace Octokit.Tests.Http [Fact] public async Task SendsProperlyFormattedPostRequest() { - string data = SimpleJson.SerializeObject(new object()); + var serializer = Substitute.For(); + string data = serializer.Serialize(new object()); var httpClient = Substitute.For(); IResponse response = new Response(); httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); From 534d54bb7f66d045dfe510eb9b82a45e68168ca9 Mon Sep 17 00:00:00 2001 From: Devesh Khandelwal Date: Wed, 9 Mar 2016 11:25:07 +0530 Subject: [PATCH 3/3] Verify Serialize is getting called with correct params. --- Octokit.Tests/Http/ConnectionTests.cs | 69 ++++++++++++++++++++------- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/Octokit.Tests/Http/ConnectionTests.cs b/Octokit.Tests/Http/ConnectionTests.cs index b5ee4bc4..dcf12016 100644 --- a/Octokit.Tests/Http/ConnectionTests.cs +++ b/Octokit.Tests/Http/ConnectionTests.cs @@ -306,22 +306,30 @@ namespace Octokit.Tests.Http [Fact] public async Task RunsConfiguredAppWithAppropriateEnv() { + var body = new object(); + var expectedData = SimpleJson.SerializeObject(body); + var serializer = Substitute.For(); - string data = serializer.Serialize(new object()); - var httpClient = Substitute.For(); + serializer.Serialize(body).Returns(expectedData); + IResponse response = new Response(); - httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); + var httpClient = Substitute.For(); + httpClient.Send(Args.Request, Args.CancellationToken) + .Returns(Task.FromResult(response)); + var connection = new Connection(new ProductHeaderValue("OctokitTests"), _exampleUri, Substitute.For(), httpClient, - Substitute.For()); + serializer); - await connection.Patch(new Uri("endpoint", UriKind.Relative), new object()); + await connection.Patch(new Uri("endpoint", UriKind.Relative), body); + + serializer.Received(1).Serialize(body); httpClient.Received(1).Send(Arg.Is(req => req.BaseAddress == _exampleUri && - (string)req.Body == data && + (string)req.Body == expectedData && req.Method == HttpVerb.Patch && req.ContentType == "application/x-www-form-urlencoded" && req.Endpoint == new Uri("endpoint", UriKind.Relative)), Args.CancellationToken); @@ -352,18 +360,23 @@ namespace Octokit.Tests.Http { var body = new object(); var serializer = Substitute.For(); - var expectedBody = serializer.Serialize(body); + var expectedBody = SimpleJson.SerializeObject(body); var httpClient = Substitute.For(); IResponse response = new Response(); + + serializer.Serialize(body).Returns(expectedBody); + httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); var connection = new Connection(new ProductHeaderValue("OctokitTests"), _exampleUri, Substitute.For(), httpClient, - Substitute.For()); + serializer); await connection.Put(new Uri("endpoint", UriKind.Relative), body); + serializer.Received(1).Serialize(body); + httpClient.Received(1).Send(Arg.Is(req => req.BaseAddress == _exampleUri && (string)req.Body == expectedBody && @@ -377,18 +390,24 @@ namespace Octokit.Tests.Http { var body = RequestBody.Empty; var serializer = Substitute.For(); - var expectedBody = serializer.Serialize(body); + var expectedBody = SimpleJson.SerializeObject(body); var httpClient = Substitute.For(); IResponse response = new Response(); + + serializer.Serialize(body).Returns(expectedBody); + httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); + var connection = new Connection(new ProductHeaderValue("OctokitTests"), _exampleUri, Substitute.For(), httpClient, - Substitute.For()); + serializer); await connection.Put(new Uri("endpoint", UriKind.Relative), body); + serializer.Received(1).Serialize(body); + httpClient.Received(1).Send(Arg.Is(req => req.BaseAddress == _exampleUri && (string)req.Body == expectedBody && @@ -401,18 +420,23 @@ namespace Octokit.Tests.Http { var body = new object(); var serializer = Substitute.For(); - var expectedBody = serializer.Serialize(body); + var expectedBody = SimpleJson.SerializeObject(body); var httpClient = Substitute.For(); IResponse response = new Response(); + + serializer.Serialize(body).Returns(expectedBody); + httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); var connection = new Connection(new ProductHeaderValue("OctokitTests"), _exampleUri, Substitute.For(), httpClient, - Substitute.For()); + serializer); await connection.Put(new Uri("endpoint", UriKind.Relative), body, "two-factor"); + serializer.Received(1).Serialize(body); + httpClient.Received(1).Send(Arg.Is(req => req.BaseAddress == _exampleUri && (string)req.Body == expectedBody && @@ -427,18 +451,23 @@ namespace Octokit.Tests.Http { var body = RequestBody.Empty; var serializer = Substitute.For(); - string expectedBody = serializer.Serialize(body); + var expectedBody = SimpleJson.SerializeObject(body); var httpClient = Substitute.For(); IResponse response = new Response(); + + serializer.Serialize(body).Returns(expectedBody); + httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); var connection = new Connection(new ProductHeaderValue("OctokitTests"), _exampleUri, Substitute.For(), httpClient, - Substitute.For()); + serializer); await connection.Put(new Uri("endpoint", UriKind.Relative), body, "two-factor"); + serializer.Received(1).Serialize(body); + httpClient.Received(1).Send(Arg.Is(req => req.BaseAddress == _exampleUri && (string)req.Body == expectedBody && @@ -453,18 +482,24 @@ namespace Octokit.Tests.Http [Fact] public async Task SendsProperlyFormattedPostRequest() { + var body = new object(); var serializer = Substitute.For(); - string data = serializer.Serialize(new object()); + var data = SimpleJson.SerializeObject(body); var httpClient = Substitute.For(); IResponse response = new Response(); + + serializer.Serialize(body).Returns(data); + httpClient.Send(Args.Request, Args.CancellationToken).Returns(Task.FromResult(response)); var connection = new Connection(new ProductHeaderValue("OctokitTests"), _exampleUri, Substitute.For(), httpClient, - Substitute.For()); + serializer); - await connection.Post(new Uri("endpoint", UriKind.Relative), new object(), null, null); + await connection.Post(new Uri("endpoint", UriKind.Relative), body, null, null); + + serializer.Received(1).Serialize(body); httpClient.Received(1).Send(Arg.Is(req => req.BaseAddress == _exampleUri &&