diff --git a/src/Components/Aspire.NATS.Net/AspireNatsClientExtensions.cs b/src/Components/Aspire.NATS.Net/AspireNatsClientExtensions.cs index f23822920e..e890f044cf 100644 --- a/src/Components/Aspire.NATS.Net/AspireNatsClientExtensions.cs +++ b/src/Components/Aspire.NATS.Net/AspireNatsClientExtensions.cs @@ -32,7 +32,12 @@ public static class AspireNatsClientExtensions /// Thrown if mandatory is null. /// Thrown when mandatory is not provided. public static void AddNatsClient(this IHostApplicationBuilder builder, string connectionName, Action? configureSettings = null, Func? configureOptions = null) - => AddNatsClient(builder, configurationSectionName: DefaultConfigSectionName, connectionName: connectionName, serviceKey: null, configureSettings: configureSettings, configureOptions: configureOptions); + { + ArgumentNullException.ThrowIfNull(builder); + ArgumentException.ThrowIfNullOrEmpty(connectionName); + + AddNatsClient(builder, configurationSectionName: DefaultConfigSectionName, connectionName: connectionName, serviceKey: null, configureSettings: configureSettings, configureOptions: configureOptions); + } /// /// Registers as a keyed service for given for connecting NATS server with NATS client. @@ -47,6 +52,7 @@ public static void AddNatsClient(this IHostApplicationBuilder builder, string co /// Thrown when mandatory is not provided. public static void AddKeyedNatsClient(this IHostApplicationBuilder builder, string name, Action? configureSettings = null, Func? configureOptions = null) { + ArgumentNullException.ThrowIfNull(builder); ArgumentException.ThrowIfNullOrEmpty(name); AddNatsClient(builder, configurationSectionName: $"{DefaultConfigSectionName}:{name}", connectionName: name, serviceKey: name, configureSettings: configureSettings, configureOptions: configureOptions); diff --git a/tests/Aspire.NATS.Net.Tests/NatsClientPublicApiTests.cs b/tests/Aspire.NATS.Net.Tests/NatsClientPublicApiTests.cs new file mode 100644 index 0000000000..49fe2ac7bf --- /dev/null +++ b/tests/Aspire.NATS.Net.Tests/NatsClientPublicApiTests.cs @@ -0,0 +1,99 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.Extensions.Hosting; +using Xunit; + +namespace Aspire.NATS.Net.Tests; + +public class NatsClientPublicApiTests +{ + [Fact] + public void AddNatsClientShouldThrowWhenBuilderIsNull() + { + IHostApplicationBuilder builder = null!; + + var connectionName = "Nats"; + + var action = () => builder.AddNatsClient(connectionName); + + var exception = Assert.Throws(action); + Assert.Equal(nameof(builder), exception.ParamName); + } + + [Fact] + public void AddNatsClientShouldThrowWhenConnectionNameIsNull() + { + var builder = Host.CreateEmptyApplicationBuilder(null); + + string connectionName = null!; + + var action = () => builder.AddNatsClient(connectionName); + + var exception = Assert.Throws(action); + Assert.Equal(nameof(connectionName), exception.ParamName); + } + + [Fact] + public void AddNatsClientShouldThrowWhenConnectionNameIsEmpty() + { + var builder = Host.CreateEmptyApplicationBuilder(null); + + var connectionName = ""; + + var action = () => builder.AddNatsClient(connectionName); + + var exception = Assert.Throws(action); + Assert.Equal(nameof(connectionName), exception.ParamName); + } + + [Fact] + public void AddKeyedNatsClientShouldThrowWhenBuilderIsNull() + { + IHostApplicationBuilder builder = null!; + + var connectionName = "Nats"; + + var action = () => builder.AddKeyedNatsClient(connectionName); + + var exception = Assert.Throws(action); + Assert.Equal(nameof(builder), exception.ParamName); + } + + [Fact] + public void AddKeyedNatsClientShouldThrowWhenNameIsNull() + { + var builder = Host.CreateEmptyApplicationBuilder(null); + + string name = null!; + + var action = () => builder.AddKeyedNatsClient(name); + + var exception = Assert.Throws(action); + Assert.Equal(nameof(name), exception.ParamName); + } + + [Fact] + public void AddKeyedNatsClientShouldThrowWhenNameIsEmpty() + { + var builder = Host.CreateEmptyApplicationBuilder(null); + + var name = ""; + + var action = () => builder.AddKeyedNatsClient(name); + + var exception = Assert.Throws(action); + Assert.Equal(nameof(name), exception.ParamName); + } + + [Fact] + public void AddNatsJetStreamShouldThrowWhenBuilderIsNull() + { + IHostApplicationBuilder builder = null!; + + var action = builder.AddNatsJetStream; + + var exception = Assert.Throws(action); + Assert.Equal(nameof(builder), exception.ParamName); + } +}