Skip to content

Commit 70aba4d

Browse files
niemyjskiCopilot
andcommitted
test(aspnetcore): add DI resolution assertions to extension tests
Verify IExceptionHandler actually resolves from the container, not just that descriptors are registered. Covers all 3 WebApplicationBuilder overloads and idempotency with manual AddExceptionlessExceptionHandler. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4f33571 commit 70aba4d

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

test/Exceptionless.Tests/Platforms/AspNetCoreExtensionsTests.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
#if NET10_0_OR_GREATER
2+
using System;
23
using Exceptionless;
34
using Exceptionless.AspNetCore;
45
using Microsoft.AspNetCore.Builder;
56
using Microsoft.AspNetCore.Diagnostics;
67
using Microsoft.AspNetCore.Http;
78
using Microsoft.Extensions.DependencyInjection;
9+
using Microsoft.Extensions.Options;
810
using Xunit;
911

1012
namespace Exceptionless.Tests.Platforms {
@@ -53,6 +55,63 @@ public void AddExceptionless_WhenCalledWithoutArguments_RegistersClientConfigura
5355
descriptor.ServiceType == typeof(IExceptionHandler) &&
5456
descriptor.ImplementationType == typeof(ExceptionlessExceptionHandler));
5557
}
58+
59+
[Fact]
60+
public void WebApplicationBuilder_AddExceptionless_RegistersExceptionHandlerAndResolvesFromDI() {
61+
// Arrange
62+
var builder = WebApplication.CreateBuilder();
63+
64+
// Act
65+
builder.AddExceptionless();
66+
67+
// Assert — descriptors registered
68+
Assert.Contains(builder.Services, descriptor => descriptor.ServiceType == typeof(ExceptionlessClient));
69+
Assert.Contains(builder.Services, descriptor =>
70+
descriptor.ServiceType == typeof(IExceptionHandler) &&
71+
descriptor.ImplementationType == typeof(ExceptionlessExceptionHandler));
72+
73+
// Assert — actually resolves from the container
74+
using var provider = builder.Services.BuildServiceProvider();
75+
var handlers = provider.GetServices<IExceptionHandler>();
76+
Assert.Contains(handlers, h => h is ExceptionlessExceptionHandler);
77+
}
78+
79+
[Fact]
80+
public void WebApplicationBuilder_AddExceptionless_WithApiKey_RegistersAndResolves() {
81+
var builder = WebApplication.CreateBuilder();
82+
builder.AddExceptionless("test-api-key");
83+
84+
using var provider = builder.Services.BuildServiceProvider();
85+
var client = provider.GetRequiredService<ExceptionlessClient>();
86+
Assert.NotNull(client);
87+
88+
var handlers = provider.GetServices<IExceptionHandler>();
89+
Assert.Contains(handlers, h => h is ExceptionlessExceptionHandler);
90+
}
91+
92+
[Fact]
93+
public void WebApplicationBuilder_AddExceptionless_WithConfigure_RegistersAndResolves() {
94+
var builder = WebApplication.CreateBuilder();
95+
builder.AddExceptionless(c => c.DefaultData["test"] = "value");
96+
97+
using var provider = builder.Services.BuildServiceProvider();
98+
var client = provider.GetRequiredService<ExceptionlessClient>();
99+
Assert.NotNull(client);
100+
101+
var handlers = provider.GetServices<IExceptionHandler>();
102+
Assert.Contains(handlers, h => h is ExceptionlessExceptionHandler);
103+
}
104+
105+
[Fact]
106+
public void WebApplicationBuilder_AddExceptionless_ThenManualCall_DoesNotDuplicate() {
107+
var builder = WebApplication.CreateBuilder();
108+
builder.AddExceptionless();
109+
builder.Services.AddExceptionlessExceptionHandler();
110+
111+
Assert.Single(builder.Services, descriptor =>
112+
descriptor.ServiceType == typeof(IExceptionHandler) &&
113+
descriptor.ImplementationType == typeof(ExceptionlessExceptionHandler));
114+
}
56115
}
57116
}
58117
#endif

0 commit comments

Comments
 (0)