public async Task MessageTypes_AreCreated_OrAltered()
        {
            // Arrange
            await InitializeDatabaseAsync();
            await connection.ExecuteAsync("ALTER MESSAGE TYPE [TestMessageType] VALIDATION = EMPTY;");
            var initializer = new SqlServerServiceBrokerInitializer(connection);
            var application = new ServiceBrokerApplicationBuilder(new ServiceCollection())
                // Altered
                .AddMessageType<TestMessageType>()
                // Created
                .AddMessageType<TestMessageTypeNoValidation>()
                // Created (or altered) indirectly via contracts
                .AddContract<TestContract>()
                // Created (or altered) indirectly via contracts of services
                .AddService<TargetService>()
                .Build();

            // Act
            await initializer.InitializeAsync(application);

            // Assert
            var messageTypes = await connection.QueryAsync("SELECT * FROM sys.service_message_types");

            Assert.Contains(messageTypes, m => m.name == "TestMessageType" && m.validation == "N ");
            Assert.Contains(messageTypes, m => m.name == "TestMessageTypeNoValidation" && m.validation == "N ");
            Assert.Contains(messageTypes, m => m.name == "TestMessageTypeEmptyValidation" && m.validation == "E ");
            Assert.Contains(messageTypes, m => m.name == "TestMessageTypeXmlValidation" && m.validation == "X ");
        }
        public async Task Queues_AreCreated()
        {
            // Arrange
            await InitializeDatabaseAsync();
            var initializer = new SqlServerServiceBrokerInitializer(connection);
            var application = new ServiceBrokerApplicationBuilder(new ServiceCollection())
                .AddQueue<QueueCreatedDirectly>()
                .AddService<ServiceCreatedDirectly>()
                .Build();

            // Act
            await initializer.InitializeAsync(application);

            // Assert
            var queues = await connection.QueryAsync("SELECT * FROM sys.service_queues");

            Assert.Contains(queues, c => c.name == nameof(QueueCreatedDirectly));
            Assert.Contains(queues, c => c.name == nameof(QueueCreatedIndirectly));
        }
        public static void AddSleeper(this IServiceCollection services, Action<ServiceBrokerApplicationBuilder> setupAction)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (setupAction == null)
            {
                throw new ArgumentNullException(nameof(setupAction));
            }

            services.AddLogging();

            var builder = new ServiceBrokerApplicationBuilder(services);

            setupAction(builder);

            services.AddSingleton(builder.Build());
        }