Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions DebugProbe.AspNetCore.Tests/Compare/DebugEntryComparerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System.Text.Json;
using DebugProbe.AspNetCore.Internal.Compare;
using DebugProbe.AspNetCore.Models;

namespace DebugProbe.AspNetCore.Tests.Compare;

public class DebugEntryComparerTests
{
[Fact]
public void Compare_reports_status_and_json_body_differences()
{
var local = new DebugEntry
{
StatusCode = 200,
RequestBody = "{\"id\":1}",
ResponseBody = "{\"total\":10,\"items\":[\"a\"]}"
};
var remote = new DebugEntry
{
StatusCode = 500,
RequestBody = "{\"id\":2}",
ResponseBody = "{\"total\":12,\"items\":[\"a\",\"b\"]}"
};

var json = JsonSerializer.Serialize(DebugEntryComparer.Compare(local, remote));

Assert.Contains("\"field\":\"Status\"", json);
Assert.Contains("\"field\":\"id\"", json);
Assert.Contains("\"field\":\"total\"", json);
Assert.Contains("\"field\":\"items\"", json);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public void Defaults_work_correctly()
var options = new DebugProbeOptions();

Assert.Equal(20, options.MaxEntries);
Assert.Equal(256, options.MaxBodyCaptureSizeKb);
Assert.Equal(32, options.MaxBodyCaptureSizeKb);
Assert.False(options.AllowLocalCompareTargets);
Assert.Empty(options.IgnorePaths);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using System.Net;
using System.Text;
using DebugProbe.AspNetCore.Handlers;
using DebugProbe.AspNetCore.Models;
using DebugProbe.AspNetCore.Options;
using Microsoft.AspNetCore.Http;

namespace DebugProbe.AspNetCore.Tests.Handlers;

public class DebugProbeHttpClientHandlerTests
{
[Fact]
public async Task Captures_outgoing_http_call_on_active_trace()
{
var entry = new DebugEntry();
var context = new DefaultHttpContext();
context.Items["DebugProbeEntry"] = entry;

using var handler = new DebugProbeHttpClientHandler(
new HttpContextAccessor { HttpContext = context },
new DebugProbeOptions())
{
InnerHandler = new StubHandler(_ =>
{
var response = new HttpResponseMessage(HttpStatusCode.Created)
{
Content = new StringContent("{\"ok\":true}", Encoding.UTF8, "application/json")
};
response.Headers.Add("X-Trace", "remote");
return response;
})
};

using var client = new HttpClient(handler);
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.example.test/orders")
{
Content = new StringContent("{\"name\":\"Ada\"}", Encoding.UTF8, "application/json")
};
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "secret");

using var response = await client.SendAsync(request);

Assert.Equal(HttpStatusCode.Created, response.StatusCode);
var outgoing = Assert.Single(entry.OutgoingRequests);
Assert.Equal("POST", outgoing.Method);
Assert.Equal("https://api.example.test/orders", outgoing.Url);
Assert.Equal(201, outgoing.StatusCode);
Assert.True(outgoing.IsSuccessStatusCode);
Assert.Equal("[REDACTED]", outgoing.RequestHeaders["Authorization"]);
Assert.Equal("remote", outgoing.ResponseHeaders["X-Trace"]);
Assert.Contains("\"name\": \"Ada\"", outgoing.RequestBody);
Assert.Contains("\"ok\": true", outgoing.ResponseBody);
}

private sealed class StubHandler(Func<HttpRequestMessage, HttpResponseMessage> send) : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return Task.FromResult(send(request));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Net.Http.Headers;
using DebugProbe.AspNetCore.Tests.Infrastructure;

namespace DebugProbe.AspNetCore.Tests.Middleware;
Expand Down
5 changes: 2 additions & 3 deletions DebugProbe.AspNetCore.Tests/Rendering/HtmlRendererTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,14 @@ public void Details_page_renders_captured_values()
Assert.Contains("/orders?id=10", html);
Assert.Contains("500 InternalServerError", html);
Assert.Contains("http://example.test/orders?id=10", html);
Assert.Contains("&quot;request&quot;:true", html);
Assert.Contains("&quot;response&quot;:true", html);
Assert.Contains("&quot;request&quot;: true", html);
Assert.Contains("&quot;response&quot;: true", html);
}

[Fact]
public void Payload_groups_render_for_json_empty_text_and_hidden_payloads()
{
var jsonHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "{\"ok\":true}", "plain");
var emptyHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "", "");
var hiddenHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "[Body too large]", "[Body too large]");

Assert.Contains("Request", jsonHtml);
Expand Down
Loading
Loading