diff --git a/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Assets/BusMarker.cs b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Assets/BusMarker.cs new file mode 100644 index 0000000..150b9c6 --- /dev/null +++ b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Assets/BusMarker.cs @@ -0,0 +1,6 @@ +namespace Savvyio.Extensions.DependencyInjection.QueueStorage.Assets +{ + public struct BusMarker + { + } +} diff --git a/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Assets/QueueMarker.cs b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Assets/QueueMarker.cs new file mode 100644 index 0000000..afb2514 --- /dev/null +++ b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Assets/QueueMarker.cs @@ -0,0 +1,6 @@ +namespace Savvyio.Extensions.DependencyInjection.QueueStorage.Assets +{ + public struct QueueMarker + { + } +} diff --git a/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests.csproj b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests.csproj new file mode 100644 index 0000000..b8586c4 --- /dev/null +++ b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests.csproj @@ -0,0 +1,13 @@ + + + Savvyio.Extensions.DependencyInjection.QueueStorage + + + + + + + + + + diff --git a/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/ServiceCollectionExtensionsTest.cs b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/ServiceCollectionExtensionsTest.cs new file mode 100644 index 0000000..6f4bb3d --- /dev/null +++ b/test/Savvyio.Extensions.DependencyInjection.QueueStorage.Tests/ServiceCollectionExtensionsTest.cs @@ -0,0 +1,190 @@ +using System; +using Azure; +using Codebelt.Extensions.Xunit; +using Microsoft.Extensions.DependencyInjection; +using Savvyio.Commands; +using Savvyio.EventDriven; +using Savvyio.Extensions.DependencyInjection.Messaging; +using Savvyio.Extensions.DependencyInjection.QueueStorage; +using Savvyio.Extensions.DependencyInjection.QueueStorage.Assets; +using DICommands = Savvyio.Extensions.DependencyInjection.QueueStorage.Commands; +using DIEvent = Savvyio.Extensions.DependencyInjection.QueueStorage.EventDriven; +using Savvyio.Extensions.Newtonsoft.Json; +using Savvyio.Extensions.QueueStorage; +using CoreCommands = Savvyio.Extensions.QueueStorage.Commands; +using CoreEvent = Savvyio.Extensions.QueueStorage.EventDriven; +using Savvyio.Extensions.Text.Json; +using Savvyio.Messaging; +using Xunit; +using Xunit.Abstractions; +using Xunit.Sdk; + +namespace Savvyio.Extensions.DependencyInjection.QueueStorage +{ + public class ServiceCollectionExtensionsTest : Test + { + public ServiceCollectionExtensionsTest(ITestOutputHelper output) : base(output) + { + } + + [Fact] + public void AddAzureCommandQueue_ShouldAddDefaultImplementation() + { + Action azureSetup = o => + { + o.StorageAccountName = "account"; + o.QueueName = "queue"; + o.SasCredential = new AzureSasCredential("sas"); + }; + + var services = new ServiceCollection(); + services.AddMarshaller(); + services.AddAzureCommandQueue(azureSetup); + var provider = services.BuildServiceProvider(); + + Assert.IsType(provider.GetRequiredService>()); + Assert.IsType(provider.GetRequiredService>()); + Assert.IsType(provider.GetRequiredService>()); + + var opt1 = new AzureQueueOptions(); + var opt2 = new AzureQueueOptions(); + var opt3 = new AzureQueueOptions(); + + azureSetup(opt1); + provider.GetRequiredService>()(opt2); + + Assert.Equivalent(azureSetup, provider.GetRequiredService>()); + Assert.Equivalent(opt1, opt2); + + Assert.Throws(() => Assert.Equivalent(opt1, opt3)); + Assert.Throws(() => Assert.Equivalent(opt2, opt3)); + } + + [Fact] + public void AddAzureCommandQueue_ShouldAddDefaultImplementationWithMarker() + { + Action> azureSetup = o => + { + o.StorageAccountName = "account"; + o.QueueName = "queue"; + o.SasCredential = new AzureSasCredential("sas"); + }; + + var services = new ServiceCollection(); + services.AddMarshaller(); + services.AddAzureCommandQueue(azureSetup); + var provider = services.BuildServiceProvider(); + + Assert.IsType>(provider.GetRequiredService>()); + Assert.IsType>(provider.GetRequiredService>()); + Assert.IsType>(provider.GetRequiredService>()); + + var opt1 = new AzureQueueOptions(); + var opt2 = new AzureQueueOptions(); + var opt3 = new AzureQueueOptions(); + + azureSetup(opt1); + provider.GetRequiredService>>()(opt2); + + Assert.Equivalent(azureSetup, provider.GetRequiredService>>()); + Assert.Equivalent(opt1, opt2); + + Assert.Throws(() => Assert.Equivalent(opt1, opt3)); + Assert.Throws(() => Assert.Equivalent(opt2, opt3)); + } + + [Fact] + public void AddAzureEventBus_ShouldAddDefaultImplementation() + { + Action azureQueueSetup = o => + { + o.StorageAccountName = "account"; + o.QueueName = "queue"; + o.SasCredential = new AzureSasCredential("sas"); + }; + Action azureEventBusSetup = o => + { + o.TopicEndpoint = new Uri("https://example.com"); + o.SasCredential = new AzureSasCredential("sas"); + }; + + var services = new ServiceCollection(); + services.AddMarshaller(); + services.AddAzureEventBus(azureQueueSetup, azureEventBusSetup); + var provider = services.BuildServiceProvider(); + + Assert.IsType(provider.GetRequiredService>()); + Assert.IsType(provider.GetRequiredService>()); + Assert.IsType(provider.GetRequiredService>()); + + var q1 = new AzureQueueOptions(); + var q2 = new AzureQueueOptions(); + var q3 = new AzureQueueOptions(); + var b1 = new CoreEvent.AzureEventBusOptions(); + var b2 = new CoreEvent.AzureEventBusOptions(); + var b3 = new CoreEvent.AzureEventBusOptions(); + + azureQueueSetup(q1); + provider.GetRequiredService>()(q2); + azureEventBusSetup(b1); + provider.GetRequiredService>()(b2); + + Assert.Equivalent(azureQueueSetup, provider.GetRequiredService>()); + Assert.Equivalent(azureEventBusSetup, provider.GetRequiredService>()); + Assert.Equivalent(q1, q2); + Assert.Equivalent(b1, b2); + + Assert.Throws(() => Assert.Equivalent(q1, q3)); + Assert.Throws(() => Assert.Equivalent(q2, q3)); + Assert.Throws(() => Assert.Equivalent(b1, b3)); + Assert.Throws(() => Assert.Equivalent(b2, b3)); + } + + [Fact] + public void AddAzureEventBus_ShouldAddDefaultImplementationWithMarker() + { + Action> azureQueueSetup = o => + { + o.StorageAccountName = "account"; + o.QueueName = "queue"; + o.SasCredential = new AzureSasCredential("sas"); + }; + Action> azureEventBusSetup = o => + { + o.TopicEndpoint = new Uri("https://example.com"); + o.SasCredential = new AzureSasCredential("sas"); + }; + + var services = new ServiceCollection(); + services.AddMarshaller(); + services.AddAzureEventBus(azureQueueSetup, azureEventBusSetup); + var provider = services.BuildServiceProvider(); + + Assert.IsType>(provider.GetRequiredService>()); + Assert.IsType>(provider.GetRequiredService>()); + Assert.IsType>(provider.GetRequiredService>()); + + var q1 = new AzureQueueOptions(); + var q2 = new AzureQueueOptions(); + var q3 = new AzureQueueOptions(); + var b1 = new DIEvent.AzureEventBusOptions(); + var b2 = new DIEvent.AzureEventBusOptions(); + var b3 = new DIEvent.AzureEventBusOptions(); + + azureQueueSetup(q1); + provider.GetRequiredService>>()(q2); + azureEventBusSetup(b1); + provider.GetRequiredService>>()(b2); + + Assert.Equivalent(azureQueueSetup, provider.GetRequiredService>>()); + Assert.Equivalent(azureEventBusSetup, provider.GetRequiredService>>()); + Assert.Equivalent(q1, q2); + Assert.Equivalent(b1, b2); + + Assert.Throws(() => Assert.Equivalent(q1, q3)); + Assert.Throws(() => Assert.Equivalent(q2, q3)); + Assert.Throws(() => Assert.Equivalent(b1, b3)); + Assert.Throws(() => Assert.Equivalent(b2, b3)); + } + } +}