From ce45893caaee32dd038704803788650c25ce6e6e Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Thu, 29 May 2025 00:09:19 -0500 Subject: [PATCH] refactor: extract tests to library test project --- .../Discord/ServicesExtensions.cs | 4 +- .../Telemetry/HostExtensions.cs | 16 +++-- .../Telemetry/IInstrumentation.cs | 10 +++ .../Telemetry/StevesBotInstrumentation.cs | 15 ----- .../StevesBotWebhookInstrumentation.cs | 18 +++++ .../StevesBotWorkerInstrumentation.cs | 18 +++++ src/src/StevesBot.Webhook/Program.cs | 2 + src/src/StevesBot.Webhook/Usings.cs | 1 + .../YouTube/Handlers/NotificationHandler.cs | 2 +- .../appsettings.Example.json | 5 ++ src/src/StevesBot.Worker/Program.cs | 4 +- .../Unit/CreateMessageRequestTests.cs | 2 +- .../Unit/DiscordClientOptionsTests.cs | 2 +- .../Unit/DiscordMessageReferenceTests.cs | 2 +- .../Unit/DiscordMessageReferenceTypesTests.cs | 2 +- .../Unit/DiscordMessageTests.cs | 1 + .../Unit/DiscordRestClientExceptionTests.cs | 2 +- .../Unit/DiscordRestClientTests.cs | 4 +- .../Unit/DiscordUserTests.cs | 1 + .../Unit/GatewayResponseTests.cs | 0 .../Unit/HostExtensionsTests.cs | 6 ++ .../Unit/SeqOptionsTests.cs | 66 +++++++++++++++++++ .../StevesBotWebhookInstrumentationTests.cs | 32 +++++++++ .../StevesBotWorkerInstrumentationTests.cs | 32 +++++++++ src/tests/StevesBot.Library.Tests/Usings.cs | 13 +++- 25 files changed, 226 insertions(+), 34 deletions(-) create mode 100644 src/src/StevesBot.Library/Telemetry/IInstrumentation.cs delete mode 100644 src/src/StevesBot.Library/Telemetry/StevesBotInstrumentation.cs create mode 100644 src/src/StevesBot.Library/Telemetry/StevesBotWebhookInstrumentation.cs create mode 100644 src/src/StevesBot.Library/Telemetry/StevesBotWorkerInstrumentation.cs rename src/tests/{StevesBot.Worker.Tests => StevesBot.Library.Tests}/Unit/CreateMessageRequestTests.cs (92%) rename src/tests/{StevesBot.Worker.Tests => StevesBot.Library.Tests}/Unit/DiscordClientOptionsTests.cs (95%) rename src/tests/{StevesBot.Worker.Tests => StevesBot.Library.Tests}/Unit/DiscordMessageReferenceTests.cs (94%) rename src/tests/{StevesBot.Worker.Tests => StevesBot.Library.Tests}/Unit/DiscordMessageReferenceTypesTests.cs (90%) create mode 100644 src/tests/StevesBot.Library.Tests/Unit/DiscordMessageTests.cs rename src/tests/{StevesBot.Worker.Tests => StevesBot.Library.Tests}/Unit/DiscordRestClientExceptionTests.cs (95%) rename src/tests/{StevesBot.Worker.Tests => StevesBot.Library.Tests}/Unit/DiscordRestClientTests.cs (98%) create mode 100644 src/tests/StevesBot.Library.Tests/Unit/DiscordUserTests.cs create mode 100644 src/tests/StevesBot.Library.Tests/Unit/GatewayResponseTests.cs create mode 100644 src/tests/StevesBot.Library.Tests/Unit/HostExtensionsTests.cs create mode 100644 src/tests/StevesBot.Library.Tests/Unit/SeqOptionsTests.cs create mode 100644 src/tests/StevesBot.Library.Tests/Unit/StevesBotWebhookInstrumentationTests.cs create mode 100644 src/tests/StevesBot.Library.Tests/Unit/StevesBotWorkerInstrumentationTests.cs diff --git a/src/src/StevesBot.Library/Discord/ServicesExtensions.cs b/src/src/StevesBot.Library/Discord/ServicesExtensions.cs index d8089e7..542dcd5 100644 --- a/src/src/StevesBot.Library/Discord/ServicesExtensions.cs +++ b/src/src/StevesBot.Library/Discord/ServicesExtensions.cs @@ -17,7 +17,9 @@ public static class ServicesExtensions c.BaseAddress = new Uri(discordOptions.ApiUrl); c.DefaultRequestHeaders.Authorization = new("Bot", discordOptions.AppToken); - var userAgentString = $"DiscordBot (https://github.com/StevanFreeborn/steves-bot, {StevesBotInstrumentation.SourceVersion})"; + var instrumentation = sp.GetRequiredService(); + + var userAgentString = $"DiscordBot (https://github.com/StevanFreeborn/steves-bot, {instrumentation.SourceVersion})"; c.DefaultRequestHeaders.Add("User-Agent", userAgentString); }) .AddStandardResilienceHandler(); diff --git a/src/src/StevesBot.Library/Telemetry/HostExtensions.cs b/src/src/StevesBot.Library/Telemetry/HostExtensions.cs index 8d88139..ea474d3 100644 --- a/src/src/StevesBot.Library/Telemetry/HostExtensions.cs +++ b/src/src/StevesBot.Library/Telemetry/HostExtensions.cs @@ -11,11 +11,15 @@ namespace StevesBot.Library.Telemetry; public static class HostExtensions { - public static HostApplicationBuilder AddTelemetry(this HostApplicationBuilder builder) + public static IHostApplicationBuilder AddTelemetry(this IHostApplicationBuilder builder, Func instrumentationFunc) { ArgumentNullException.ThrowIfNull(builder); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(instrumentationFunc); + + var instrumentation = builder.Services + .BuildServiceProvider() + .GetRequiredService(); var seq = new SeqOptions(); builder.Configuration.GetSection(nameof(SeqOptions)).Bind(seq); @@ -28,11 +32,11 @@ public static class HostExtensions builder.Services.AddOpenTelemetry() .ConfigureResource(resource => { - resource.AddService(StevesBotInstrumentation.SourceName, StevesBotInstrumentation.SourceVersion); + resource.AddService(instrumentation.SourceName, instrumentation.SourceVersion); resource.AddAttributes(new Dictionary { - ["service.name"] = StevesBotInstrumentation.SourceName, - ["service.version"] = StevesBotInstrumentation.SourceVersion, + ["service.name"] = instrumentation.SourceName, + ["service.version"] = instrumentation.SourceVersion, ["service.instance.id"] = Environment.MachineName, ["service.namespace"] = "stevesbot", ["service.environment"] = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "production", @@ -49,7 +53,7 @@ public static class HostExtensions }) .WithTracing(tb => { - tb.AddSource(StevesBotInstrumentation.SourceName); + tb.AddSource(instrumentation.SourceName); tb.AddAspNetCoreInstrumentation(); tb.AddHttpClientInstrumentation(); tb.AddOtlpExporter(o => diff --git a/src/src/StevesBot.Library/Telemetry/IInstrumentation.cs b/src/src/StevesBot.Library/Telemetry/IInstrumentation.cs new file mode 100644 index 0000000..1fd6eb7 --- /dev/null +++ b/src/src/StevesBot.Library/Telemetry/IInstrumentation.cs @@ -0,0 +1,10 @@ +using System.Diagnostics; + +namespace StevesBot.Library.Telemetry; + +public interface IInstrumentation : IDisposable +{ + string SourceName { get; } + string SourceVersion { get; } + ActivitySource Source { get; } +} \ No newline at end of file diff --git a/src/src/StevesBot.Library/Telemetry/StevesBotInstrumentation.cs b/src/src/StevesBot.Library/Telemetry/StevesBotInstrumentation.cs deleted file mode 100644 index f08b327..0000000 --- a/src/src/StevesBot.Library/Telemetry/StevesBotInstrumentation.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Diagnostics; - -namespace StevesBot.Library.Telemetry; - -public sealed class StevesBotInstrumentation : IDisposable -{ - public const string SourceName = "StevesBot.Worker"; - public const string SourceVersion = "0.0.0"; - public ActivitySource Source { get; } = new(SourceName, SourceVersion); - - public void Dispose() - { - Source.Dispose(); - } -} \ No newline at end of file diff --git a/src/src/StevesBot.Library/Telemetry/StevesBotWebhookInstrumentation.cs b/src/src/StevesBot.Library/Telemetry/StevesBotWebhookInstrumentation.cs new file mode 100644 index 0000000..e56aefa --- /dev/null +++ b/src/src/StevesBot.Library/Telemetry/StevesBotWebhookInstrumentation.cs @@ -0,0 +1,18 @@ +using System.Diagnostics; + +namespace StevesBot.Library.Telemetry; + +public sealed class StevesBotWebhookInstrumentation : IInstrumentation +{ + private const string SourceNameValue = "StevesBot.Webhook"; + private const string SourceVersionValue = "0.0.0"; + + public string SourceName { get; } = SourceNameValue; + public string SourceVersion { get; } = SourceVersionValue; + public ActivitySource Source { get; } = new ActivitySource(SourceNameValue, SourceVersionValue); + + public void Dispose() + { + Source.Dispose(); + } +} \ No newline at end of file diff --git a/src/src/StevesBot.Library/Telemetry/StevesBotWorkerInstrumentation.cs b/src/src/StevesBot.Library/Telemetry/StevesBotWorkerInstrumentation.cs new file mode 100644 index 0000000..de63a27 --- /dev/null +++ b/src/src/StevesBot.Library/Telemetry/StevesBotWorkerInstrumentation.cs @@ -0,0 +1,18 @@ +using System.Diagnostics; + +namespace StevesBot.Library.Telemetry; + +public sealed class StevesBotWorkerInstrumentation : IInstrumentation +{ + private const string SourceNameValue = "StevesBot.Worker"; + private const string SourceVersionValue = "0.0.0"; + + public string SourceName { get; } = SourceNameValue; + public string SourceVersion { get; } = SourceVersionValue; + public ActivitySource Source { get; } = new ActivitySource(SourceNameValue, SourceVersionValue); + + public void Dispose() + { + Source.Dispose(); + } +} \ No newline at end of file diff --git a/src/src/StevesBot.Webhook/Program.cs b/src/src/StevesBot.Webhook/Program.cs index d092e81..5f876b8 100644 --- a/src/src/StevesBot.Webhook/Program.cs +++ b/src/src/StevesBot.Webhook/Program.cs @@ -1,5 +1,7 @@ var builder = WebApplication.CreateBuilder(args); +builder.AddTelemetry(static () => new StevesBotWebhookInstrumentation()); + builder.Services .AddOptionsWithValidateOnStart() .BindConfiguration(nameof(SubscriptionOptions)) diff --git a/src/src/StevesBot.Webhook/Usings.cs b/src/src/StevesBot.Webhook/Usings.cs index 5bd5405..7694e5f 100644 --- a/src/src/StevesBot.Webhook/Usings.cs +++ b/src/src/StevesBot.Webhook/Usings.cs @@ -12,6 +12,7 @@ global using StevesBot.Library.Discord; global using StevesBot.Library.Discord.Common; global using StevesBot.Library.Discord.Rest; global using StevesBot.Library.Discord.Rest.Requests; +global using StevesBot.Library.Telemetry; global using StevesBot.Webhook.YouTube; global using StevesBot.Webhook.YouTube.Data; global using StevesBot.Webhook.YouTube.Handlers; diff --git a/src/src/StevesBot.Webhook/YouTube/Handlers/NotificationHandler.cs b/src/src/StevesBot.Webhook/YouTube/Handlers/NotificationHandler.cs index 763fcbe..c7257e3 100644 --- a/src/src/StevesBot.Webhook/YouTube/Handlers/NotificationHandler.cs +++ b/src/src/StevesBot.Webhook/YouTube/Handlers/NotificationHandler.cs @@ -40,7 +40,7 @@ internal static class NotificationHandler return Results.Ok(); } - if (lastPostedStream.Value == videoId) + if (lastPostedStream.HasValue(videoId)) { logger.LogInformation("Video ID {VideoId} has already been posted. Skipping notification.", videoId); return Results.Ok(); diff --git a/src/src/StevesBot.Webhook/appsettings.Example.json b/src/src/StevesBot.Webhook/appsettings.Example.json index db3a004..eb9bcb2 100644 --- a/src/src/StevesBot.Webhook/appsettings.Example.json +++ b/src/src/StevesBot.Webhook/appsettings.Example.json @@ -25,5 +25,10 @@ "DiscordNotificationOptions": { "ChannelId": "ChannelId", "MessageFormat": "MessageFormat" + }, + "SeqOptions": { + "ServerUrl": "ServerUrl", + "ApiKeyHeader": "ApiKeyHeader", + "ApiKey": "ApiKey" } } diff --git a/src/src/StevesBot.Worker/Program.cs b/src/src/StevesBot.Worker/Program.cs index 722a736..36654b0 100644 --- a/src/src/StevesBot.Worker/Program.cs +++ b/src/src/StevesBot.Worker/Program.cs @@ -11,7 +11,7 @@ builder.Services.AddSingleton(static sp => return discordOptions; }); -builder.AddTelemetry(); +builder.AddTelemetry(static () => new StevesBotWorkerInstrumentation()); builder.Services.AddSingleton(); builder.Services.AddSingleton(TimeProvider.System); @@ -26,4 +26,4 @@ builder.Services.AddHostedService(); var host = builder.Build(); -await host.RunAsync(); \ No newline at end of file +await host.RunAsync(); diff --git a/src/tests/StevesBot.Worker.Tests/Unit/CreateMessageRequestTests.cs b/src/tests/StevesBot.Library.Tests/Unit/CreateMessageRequestTests.cs similarity index 92% rename from src/tests/StevesBot.Worker.Tests/Unit/CreateMessageRequestTests.cs rename to src/tests/StevesBot.Library.Tests/Unit/CreateMessageRequestTests.cs index 597ee76..2ec8a42 100644 --- a/src/tests/StevesBot.Worker.Tests/Unit/CreateMessageRequestTests.cs +++ b/src/tests/StevesBot.Library.Tests/Unit/CreateMessageRequestTests.cs @@ -1,4 +1,4 @@ -namespace StevesBot.Worker.Tests.Unit; +namespace StevesBot.Library.Tests.Unit; public class CreateMessageRequestTests { diff --git a/src/tests/StevesBot.Worker.Tests/Unit/DiscordClientOptionsTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordClientOptionsTests.cs similarity index 95% rename from src/tests/StevesBot.Worker.Tests/Unit/DiscordClientOptionsTests.cs rename to src/tests/StevesBot.Library.Tests/Unit/DiscordClientOptionsTests.cs index cd2f5c5..dc04065 100644 --- a/src/tests/StevesBot.Worker.Tests/Unit/DiscordClientOptionsTests.cs +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordClientOptionsTests.cs @@ -1,4 +1,4 @@ -namespace StevesBot.Worker.Tests.Unit; +namespace StevesBot.Library.Tests.Unit; public class DiscordClientOptionsTests { diff --git a/src/tests/StevesBot.Worker.Tests/Unit/DiscordMessageReferenceTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageReferenceTests.cs similarity index 94% rename from src/tests/StevesBot.Worker.Tests/Unit/DiscordMessageReferenceTests.cs rename to src/tests/StevesBot.Library.Tests/Unit/DiscordMessageReferenceTests.cs index d96d002..2d4a356 100644 --- a/src/tests/StevesBot.Worker.Tests/Unit/DiscordMessageReferenceTests.cs +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageReferenceTests.cs @@ -1,4 +1,4 @@ -namespace StevesBot.Worker.Tests.Unit; +namespace StevesBot.Library.Tests.Unit; public class DiscordMessageReferenceTests { diff --git a/src/tests/StevesBot.Worker.Tests/Unit/DiscordMessageReferenceTypesTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageReferenceTypesTests.cs similarity index 90% rename from src/tests/StevesBot.Worker.Tests/Unit/DiscordMessageReferenceTypesTests.cs rename to src/tests/StevesBot.Library.Tests/Unit/DiscordMessageReferenceTypesTests.cs index cc00aca..e3c2645 100644 --- a/src/tests/StevesBot.Worker.Tests/Unit/DiscordMessageReferenceTypesTests.cs +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageReferenceTypesTests.cs @@ -1,4 +1,4 @@ -namespace StevesBot.Worker.Tests.Unit; +namespace StevesBot.Library.Tests.Unit; public class DiscordMessageReferenceTypesTests { diff --git a/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageTests.cs new file mode 100644 index 0000000..4e5d120 --- /dev/null +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordMessageTests.cs @@ -0,0 +1 @@ +namespace StevesBot.Library.Tests.Unit; \ No newline at end of file diff --git a/src/tests/StevesBot.Worker.Tests/Unit/DiscordRestClientExceptionTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordRestClientExceptionTests.cs similarity index 95% rename from src/tests/StevesBot.Worker.Tests/Unit/DiscordRestClientExceptionTests.cs rename to src/tests/StevesBot.Library.Tests/Unit/DiscordRestClientExceptionTests.cs index 5860b21..ea3dff3 100644 --- a/src/tests/StevesBot.Worker.Tests/Unit/DiscordRestClientExceptionTests.cs +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordRestClientExceptionTests.cs @@ -1,4 +1,4 @@ -namespace StevesBot.Worker.Tests.Unit; +namespace StevesBot.Library.Tests.Unit; public class DiscordRestClientExceptionTests { diff --git a/src/tests/StevesBot.Worker.Tests/Unit/DiscordRestClientTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordRestClientTests.cs similarity index 98% rename from src/tests/StevesBot.Worker.Tests/Unit/DiscordRestClientTests.cs rename to src/tests/StevesBot.Library.Tests/Unit/DiscordRestClientTests.cs index 17749d4..02dd99c 100644 --- a/src/tests/StevesBot.Worker.Tests/Unit/DiscordRestClientTests.cs +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordRestClientTests.cs @@ -1,6 +1,4 @@ -using Microsoft.AspNetCore.Http.HttpResults; - -namespace StevesBot.Worker.Tests.Unit; +namespace StevesBot.Library.Tests.Unit; public sealed class DiscordRestClientTests : IDisposable { diff --git a/src/tests/StevesBot.Library.Tests/Unit/DiscordUserTests.cs b/src/tests/StevesBot.Library.Tests/Unit/DiscordUserTests.cs new file mode 100644 index 0000000..4e5d120 --- /dev/null +++ b/src/tests/StevesBot.Library.Tests/Unit/DiscordUserTests.cs @@ -0,0 +1 @@ +namespace StevesBot.Library.Tests.Unit; \ No newline at end of file diff --git a/src/tests/StevesBot.Library.Tests/Unit/GatewayResponseTests.cs b/src/tests/StevesBot.Library.Tests/Unit/GatewayResponseTests.cs new file mode 100644 index 0000000..e69de29 diff --git a/src/tests/StevesBot.Library.Tests/Unit/HostExtensionsTests.cs b/src/tests/StevesBot.Library.Tests/Unit/HostExtensionsTests.cs new file mode 100644 index 0000000..8b8f489 --- /dev/null +++ b/src/tests/StevesBot.Library.Tests/Unit/HostExtensionsTests.cs @@ -0,0 +1,6 @@ +namespace StevesBot.Library.Tests.Unit; + +public class HostExtensionsTests +{ + +} \ No newline at end of file diff --git a/src/tests/StevesBot.Library.Tests/Unit/SeqOptionsTests.cs b/src/tests/StevesBot.Library.Tests/Unit/SeqOptionsTests.cs new file mode 100644 index 0000000..4d14454 --- /dev/null +++ b/src/tests/StevesBot.Library.Tests/Unit/SeqOptionsTests.cs @@ -0,0 +1,66 @@ +namespace StevesBot.Library.Tests.Unit; + +public class SeqOptionsTests +{ + [Fact] + public void Constructor_WhenCalled_ItShouldReturnInstance() + { + var result = new SeqOptions(); + + result.ServerUrl.Should().Be(string.Empty); + result.ApiKeyHeader.Should().Be(string.Empty); + result.ApiKey.Should().Be(string.Empty); + result.IsEnabled.Should().BeFalse(); + result.LogEndpoint.Should().Be($"{string.Empty}/ingest/otlp/v1/logs"); + result.TraceEndpoint.Should().Be($"{string.Empty}/ingest/otlp/v1/traces"); + result.AuthHeader.Should().Be($"{string.Empty}={string.Empty}"); + } + + [Fact] + public void Constructor_WhenPropertiesSet_ItShouldReturnCorrectValues() + { + var serverUrl = "http://example.com"; + var apiKeyHeader = "ApiKeyHeader"; + var apiKey = "ApiKeyValue"; + + var result = new SeqOptions + { + ServerUrl = serverUrl, + ApiKeyHeader = apiKeyHeader, + ApiKey = apiKey + }; + + result.ServerUrl.Should().Be(serverUrl); + result.ApiKeyHeader.Should().Be(apiKeyHeader); + result.ApiKey.Should().Be(apiKey); + result.IsEnabled.Should().BeTrue(); + result.LogEndpoint.Should().Be($"{serverUrl}/ingest/otlp/v1/logs"); + result.TraceEndpoint.Should().Be($"{serverUrl}/ingest/otlp/v1/traces"); + result.AuthHeader.Should().Be($"{apiKeyHeader}={apiKey}"); + } + + [Theory] + [InlineData(null, null, null, false)] + [InlineData("", "", "", false)] + [InlineData("http://example.com", null, null, false)] + [InlineData("http://example.com", "", "", false)] + [InlineData(null, "ApiKeyHeader", null, false)] + [InlineData(null, null, "ApiKeyValue", false)] + [InlineData("http://example.com", "ApiKeyHeader", "ApiKeyValue", true)] + [InlineData("http://example.com", "", "ApiKeyValue", false)] + [InlineData("", "ApiKeyHeader", "ApiKeyValue", false)] + [InlineData("http://example.com", "ApiKeyHeader", null, false)] + [InlineData("", "ApiKeyHeader", null, false)] + [InlineData(null, "ApiKeyHeader", "ApiKeyValue", false)] + public void IsEnabled_WhenPropertiesAreEmpty_ItShouldReturnFalse(string? serverUrl, string? apiKeyHeader, string? apiKey, bool expected) + { + var result = new SeqOptions + { + ServerUrl = serverUrl!, + ApiKeyHeader = apiKeyHeader!, + ApiKey = apiKey! + }; + + result.IsEnabled.Should().Be(expected); + } +} \ No newline at end of file diff --git a/src/tests/StevesBot.Library.Tests/Unit/StevesBotWebhookInstrumentationTests.cs b/src/tests/StevesBot.Library.Tests/Unit/StevesBotWebhookInstrumentationTests.cs new file mode 100644 index 0000000..c762d06 --- /dev/null +++ b/src/tests/StevesBot.Library.Tests/Unit/StevesBotWebhookInstrumentationTests.cs @@ -0,0 +1,32 @@ +namespace StevesBot.Library.Tests.Unit; + +public sealed class StevesBotWebhookInstrumentationTests : IDisposable +{ + private readonly StevesBotWebhookInstrumentation _instrumentation = new(); + + [Fact] + public void SourceName_WhenCalled_ItShouldReturnCorrectName() + { + _instrumentation.SourceName.Should().Be("StevesBot.Webhook"); + } + + [Fact] + public void SourceVersion_WhenCalled_ItShouldReturnCorrectVersion() + { + _instrumentation.SourceVersion.Should().Be("0.0.0"); + } + + [Fact] + public void Constructor_WhenCalled_ItShouldReturnInstance() + { + using var result = new StevesBotWorkerInstrumentation(); + using var expectedSource = new ActivitySource(_instrumentation.SourceName, _instrumentation.SourceVersion); + + result.Source.Should().BeEquivalentTo(expectedSource); + } + + public void Dispose() + { + _instrumentation.Dispose(); + } +} \ No newline at end of file diff --git a/src/tests/StevesBot.Library.Tests/Unit/StevesBotWorkerInstrumentationTests.cs b/src/tests/StevesBot.Library.Tests/Unit/StevesBotWorkerInstrumentationTests.cs new file mode 100644 index 0000000..3d94aa6 --- /dev/null +++ b/src/tests/StevesBot.Library.Tests/Unit/StevesBotWorkerInstrumentationTests.cs @@ -0,0 +1,32 @@ +namespace StevesBot.Library.Tests.Unit; + +public sealed class StevesBotWorkerInstrumentationTests : IDisposable +{ + private readonly StevesBotWorkerInstrumentation _instrumentation = new(); + + [Fact] + public void SourceName_WhenCalled_ItShouldReturnCorrectName() + { + _instrumentation.SourceName.Should().Be("StevesBot.Worker"); + } + + [Fact] + public void SourceVersion_WhenCalled_ItShouldReturnCorrectVersion() + { + _instrumentation.SourceVersion.Should().Be("0.0.0"); + } + + [Fact] + public void Constructor_WhenCalled_ItShouldReturnInstance() + { + using var result = new StevesBotWorkerInstrumentation(); + using var expectedSource = new ActivitySource(_instrumentation.SourceName, _instrumentation.SourceVersion); + + result.Source.Should().BeEquivalentTo(expectedSource); + } + + public void Dispose() + { + _instrumentation.Dispose(); + } +} \ No newline at end of file diff --git a/src/tests/StevesBot.Library.Tests/Usings.cs b/src/tests/StevesBot.Library.Tests/Usings.cs index 99b9928..61c33bf 100644 --- a/src/tests/StevesBot.Library.Tests/Usings.cs +++ b/src/tests/StevesBot.Library.Tests/Usings.cs @@ -1,5 +1,16 @@ +global using System.Diagnostics; +global using System.Net; +global using System.Text.Json; + global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Logging; + +global using Moq; + +global using RichardSzalay.MockHttp; global using StevesBot.Library.Discord; global using StevesBot.Library.Discord.Common; -global using StevesBot.Library.Discord.Rest; \ No newline at end of file +global using StevesBot.Library.Discord.Rest; +global using StevesBot.Library.Discord.Rest.Requests; +global using StevesBot.Library.Telemetry;