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));
+ }
+ }
+}