Skip to content

Commit ee7964c

Browse files
feat: update test project for outgoing request tracing changes
1 parent 46280c8 commit ee7964c

5 files changed

Lines changed: 97 additions & 5 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Text.Json;
2+
using DebugProbe.AspNetCore.Internal.Compare;
3+
using DebugProbe.AspNetCore.Models;
4+
5+
namespace DebugProbe.AspNetCore.Tests.Compare;
6+
7+
public class DebugEntryComparerTests
8+
{
9+
[Fact]
10+
public void Compare_reports_status_and_json_body_differences()
11+
{
12+
var local = new DebugEntry
13+
{
14+
StatusCode = 200,
15+
RequestBody = "{\"id\":1}",
16+
ResponseBody = "{\"total\":10,\"items\":[\"a\"]}"
17+
};
18+
var remote = new DebugEntry
19+
{
20+
StatusCode = 500,
21+
RequestBody = "{\"id\":2}",
22+
ResponseBody = "{\"total\":12,\"items\":[\"a\",\"b\"]}"
23+
};
24+
25+
var json = JsonSerializer.Serialize(DebugEntryComparer.Compare(local, remote));
26+
27+
Assert.Contains("\"field\":\"Status\"", json);
28+
Assert.Contains("\"field\":\"id\"", json);
29+
Assert.Contains("\"field\":\"total\"", json);
30+
Assert.Contains("\"field\":\"items\"", json);
31+
}
32+
}

DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public void Defaults_work_correctly()
1313
var options = new DebugProbeOptions();
1414

1515
Assert.Equal(20, options.MaxEntries);
16-
Assert.Equal(256, options.MaxBodyCaptureSizeKb);
16+
Assert.Equal(32, options.MaxBodyCaptureSizeKb);
1717
Assert.False(options.AllowLocalCompareTargets);
1818
Assert.Empty(options.IgnorePaths);
1919
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System.Net;
2+
using System.Text;
3+
using DebugProbe.AspNetCore.Handlers;
4+
using DebugProbe.AspNetCore.Models;
5+
using DebugProbe.AspNetCore.Options;
6+
using Microsoft.AspNetCore.Http;
7+
8+
namespace DebugProbe.AspNetCore.Tests.Handlers;
9+
10+
public class DebugProbeHttpClientHandlerTests
11+
{
12+
[Fact]
13+
public async Task Captures_outgoing_http_call_on_active_trace()
14+
{
15+
var entry = new DebugEntry();
16+
var context = new DefaultHttpContext();
17+
context.Items["DebugProbeEntry"] = entry;
18+
19+
using var handler = new DebugProbeHttpClientHandler(
20+
new HttpContextAccessor { HttpContext = context },
21+
new DebugProbeOptions())
22+
{
23+
InnerHandler = new StubHandler(_ =>
24+
{
25+
var response = new HttpResponseMessage(HttpStatusCode.Created)
26+
{
27+
Content = new StringContent("{\"ok\":true}", Encoding.UTF8, "application/json")
28+
};
29+
response.Headers.Add("X-Trace", "remote");
30+
return response;
31+
})
32+
};
33+
34+
using var client = new HttpClient(handler);
35+
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.example.test/orders")
36+
{
37+
Content = new StringContent("{\"name\":\"Ada\"}", Encoding.UTF8, "application/json")
38+
};
39+
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "secret");
40+
41+
using var response = await client.SendAsync(request);
42+
43+
Assert.Equal(HttpStatusCode.Created, response.StatusCode);
44+
var outgoing = Assert.Single(entry.OutgoingRequests);
45+
Assert.Equal("POST", outgoing.Method);
46+
Assert.Equal("https://api.example.test/orders", outgoing.Url);
47+
Assert.Equal(201, outgoing.StatusCode);
48+
Assert.True(outgoing.IsSuccessStatusCode);
49+
Assert.Equal("[REDACTED]", outgoing.RequestHeaders["Authorization"]);
50+
Assert.Equal("remote", outgoing.ResponseHeaders["X-Trace"]);
51+
Assert.Contains("\"name\": \"Ada\"", outgoing.RequestBody);
52+
Assert.Contains("\"ok\": true", outgoing.ResponseBody);
53+
}
54+
55+
private sealed class StubHandler(Func<HttpRequestMessage, HttpResponseMessage> send) : HttpMessageHandler
56+
{
57+
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
58+
{
59+
return Task.FromResult(send(request));
60+
}
61+
}
62+
}

DebugProbe.AspNetCore.Tests/Middleware/ResponseBodyCaptureTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Net.Http.Headers;
21
using DebugProbe.AspNetCore.Tests.Infrastructure;
32

43
namespace DebugProbe.AspNetCore.Tests.Middleware;

DebugProbe.AspNetCore.Tests/Rendering/HtmlRendererTests.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,14 @@ public void Details_page_renders_captured_values()
4141
Assert.Contains("/orders?id=10", html);
4242
Assert.Contains("500 InternalServerError", html);
4343
Assert.Contains("http://example.test/orders?id=10", html);
44-
Assert.Contains("&quot;request&quot;:true", html);
45-
Assert.Contains("&quot;response&quot;:true", html);
44+
Assert.Contains("&quot;request&quot;: true", html);
45+
Assert.Contains("&quot;response&quot;: true", html);
4646
}
4747

4848
[Fact]
4949
public void Payload_groups_render_for_json_empty_text_and_hidden_payloads()
5050
{
5151
var jsonHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "{\"ok\":true}", "plain");
52-
var emptyHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "", "");
5352
var hiddenHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "[Body too large]", "[Body too large]");
5453

5554
Assert.Contains("Request", jsonHtml);

0 commit comments

Comments
 (0)